当前位置: 首页 > 科技观察

POC模拟攻击利器—Nuclei简介

时间:2023-03-12 06:43:46 科技观察

引入Nuclei的原因使用依赖检查发现的问题需要研发人员修复,需要研发人员重现问题!这确实有难度,不仅要理解CVE相关bug的具体含义,还要模拟攻击,这对测试人员的要求显然太高了!凭借自己多年对各种测试工具的研究经验,我凭直觉告诉自己应该有类似的工具,经过各种技术调研后选择了Nuclei。使用Nuclei主要是模拟CVE相关的问题。此外,并不是所有的CVE问题都可以通过这个工具来模拟。建议您在使用前检查需要验证的CVE问题是否在Nuclei模板中。如果没有,您需要自己创建它们。Nuclei基础Nuclei是一款基于YAML语法模板开发的定制化快速漏洞扫描器。采用Go语言开发,高度可配置、可扩展、易用。Nuclei使用零误报的自定义模板向目标发送请求,同时对大量主机执行快速扫描。Nuclei提供了TCP、DNS、HTTP、FILE等各种协议的扫描,通过强大灵活的模板,可以使用Nuclei模拟各种安全检查。Nuclei安装首先安装go环境(go1.17或更高版本)。下载对应平台的安装包,默认安装。本文默认安装windows版本。https://github.com/projectdiscovery/nuclei/releases。Nuclei基本使用介绍原理:根据yaml模板中的内容模拟攻击请求,然后根据响应结果判断系统是否存在漏洞。内置的yaml文件路径如下:(本文只关注CVE相关漏洞)。上图中的一个yaml文件,其实就是模拟了一个攻击请求。以CVE-2022-29298.yaml为例,文件如下:id:CVE-2022-29298info:name:SolarViewCompact6.00-DirectoryTraversauthor:ritikchaddhaseverity:highdescription:SolarViewCompactver.6.00允许攻击者访问敏感文件通过目录遍历。参考:-https://www.exploit-db.com/exploits/50950-https://drive.google.com/file/d/1-RHw9ekVidP8zc0xpbzBXnse2gSY1xbH/view-https://nvd.nist.gov/vuln/detail/CVE-2022-29298-https://drive.google.com/file/d/1-RHw9ekVidP8zc0xpbzBXnse2gSY1xbH/view?usp=sharingclassification:c-metrics:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:Ncvss-score:7.5cve-id:CVE-2022-29298cwe-id:CWE-22metadata:shodan-query:http.html:“SolarViewCompact”已验证:“true”标签:cve、cve2022、lfi、solarviewrequests:-方法:GETpath:-"{{BaseURL}}/downloader.php?file=../../../../../../../../../../../../../etc/passwd%00.jpg“匹配器条件:和匹配器:-类型:regexpart:bodyregex:-"root:.*:0:0:"-类型:状态tatus:-200我们可以关注以下几个字段:severity表示这个cve漏洞的级别标签,表示这个漏洞定义在哪个tag中,cve表示在输入cve标签时执行yaml命令行。requests,表示要模拟的请求,aboutmethod:GET,path"{{BaseURL}}",不再详细解释,与http协议中定义的内容一致。简而言之,匹配器用于验证请求响应。上面的代码验证了响应中的两项:通过正则方法——type:regex来验证响应体是否满足正则表达式——“root:.*:0:0:”。检查response的状态码-type:status是否为200。这两个检查的内容是and的关系,matchers-condition:and(默认是or),我会在后面的文章中补充更多关于matcher的知识.http请求的详细写法可以参考:https://nuclei.projectdiscovery.io/templating-guide/protocols/http/。具体模板编写语法请参考:https://github.com/projectdiscovery/nuclei/blob/master/SY??NTAX-REFERENCE.md。注意:从v2.5.2开始,nuclei运行时会自动更新模板。注:这里有同学可能会问下面的语法形式是什么意思?-type:statusstatus:-200这是yaml语法,大家可以自行百度!常用Nuclei命令的Nuclei帮助文档。nuclei–h这里就不详细介绍了,大家自己查吧。其他常用命令如下:1、对于urlhttps://example.com,进行cve规则检测(通过标签cve),检测到的漏洞级别为critical和high,作者为geeknik。nuclei-uhttps://example.com-tagscve-severitycritical,high-authorgeeknik-oresult.txt2.对于urlhttps://example.com,控制台输出统计结果-stats,检测到的漏洞级别critical和high,将结果输出到result2.json(推荐,json形式的报表统计很详细)。nuclei-uhttps://example.com-stats-severitycritical,high-oresult2.json-json-irrnuclei-debug-uhttps://example.com-itcves-severitycritical,high-oresult.txt3.对于urlhttps://example.com,检查模板CVE-2022-1439.yaml。nuclei-debug-uhttps://example.com-t\cves\2022\CVE-2022-1439.yaml4.nuclei也支持扫描不同的url,定义一个txt文件,然后把要扫描的url保存在里面,具体使用如下:nuclei-listurls.txturls.txt包括以下内容:http://example.comhttp://app.example.comhttp://test.example.comhttp://uat.example.com5.如果想输出不同格式的结果,请参考:#输出结果为JSON格式nuclei-uhttps://example.com-json#输出结果保存为Markdown格式文件nuclei-uhttps://example.com-meresult更多输出结果请参考nuclei–h的OUTPUT字段,内容如下:OUTPUT:-o,-outputstring输出文件写入发现的issues/vulnerabilities-sresp,-store-resp存储所有通过nuclei传递的请求/响应到输出目录-nc,-no-color禁用输出内容着色(ANSI转义码)-json以JSONL(ines)格式写入输出-irr,-include-rr在JSONL输出中包含请求/响应对(仅用于发现)-nm,-no-meta禁用打印结果元数据clioutput-nts,-no-timestamp在clioutput-rdb,-report-dbstringnuclei报告数据库中禁用打印时间戳(始终使用它来保存报告数据)-ms,-matcher-status显示匹配失败状态-me,-markdown-exportstring目录以markdown格式导出结果-se,-sarif-exportstringfile以SARIF格式导出结果自定义检测模板Nuclei支持自定义编写YAML语法模板,您可以根据自己的需要编写自己的检测模板例如,使用以下内容定义模板mytemplate.yaml:id:basic-exampleinfo:name:TestHTTPTemplateauthor:pdteamseverity:inforequests:-method:GETpath:-"{{BaseURL}}/"matchers:-type:words:-"Thisistestmatchertext"call,只需执行以下命令:nuclei-uhttps://example.com-tmytemplate.yamlnucleiusesummary首先确认要扫描的接口(http,url),有没有应用程序扫描、zap工具方便地,他们可以主动探索大头钉。然后确认要扫描的规则,也就是确认yaml文件(根据tag选择你要检测的内容,比如:cve、panel、lfi、xss等),我们可以使用自带的yaml配合nuclei,或者自定义yaml,以提高Scanning效率我们也可以自定义workflows,这个话题在后面的文章中会提到。最后就是通过命令运行脚本,生成测试报告。