基于Pocsuite框架的XXXX Scan poc扫描器设计思路
Pocsuite框架介绍:
Pocsuite is an open-sourced remote vulnerability testing framework developed by the Knownsec Security Team.
Pocsuite一款开源的远程漏洞测试框架。
功能:
漏洞测试框架:
Pocsuite 采用 Python 编写。
Python 2.6+
oksec scan的扫描器的python环境是2.x的
支持验证与利用两种插件模式,你可以指定单个目标或者从文件导入多个目标,使用单个 PoC 或者 PoC 集合进行漏洞的验证或利用。
可以使用命令行模式进行调用,也支持类似 Metaspolit 的交互模式进行处理,除此之外,还包含了一些基本的如输出结果报告等功能。
cmd = 'python '+ pocsuite_path + 'pocsuite.py -r '+ modules_path + ' --file ' + AwvsVulnerableList_path + file_name + ' --threads '+ str(thread_num)
可以自动输出html报告。
PoC/Exp 开发包:
Pocsuite 也是一个 PoC/Exp 的 SDK,也就是开发包,我们封装了基础的 PoC 类,以及一些常用的方法,比如 Webshell 的相关方法,基于 Pocsuite 进行 PoC/Exp 的开发,你可以只要编写最核心的漏洞验证部分代码,而不用去关心整体的结果输出等其他一些处理。
基于 Pocsuite 编写的 PoC/Exp 可以直接被 Pocsuite 使用,现在有几百人基于 Pocsuite 编写 PoC/Exp。
可被集成模块:
Pocsuite 除了本身具有直接就是一个安全工具除外,也可以成为一个可被集成的漏洞测试模块。你还可以基于Pocsuite开发你自己的应用,我们在 Pocsuite 里封装了可以被其他程序 import 的 PoC 调用类,你可以基于 Pocsuite 进行二次开发,调用 Pocsuite 开发您自己的漏洞验证工具。
集成 ZoomEye 与 Seebug API:
Pocsuite 还集成了 Seebug 与 ZoomEye API,通过该功能.
你可以通过 ZoomEye API 批量获取指定条件的测试目标(通过 ZoomEye 的 Dork 进行搜索)
同时通过 Seebug API 读取指定组件或者类型的漏洞的 PoC 或者本地 PoC,进行自动化的批量测试。
使用参数:
基础帮助:
-h, --help 显示帮助信息
--version 显示当前程序版本号
目标设置:
目标设置:
-u URL, --url URL 目标 URL (如:"http://www.targetsite.com/")
-f URLFILE, --file URLFILE
加载一个文档中的所有 URL,一行一个
-r POCFILE 加载一个 PoC 或者一个目录下的所有 PoC(如: "_0001_cms_sql_inj.py" 或者 "modules/")
初步构想:
- module对poc进行分类:分成8类,八个文件夹。
- 为了更好地管理poc,必须进行分类。
模式设置:
--verify Verify 模式
--attack Attack 模式
每个poc类里面都有,verify()函数和attack()函数
请求设置:
请求设置:
--cookie COOKIE 自定义 HTTP 请求头中 Cookie 信息
--referer REFERER 自定义 HTTP 请求头中 Referer 信息
--user-agent AGENT 自定义 HTTP 请求头中 User-Agent 信息
--random-agent 使用随机 User-Agent
--proxy PROXY 使用代理来连接目标
--proxy-cred PROXYCRED
设置代理用户名和密码 (如 name:password)
--timeout TIMEOUT 设置超时时间(默认30秒)
--retry RETRY 设置超时重试的次数
--delay DELAY 设置超时重试之间的时间间隔
--headers HEADERS 设置额外的 HTTP 请求头
--host HOST 设置 HTTP 请求时的 HOST 字段
有点像防爬虫机制。
自定义header,或者使用代理。都是为了防止服务器封Ip。
参数设置:
--extra-params 用来自定义额外的参数, 传入类似字典的字符串"{'username': '***', 'password': '***'}", 调用 Pocsuite 来取它时会自动转化成字典格式.
其他设置:
--threads THREADS 最大线程数(默认为1)
--report REPORT 生成 HTML 格式报告(如:"./report.html")
--batch BATCH 所有参数都选择使用默认情况
--requires 检查 install_requires 是否都符合
--quite 安静模式, 不输出 Pocsuite 的日志
--require-freeze 在 Poc 注册后进行 install_requires 检查
目前只用了
--threads 2
定义多线程数为2
Zoomeye 和 Seebug:
--dork DORK ZoomEye Dork,用于在 ZoomEye 搜索目标
--max-page MAX_PAGE ZoomEye API 的请求翻页数(10 目标/页)
--search-type SEARCH_TYPE
ZoomEye API 搜索类型,web 或者 host
--vul-keyword VULKEYWORD
Seebug 搜索关键词,用于在 Seebug 搜索漏洞
调用zoomeye,指纹识别后的Url,指纹识别是相当于筛选了url,更有利于精准打击。
人工调用seebug,poc库:
- 我有一个最新的poc,然后人工判断这个poc是什么类型的,再在zoomeye里找到对应指纹的VulnerableUrl,提高了准确扫描的效率。
POC-T框架介绍:
POC-T框架简单介绍:
自动化+渗透测试+插件化+并发框架
- 自动化:
- 使用zoomeye、Google、shodan API
- 渗透测试:
- 带了有exp功能的插件
- 上传、爆破、getshell
- 插件化:
- 可以在scripts文件夹添加python文件,每个python相当于一个插件
- 在调用的时候按需调用
POC-T设计思路:
POC-T 批量验证要解决的三个关键点:
数据:数据怎么来?
处理:逻辑是什么?
- 调用poc,验证成功返回TRUE,失败返回False
并发:如何实现?
XXXX-POC-Scan扫描器:
版本1:poc_check()程序流程:
XXXXscanEngine.py
# 从XXXX扫描结果的csv文件中正则提取urls
crawl_urls = get_urls(savefolder)
# drop crawler_list into func:poc_validate()
#调用旧版poc
alter_info1 = poc_validate(XXXX匿了)
#validate other vulnerabilities manully
# 将poc扫描到的漏洞结果添加进XXXX的扫描结果
for v in range(len(alert_info)):
alert_info[v]+=alter_info1[v]
poc_check.py
# def poc_validate(,args,**list1):
def poc_validate(XXXXXXXXXXX #匿了):
p1 = p2 = 0
addictional_risk_list = [0,0,0,0]
if list1:
for url_t in list1: # 遍历url,对每个URL都进行扫描,发送探测请求包
if url_t:
print url_t
if jboss_poc(url_t):
bug_name = 'JavaUnserializeExploits_jboss'
bug_type_id = 3389
bug_level = 2
XXXXXXXXXXX #匿了
p1 = 1
if WebSphere_poc(url_t):
bug_name = 'JavaUnserializeExploits_WebSphere'
bug_type_id = 3390
bug_level = 2
XXXXXXXXXXX #匿了
p2 = 1
缺点:
- 无多线程机制
- 扫描时间长
- 对所有的url进行扫描相当于深度扫描
- 无过滤掉静态文件(
.js
,.css
结尾的文件)
- 无过滤掉静态文件(
程序流程:
版本2:poc_check_with_POC-T程序流程:
优点:
- 自带poc库
缺点:
- 每调用一个poc就要开启一个python系统进程
- 最少的进程数 = poc数量 = 约几十个。
- 为了减少io,不使用将url写入文件的方式的话,最终进程数可能是上千。频繁开启并关闭进程,注定这不是一个稳定的扫描器。
本来最开始是考虑选用pocsuite框架进行编写的,但是poc库太少了,然后要把自己收集到的poc库都要修改成pocsuite支持的格式,工作量似乎有点大。
后来找到POC-T框架,发现里面自带了poc库,不用自己手动修改poc库,而且也自带了多线程
本来基于POC-T框架的Poc扫描器的整体框架已经写好了,但是这样的话,这个poc扫描器就变成了多进程+多线程+插件化+并发+扫描器。
而我们需要一个单进程+多线程+插件化+并发+扫描器框架
后来想清楚才发现,我们的poc扫描与POC-T框架的出发点是不一样:
所以最后敲定,要把POC-T框架换成pocsuite框架,然后修改POC-T当中的一些有用poc的格式,然后拿来使用。
需求分析:
在列表:XXXX(匿了)中,找不到struts-s2-045等2017年的高危漏洞。
需要自己开发poc扫描器,储备一些2017年的poc库。
利用多个poc对同ip的多个vulnerableURL进行扫描探测。
要解决的三个关键点:
- 数据:数据怎么来?
- 处理:逻辑是什么?
- 调用poc,验证后,抓取pocsuite输出到命令行的信息
- 抓取红色处信息
- 并发:如何实现?
- 直接调用pocsuite框架时,设置多线程即可
版本3:poc_check_pocsuite():
最终的一个版本~
整体程序流程图:
匿了
vulnerable_loopholes_feature.xml说明:
将原来的一级xml文件改为2级xml文件