其实这篇文章在之前就应该写完了,Log4j2(CVE-2021-44228)漏洞爆发到现在已经一年半了,奈何没有时间、精力去思考在内网环境下如何发现漏洞;过年那段时间看到了一个监听各类协议的项目,参考项目实现了监听端的部分功能,增加了批量端口监听;直到最近在不停地优化,勉强能用,顺便学习了一下go语言编程。
Log4j2(CVE-2021-44228)漏洞在公网上的暴露面已经不多了,而更多的安全人员把该漏洞的利用方向瞄准在了内网,特别是黑盒环境中(白盒可以看相应的依赖版本),一些不出外网的内网应用上,但是在内网去探测三种协议(ldap、rmi、dns)没有好的方法,ldap、rmi目前没有监听工具方便查看结果;dns比较繁琐,需要在内网进行一系列的配置,如配置dns服务器等,这就导致了没有公开的方法去探测内网的Log4j2漏洞,在这里记录一下。
漏洞扫描端出自笔者的log4j2burpscanner
,监听端出自笔者的selistener
selistener,全称为(server listener),像服务器一样监听端口,为方便取名,直接取了selistener为名
简单点来说,优点如下:
-ps , ports start 端口组监听,开始
-pe , ports end 端口组监听,结束
-pn ,port ,exp:22,3306,8443 指定端口监听
-wp ,wport ,exp: 65535 指定端口运行http服务查看结果
-t, token, exp: f0ng 指定token
由于工具基于cgo,目前还没找到好的办法,所以linux需要安装musl-tools/musl-libc-static才能运行,windows可以直接运行
在Log4j2(CVE-2021-44228)利用下,如果防火墙做了端口的限制,一般JNDIExpliot的1389等ldap的端口会禁止,那么可以使用该工具进行批量端口监听,然后在数据包内设置端口号为变量,查看端口通信接收情况(ldap),举例ldap监听情况(rmi同理):
在windows系统无法上传文件情况下,需要进行文件下载,如certutil落地文件、powershell上线等等,会遇到某些端口无法出网,可以将certuil探测的端口设置为变量,使用本工具进行监听,如下
在进行反弹shell的时候,有时会禁止一些目的端口访问,可以通过使用该工具进行批量端口监听,查看端口通信接收情况(socket)。
还可以在公网上收集payload等等,起到小蜜罐作用,感觉可以完善相应的指纹做到更全面(虽然现在的扫描器都是根据指纹来扫的,但是也有很多随意打的),如下
如果后续有新的漏洞需要内网监听,也可以使用该工具进行组合利用
使用selistener搭建内网监听服务
./selistener -t onlysecurity (-pn 9999)
不加-pn
参数则监听常用端口组
在log4j2burpscanner下设置搭建的selistener记录地址、响应查看地址
10.211.55.2:9999/%20{HOSTURI}http://10.211.55.2:65535/resp?token=onlysecurity&words={HOSTURI}
这里要注意,设置的协议为ldap://
(或者rmi://
)
插件页面
插件页面
可以看到很精准扫到了漏洞,web页面如下
页面也是采用类似dnslog的形式,查看起来还算方便
https://github.com/fuzz7j/JNDIServer 【工具雏形参考】
https://github.com/f0ng/selistener 【监听项目】
https://github.com/f0ng/log4j2burpscanner 【log4j2-burp扫描插件】