Skip to content
On this page

架构简析

为了使用的更加顺畅,有必要了解下框架的架构。整体而言,本框架主要包含四个部分,分别是目标收集、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_seebugpoc_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_recordhtml_report。用户也可以自定义 RESULTS 类型插件

Released under the GPLv2 License.