基于Pocsuite框架的XXXX Scan poc扫描器设计思路



Pocsuite框架介绍:

Pocsuite is an open-sourced remote vulnerability testing framework developed by the Knownsec Security Team.

http://pocsuite.org

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文件

results matching ""

    No results matching ""