pokemen taro Posted on Jun 23 2022 pokemon ## pokemen 是做什么的 集成渗透打点阶段各种实用的工具,自动化扫描 ## 为什么诞生 事实上,现在也有越来越多的集成扫描器,很多都实现了`一键日站`的能力,即提供一个站点,就能帮你资产收集,漏洞扫描,但是安全扫描能力是一个特殊程序,对风险的扫描只存在“发现漏洞”和“未发现漏洞”两个状态,没有中间态,就意味着安全扫描程序最重要的是长板,而不是均衡,所以每个扫描阶段都有一些独立好用的工具,比如爆破子域的 oneforall , 漏洞扫描的 Xray.... 这些独立的工具积累了很多经验,是非常好用的轮子。 所以我们一个又一个的clone下各种武器,形成自己的武器库:先用xx信息收集,再把收集到的资产用xxx扫描... 我们为什么不搭建一个框架来包裹住所有的武器?自动组装插件,保留配置,按照不同的组合方式扫描。 pokemen应运而生。 ## pokemen 功能 提出扫描 `workflow` ,用不同的工具插件以及不同的扫描组合方式组装,可以创建一个 workflow ,输入一个 workflow 模板,其中预留格式化参数,在`input`阶段,将workflow的输入作为格式化参数的输入,后面阶段分别将各个数据代入数据进行格式化参数,获取到 workflow 的实际执行参数。再对 workflow 的参数进行拆分解析,一个阶段的任务创建一个task,进行扫描。 ## pokemen 组成 ### server 服务端,负责存储资产以及漏洞数据,配置插件的配置文件,调度扫描任务。 ### worker 实际的工作端,我称之为 pokeball ,每个插件都是一个“精灵球”,由我们的 woker 负责“抛出”精灵球,执行具体的扫描任务。格式化每个插件的输出,是上报资产信息,还是上报漏洞信息,还是二者都会上报。 ## quick start 首先,新建一个 workflow 模板 ```json [ { "input": { "OneForAll": { "api_py": "IyDmqKHl..(配置文件api.py的base64) ...g==", "command_args": "--alive true --port large --%s" } } }, { "website": { "Rad": { "target": "%s" }, "Xray": { } } }, { "host": { "Nmap": { "target": "%s" } } } ] ``` 创建一个 workflow 关联这个目标,并提供输入,如`taropowder.cn` 接下来,会向任务队列增加一个任务,等待空闲worker消费。 worker 获取到任务后执行每个插件的 run 函数,并把插件的参数代入,以 OneForAll为例,将配置py写入本地并挂载,并代入command参数,进行实际的扫描。(当前版本会阻塞住,直到执行完)执行后会将结果解析上报。 等worker上这个task 的所有插件运行完毕,就会向服务端上报完成此任务。此时,服务端检查是否还有下一个 task ,以上面的配置为例,还有对website的配置,那么就会对此 workflow扫出的每个 website 创建一个 task ,格式化参数后,推入任务队列,直到所有任务完成,并且workflow没有下一个阶段,此workflow执行完毕。 ## 问题 - 为什点xray的漏洞没有标记是来源于哪个任务 目前采用的 rad + xray 组合的方式, xray 使用被动扫描,所以无法判断此被动扫描的 xray 是否扫描完毕,且漏洞量级一般不会太高,所以直接全量上报 pokemon 1.0 安卓10导入多个burp证书