点击蓝字 关注我们
前言
JNDI注⼊常⽤rmi和ldap协议去打,本⽂主要讲述通过go语⾔检测ldap协议以及获取相关字段的⼀种⽅式。
通过跟4ra1n师傅的⽂章的学习和与他本⼈的交流,他的检测思路是⽤go语⾔模拟回包,然后分析数据包,获取其中需要的路径字段。因为要确定⽬标是哪个payload⽣效,所以获取ldap/rmi请求的路径是必要的。
我在实现他⽂章⾥的思路的时候发现⼀些不理解的地⽅,接下来放出自己的一些困惑和我自己实现的思路。
模拟扫描器打payload:
fake server 端:
我打印出请求路径的hex
wireshark抓包:
可以看到这个#look的hex跟上⾯fake server端不⼀样,但是fake server端的hex转成string后依然是#look
个人实现思路
所以我选择⾃⼰再⽤真正的ldapserver实现⼀次这个检测思路抓包ldap⼀次连接的数据包
。
client -> server
data : 300c020101600702010304008000
server -> client
data: 300c02010161070a010004000400
client -> server data:
30818e0201026481880405236c6f6f6b307f3016040d6a617661436c6173734e616d6531050403666f6f3028040c6a617661436f64654261736531180416687474703a2f2f3132372e302e302e313a36363
wireshark对数据包进⾏梳理:
画⼀个示意图:
分析到这⾥已经拿到想要的东⻄了,这个searchRequest⾥⾯就包含了路径参数,所以接下来起⼀个ldap去抓这个searchRequest ldapserver这个库可以直接帮助起⼀个ldap server并且⾃⼰可以构建返回包
所以调⽤ldap.Message.GetSearchRequest()去获取
发包
拿到路径参数
判断ldap协议即看数据包是否存在magic num即可
原文始发于微信公众号(Th0r安全):基于ldap协议字段特征的漏洞检测
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论