Nuclei POC 编写教程(非常详细)
目录
0x03 Nuclei POC 案例 1 - CVE-2023-28432(匹配结果)
0x04 Nuclei POC 案例 2 - CVE-2022-30525(匹配交互)
0x00 前言
希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢!?
个人博客链接:CH4SER的个人BLOG – Welcome To Ch4ser's Blog
0x01 YAML 简介
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
参考文章:
https://blog.csdn.net/qq_41315957/article/details/126594572
https://blog.csdn.net/qq_41315957/article/details/126594670
基本语法规则:
- 大小写敏感
- 使用缩进表示层级关系(不允许使用Tab键,只允许使用空格)
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
YAML POC 基本组成:(总的来说,可以看成三个部分:基本信息、请求、匹配或提取)
- 1、编号?id
- 2、信息?info
- 3、请求?http?file?tcp...
- 4、匹配?matchers?Interactsh
- 5、提取?extractors
具体使用匹配还是提取,要根据实际情况来看。比如,当利用成功条件是页面返回里有特定关键字时,用的是匹配;当需要根据页面返回的长度判断有没有利用成功时,用的是提取。
0x02 YAML POC 编写流程
核心思路就是套用已有的模板,比如找到 Nuclei 的官方模板(在 C:\Users\ch4ser\nuclei-templates\ 下),然后根据需要修改。
首先需要修改 POC 的基本信息(编号 id、详细信息 info 等),然后编写提交的请求(大部分都是 HTTP),然后根据实际情况选择使用匹配还是提取。
0x03 Nuclei POC 案例 1 - CVE-2023-28432(匹配结果)
漏洞介绍:https://github.com/vulhub/vulhub/blob/master/minio/CVE-2023-28432/README.zh-cn.md
根据介绍得知,我们需要发送指定的 POST 请求数据包进行漏洞验证,最终根据返回包里是否有 MINIO_SECRET_KEY 和 MINIO_ROOT_PASSWORD 这两个关键字判断漏洞是否存在。
使用 VSCode 编写 POC,套用已有的模板进行修改不容易出错且效率高,这里我主要修改了下 http 请求包和 matchers 匹配器。
发送一个POST请求到目标系统的/minio/bootstrap/v1/verify
接口,匹配器用于检查响应的内容和状态码。
它使用了三个关键词:"MINIO_ROOT_PASSWORD"
、"MINIO_ROOT_USER"
和"MinioEnv"
。如果响应的内容中包含这些关键词,并且响应的状态码为200
,则表示目标系统存在漏洞。
其中 http 请求中的变量 {{Hostname}} 会被替换为主机名(包括端口),matchers 的逻辑为含有关键字和状态码为 200 同时成立(and),且返回包中几个关键字全部含有(and)。
启动 Nuclei 对目标进行扫描,命令示例如下:
1、批量检测urls.txt,poc为test.yaml,输出结果result.txt
nuclei.exe -l urls.txt -t test.yaml -o result.txt
2、对单个目标检测,poc为test.yaml,输出结果result.txt
nuclei.exe -target http://xxx.com -t test.yaml -o result.txt
检测结果为目标存在 CVE-2023-28432 漏洞。PS:解决 CMD 输出彩色字体 ANSI(ansi189-bin)
0x04 Nuclei POC 案例 2 - CVE-2022-30525(匹配交互)
漏洞介绍:(CVE-2022-30525)Zyxel 防火墙未经身份验证的远程命令注入_zyxel.selfrep-CSDN博客
根据漏洞介绍得知命令注入点为 mtu 参数,采用 DNSLog 的方式进行漏洞验证,最终根据响应中是否包含特定的关键词(如interactsh-protocol
)判断漏洞是否存在。
具体 POC 代码如下:
发送一个POST请求到目标系统的/ztp/cgi-bin/handler
接口,请求中包含一个恶意命令注入的payload。这个payload会在mtu
字段中插入一个特定的字符串{{exploit}}
,并在该字符串前面添加一个分号和一个ping
命令来执行。
如果目标系统存在漏洞,它会执行这个命令并返回响应。POC中使用的匹配器会检查响应中是否包含特定的关键词,如interactsh-protocol
,如果存在,则表示目标系统存在漏洞。
{{exploit}}
可以理解为 payload 的占位符,在此传入命令执行的 payload。{{interactsh-url}}
可以理解为 nuclei 自带的 DNSLog 地址。
启动 Nuclei 对目标进行扫描,由于 vulhub 没有这个漏洞环境,我在 Fofa 上搜了使用 Zyxel 防火墙的资产进行扫描,但没有扫到。
PS:在 Nuclei 官方自带的 POC 中,info 基本信息里基本上都有 Fofa、Shodan 对应漏洞的搜索语法,如下:
0x05 Nuclei POC 模版生成 BP 插件
Nuclei Template Generator Plugin 是一个能辅助生成 Nuclei POC 的 BurpSuite 插件,可直接从 BurpSuite 商店下载。
配置 nuclei.exe 的路径、模板存放路径、作者,完成后点击 save 即可。
以 CVE-2023-28432 为例,Burp 抓包后构造指定的 POST 请求并发送(注意这两个地方都要改成 9000 端口),看到 "MINIO_ROOT_PASSWORD" 等字段说明漏洞存在。
在左侧 Request 任意空白处右键 - Extensions - Nuclei Template Generator Plugin - Generate Template
然后在右侧 Response 选中 "MINIO_ROOT_PASSWORD" 右键 - Extensions - Nuclei Template Generator Plugin - Generate Template
点击 Execute 执行即可,类似 id、info 这种可以自己修改。
但是这个插件对于 CVE-2022-30525 这种匹配交互的情况是不行的,对于匹配结果的情况倒是非常的好用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!