架构简析
为了使用的更加顺畅,有必要了解下框架的架构。整体而言,本框架主要包含四个部分,分别是目标收集、PoC 脚本加载、多线程检测、结果汇总。
如下图所示:
目标收集
首先来看一下目标收集,目前支持以下方式:
-u
指定单个 URL 或者 CIDR,支持 IPv4 / IPv6。使用-p
参数可以提供额外的端口,配合 CIDR 可以很方便的探测一个目标网段-f
指定一个文件,将多个 URL / CIDR 存到文件中,每行一个--dork
,框架集成了 ZoomEye、Shodan 等常见网络空间搜索引擎,只需要使用相应的参数提供搜索关键词和API-KEY
即可批量获取目标。值得一提的是,用户也可以将搜索关键词放到 PoC 脚本的 dork 属性中--plugins
调用插件加载目标,比如target_from_redis
。用户也可以自定义 TARGETS 类型插件
PoC 脚本加载
-r
选项支持指定一个或多个 PoC 路径(或目录),如果提供的是目录,框架将遍历目录然后加载所有符合条件的 PoC,用户可以用-k
选项指定关键词对 PoC 进行筛选,如组件名称、CVE 编号等。如果我们确认了目标组件,就可以用-k
选项找到所以对应的 PoC 对目标进行批量测试。如果只提供了-k
选项,-r
默认为 Pocsuite3 自带的pocsuite3/pocs
目录--plugins
调用插件加载 PoC,比如poc_from_seebug
、poc_from_redis
。用户也可以自定义 POCS 类型插件
多线程检测
当用户指定了目标和 PoC 后,框架会将每个目标和 PoC 进行匹配(笛卡尔积),生成一个元素为 (target, poc_module)
的队列,然后起一个默认大小为 150(可通过 --threads
设置) 的线程池处理这个队列。
在 Pocsuite3 中,PoC 脚本有三种运行模式,分别对应 PoC 脚本中定义的三种方法,可使用命令行参数 --verify
、--attack
、--shell
决定执行哪种方法,如果不指定,默认是 --verify
。
线程要做的就是以 target 为参数初始化 PoC 脚本并执行指定方法,然后获取执行结果。
结果汇总
上一步获取了执行结果后,框架提供了多种方法对结果进行处理并保存:
- 控制台日志,
-v
参数控制日志级别,--ppt
参数可以对 IP 地址马赛克处理,方便录屏 -o
参数将运行结果保存为 JSON Lines 格式的文件--plugins
调用插件对结果进行处理,比如:file_record
,html_report
。用户也可以自定义 RESULTS 类型插件