上一篇介绍了nuclei的基本用法。可以参考文章:POC模拟攻击工具——Nuclei介绍(一)接下来我重点讲解一下nuclei中的三个概念,Workflows,Mathcer和Extractors。这些内容将帮助您编写更复杂、更高效的检测脚本!workflowsWorkflows允许用户自定义模板的执行顺序。这是使用原子核的最有效方法。官方推荐用户使用自定义Workflows来缩短扫描时间,提高扫描效率!基本工作流程例如,在工作流程扫描文件目录下定义如下yaml::files/backup-files.yaml-tags:xss,ssrf,cve,lfi条件工作流程首先确认springboot-detect.yaml是否正确执行,如果OK则运行subtemplates下的模板,示例如下:id:springboot-workflowinfo:name:SpringbootSecurityChecksauthor:dwisiswant0workflows:-模板:security-misconfiguration/springboot-detect.yamlsubtemplates:-模板:cves/CVE-2018-1271.yaml-模板:cves/CVE-2018-1271.yaml-模板:cves/CVE-2020-5410.yaml-模板:漏洞/springboot-actuators-jolokia-xxe.yaml-模板:漏洞/springboot-h2-db-rce.yaml运行工作流。核-listhttp_urls.txt-wworkflows/my-workflow.yaml。MatchersMathcer顾名思义提供了一些规则来比较和匹配响应结果!常用的有六种。mathcer,如下:statusIntegerComparisonsofPartsizeContentLengthofPartwordPartforaprotocolregexPartforaprotocolbinaryPartforaprotocoldslPartforaprotocol比如你要比较匹配响应码,这样写:matchers:#匹配状态码-type:status#我们要匹配的一些状态码status:-200当你想对响应码做复杂的匹配时,你可以使用dsl。matchers:-type:dsldsl:-"len(body)<1024&&status_code==200"-"contains(toupper(body),md5(cookie))"前面例子的意思是匹配responsebody长度为小于1024且状态码为200。判断大写体是否包含cookie的md5sum。使用condition:and\or来匹配多个条件。默认情况下,多个条件是and的关系。官方的例子如下:matchers:#匹配bodyword-type:word#一些我们要匹配的词words:-"[core]"-"[config]"#两个词都必须在响应bodycondition:and#我们要匹配请求body(默认)部分:body详情请参考:https://nuclei.projectdiscovery.io/templating-guide/operators/matchers/。ExtractorsExtractors也会检查结果。与匹配器相比,它可以显示符合规则的内容。它还具有不同类型的提取器,如下所示:1.regex-根据正则表达式从响应中提取数据。2.kval-从ResponseHeader/Cookie中提取key:value/key=value格式的数据。3.json-从类似JQ语法的基于JSON的响应中提取数据。4.xpath-从HTML响应中提取基于xpath的数据。例如:extractors:-type:xpath#extractorattribute的类型:href#要提取的属性值(可选)xpath:-"/html/body/div/p[2]/a"#extraction5.dsl的xpath值-基于DSL表达式从响应中提取数据。详情请参考:https://nuclei.projectdiscovery.io/templating-guide/operators/extractors/。由于使用nuclei的时间较短,关于Extractors和Matchers,个人感觉在使用上差别不大!两者都是对结果的检查。与matchers相比,Extractors可以展示符合规则的内容!如果你需要编写复杂的响应验证,你需要花更多的时间研究dsl。如何从nuclei中获益在使用nuclei一段时间后,个人觉得使用nuclei最有价值的地方就是里面的各种模板。我们可以查看每个模板的脚本来学习攻击方法,也可以根据里面的参考查看漏洞。这对于安全知识的积累尤其有帮助!至于发送攻击请求,这其实就简单多了。我们是否使用原子核并不重要。举个简单的例子,CVE-2020-9484的yaml脚本定义如下:id:CVE-2020-9484info:name:ApacheTomcatRemoteCommandExecutionauthor:dwisiswant0severity:highdescription:|WhenusingApacheTomcatversions10.0.0-M1到10.0.0-M4、9.0.0.M1到9.0.34、8.5.0到8.5.54和7.0.0到7.0.103ifa)攻击者能够控制服务器上文件的内容和名称;b)服务器被配置为使用带有FileStore的PersistenceManager;并且c)PersistenceManager配置有sessionAttributeValueClassNameFilter="null"(默认值,除非使用SecurityManager)或足够宽松的过滤器以允许反序列化攻击者提供的对象;andd)攻击者知道从FileStore使用的存储位置到攻击者控制的文件的相对文件路径r;然后,使用特制的请求,攻击者将能够通过反序列化他们控制下的文件来触发远程代码执行。请注意,所有条件a)到d)必须为真才能使攻击成功。参考:-http//packetstormsecurity.com/files/157924/Apache-Tomcat-CVE-2020-9484-Proof-Of-Concept.html-https://nvd.nist.gov/vuln/detail/CVE-2020-9484-https://lists.apache.org/thread.html/r77eae567ed829da9012cadb29af17f2df8fa23bf66faf88229857bb1%40%3Cannounce.tomcat.apache.org%3E-https://lists.apache.org/thread.html/rf70f53af27e04869bdac18b1fc14a3ee529e59eb12292c8791a77926@%3Cusers.tomcat.apache.org%3Eclassification:cvss-metrics:CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:Hcvss-score:7cve-id:CVE-2020-9484cwe-id:CWE-502tags:cve、cve2020、apache、tomcat、rcerequests:-方法:GETheaders:Cookie:“JSESSIONID=../../../../../usr/local/tomcat/groovy"path:-"{{BaseURL}}/index.jsp"matchers-condition:andmatchers:-type:statusstatus:-500-type:wordpart:bodywords:-"Exception"-"ObjectInputStream"-"PersistentManagerBase"condition:而在这个脚本中,最简单的可能是requests:部分攻击脚本代码,我们用jmeter或者写代码我们自己的方式可以轻松模拟!description:part和reference:part是我们需要重点关注的对象!也是我们深入理解poc攻击的最好例证!
