该公众号大部分文章来自作者日常学习笔记,未经授权,严禁转载,如需转载,联系洪椒攻防实验室公众号。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。
dddd
相信很多人都用过,并且本人觉得这款扫描器挺好用的,POC数量多,而且扫描逻辑设计的也挺好。
不过POC更新可能没有那么及时,但作者已经预留了非常方便自行添加POC的设计。所以自己收集漏洞信息自己补充POC是一个很不错的选择。
本文介绍从零开始实现如何给dddd
添加自定义POC。
首先去Github、百度、谷歌、微信公众号等各种渠道收集漏洞信息。
关键词:漏洞复现、POC、EXP、漏洞预警、漏洞通告、漏洞库、漏洞文库、1day、0day等等,然后时间排序,显示最新的漏洞信息。
或者:文件上传、SQL注入、文件读取等等漏洞名称,或者各种交流群、圈子等等。
例如
就以这个 SolarWinds Serv-U目录遍历漏洞复现(CVE-2024-28995) 为例。
可以收集漏洞信息得知数据包是这样的
GET /?InternalDir=../../../../../../../../windows&InternalFile=win.ini HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11.2; rv:122.0) Gecko/20000101 Firefox/122.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: application/x-www-form-urlencoded
接下来打开Yakit
,在Web Fuzzer
功能中复现一下,哎,OK哈,文件读到了,漏洞可以用。
接下来我们思考一下怎么判断漏洞是否利用成功。注意测试读取的win.ini
文件是Windows自带的默认文件。意味着我们可以判断是否成功读取到来判断漏洞是否利用成功。
然后可以发现,读取成功会存在关键字:extensions
,可以打开自己电脑下的这个文件,可以发现是一样的。
然后接下来我们添加匹配规则,点击规则=>匹配器=>添加,选择攻击者、响应体、输入关键字extensions
,点击调试执行匹配成功就能点击应用成功添加。
接下来点击生成Yaml模板,选择Raw模板。
大概写下info
描述,自己用就不纠结那么多了,能用就行(bushi)。
然后输入扫描目标URL,点击执行,OK,验证成功。
到这里还没结束,因为yakit
生成的POC和标准的nuclei
的POC格式可能会有一些差别,我们再拿nuclei
调试一下。
执行nuclei.exe -t SolarWinds-Serv-U-FileRead-CVE-2024-28995.yaml -u url -debug
看看报错。
有报错不要慌,ChatGPT,启动!把报错信息和POC丢给它,直接改好。
再测试一次,好,成功了。这一步结束。
首先阅读dddd的文档(https://github.com/SleepingBag945/dddd/blob/main/details.md)
有一个很不错的设计,2.0版本已经集成了config
文件目录,但我们仍然可以很方便的把自己写的POC放入外置的config
文件,它会自动补充指纹及POC。
大概就是三部曲,加指纹信息(很多系统这一步可以省略,自带指纹库已有,找到对应的名称就行)、放入POC、加工作流(匹配规则)。
首先新建一个config
文件夹,里面放一个pocs
子目录、finger.yaml
、workflow.yaml
文件。
在finger.yaml
填入对应的指纹规则,以SolarWinds Serv-U
为例,可以写
SolarWinds_Serv-U:
- 'body="http://www.Serv-U.com"'
SolarWinds_Serv-U:
type:
- root
pocs:
- SolarWinds-Serv-U-FileRead-CVE-2024-28995
然后在pocs
文件夹中,放入刚刚写好的SolarWinds-Serv-U-FileRead-CVE-2024-28995.yaml
。
最后将dddd
放入与config
同级目录运行扫描,可以发现已经可以识别到我们刚刚添加的指纹及漏洞。OK,结束。
接下来就可以去优化指纹信息了,看上图的指纹信息中已有Serv-U-FTP
,可以把自己写的指纹删除,替换工作流中的匹配信息,这里不说了,又不是不能用()。
文中所使用工具链接。
Yakit:https://www.yaklang.io/
另外自动生成yaml格式POC的方法有很多,例如AI生成:https://cloud.projectdiscovery.io
,BurpSuite也有类似根据数据包自动生成yaml格式POC的插件:https://github.com/projectdiscovery/nuclei-burp-plugin
,自行研究。
具体的yaml格式POC语法可以参考官方文档:https://github.com/projectdiscovery/nuclei/blob/main/SYNTAX-REFERENCE.md
最重要的就是指纹规则和POC的判断条件。指纹尽可能的覆盖全,可以多写几个条件,标题、内容等等。POC的判断规则要考虑全面一点,例如这个任意文件读取漏洞,万一它在Linux环境下,上面写的靠读取win.ini
文件来判断就不太行。
也可以把poc加进原有的config文件并打包编译,但这样每次更新比较麻烦。不如维护自己的config文件,每次使用外置config文件补充就行。