九零登录

[【通过】] POC-T渗透测试并发框架设计与实现

[复制链接]
发表于 2016-8-29 23:30:45 | 显示全部楼层 |阅读模式

需求
---
请考虑:作为安全技术人员,你将如何解决以下需求?

1. 新漏洞爆发,想要批量扫描公网主机并评估该漏洞影响。
2. 收集论坛内所有成员的公开信息。
3. 利用SSRF漏洞扫描内网主机及端口信息。
4. 对某C段IP反查域名

一种思路:

1. 利用`Shodan/ZoomEye/Google`采集目标,然后使用漏洞PoC进行验证(`Seebug/Bugscan/Tangscan`)。
2. 爬虫。
3. 将该SSRF漏洞的PoC修改为可接受参数的并发脚本。
4. 使用现有C段采集工具或自编脚本。

当我多次编码实现这些需求之后,总结出它们的共性和本质——**数据的并发处理**

解决这个问题的三个关键点:

* **数据**:数据怎么来?
* **处理**:逻辑是什么?
* **并发**:如何实现?

设计
---

我尝试设计一个框架统一解决以上需求,它的实现逻辑很简单:

1. 准备一个并发框架。
2. 将数据扔到框架中。
3. 将处理数据的逻辑扔到框架中。
4. 运行,获取处理结果。

因为数据的获取方式不同,处理数据的逻辑也不同,从而能满足漏洞验证、爬虫、爆破、扫描等不同需求。

程序的设计思路:

http://img.blog.csdn.net/20160827205936668

使用
---
接下来用实例说明该框架如何解决一开始我们提出的需求。

使用本框架,用户只需做两件事:

1. 编写一个函数
2. 执行一条命令

漏洞验证
**示例:Apache Solr 未授权访问漏洞批量验证**

思路:使用Shodan搜索引擎采集的IP作为数据输入,编写漏洞验证脚本作为数据的处理逻辑。

函数:
[Python] 纯文本查看 复制代码
# 判断给定的ip是否存在Solr未授权访问漏洞
def poc(ip):
    g = requests.get('http://' + ip)
    if g.status_code is 200 and 'Solr Admin' in g.content and 'Dashboard' in g.content:
        return True # 漏洞存在
    return False # 漏洞不存在


命令:
`python POC-T.py -T -m solr-unauth --api --query "solr country:cn" --limit 10`

* `-T` 使用多线程
* `-m solr-unauth` 加载名为 solr-unauth 的脚本
* `--api` 指定数据获取方式:搜索引擎接口
* `--query "solr country:cn"` 指定 Shodan 搜索关键字
* `--limit 10` 指定获取IP的数量:10条

结果:

http://img.blog.csdn.net/20160827210225502

爬虫
**示例:B站用户签名档爬虫**

思路:将用户的ID作为数据输入,编写脚本下载该ID对应的用户签名作为数据的处理逻辑。
脚本:https://github.com/Xyntax/POC-T/blob/master/script/spider-example.py
命令:`python POC-T.py -C -m spider-example -i 1-200000 -t 50`

* `-C` : 使用单线程异步(协程)
* `-i 1-200000` : 生成从1到200000的连续数字作为用户ID
* `-t 50` : 设置并发数量为50

SSRF探测内网
**示例:利用 WebLogic SSRF 漏洞扫描内网**

思路:从外部文件中读取IP地址作为数据输入,编写脚本扫描指定IP的端口开放情况作为数据处理逻辑。
脚本:[https://github.com/Xyntax/POC-T/blob/master/script/weblogic-ssrf-netmap.py]
命令:`python POC-T.py -T -m weblogic-ssrf -f iplist.txt`

* `-f iplist.txt` : 从外部文件加载目标

批量IP反查域名

**示例:利用 WebLogic SSRF 漏洞扫描内网**

思路:生成IP地址作为数据输入,编写脚本调用Bing搜索引擎接口作为数据处理逻辑。
脚本:[https://github.com/Xyntax/POC-T/blob/master/script/bingc.py]
命令:`python POC-T.py -T -m bingc -n 139.129.132.0/24`

* `-n 139.129.132.0/24` : 根据指定地址段生成IP

福利
---
针对漏洞验证,本项目中提供其它两项福利(详见Github项目介绍):

* 公开PoC库:绝大部分为本人手工编写,均保证可用性、优化容错性,长期维护并更新。
* PoC编写插件:根据以往的PoC编写经验,集成了实用的PoC插件,如:随机串生成,MD5生成,获取真实IP,Cloudeye接口等。

其他
---
与Pocsuite的差异

1. Seebug+Pocsuite+ZoomEye 一条龙服务确实很好用。Pocsuite的所有PoC需要按模板要求使用Pocsuite指定的函数,这样的优点在于可以在HTTP请求层面直接做控
制,从而支持“全局代理”,“全局随机UA”等功能,同时保证了脚本的稳定性与规范性,对于不懂验证逻辑的客户或运维人员,直接运行脚本即可。
2. 我在设计POC-T的初衷就是给脚本最大的自由度,可以引入第三方库,不需要任何模板和继承。这样既能够扩展其功能,又能保证效率的最大化,不用每次写脚本都查文档格式,一个脚本一行命令,三五分钟即可完成任务。缺点就是脚本的稳定性需要自己的编码能力和经验来保证。此外,POC-T提供更多的输入输出方式和第三方接口支持。

PoC相关

以下为个人见解,不代表论坛观点。

1. 我曾认为将大量PoC整合到一起,与主动扫描互补,将成为更全面的“扫描器”。
然而现状是PoC开发水平良莠不齐,为了适应各框架的要求束手束脚(这也是我设计此框架的主要原因之一),大部分PoC容错性很差,真正集成到扫描器中需要二次开发。

2. 目前Bugscan收集了大量PoC,但是其编写者设置level的机制导致大部分PoC无法被获取,新的扫描平台规则更是雪上加霜,坚持Bugscan的同学们难道是看好其任务调度的框架?给已公开的垃圾漏洞写PoC,就和那些使用exp大量刷洞一样,为了rank和积分浪费时间,对技术进步效果甚微,勿忘初心。
相比之下在Seebug中提交一个Poc可以换取三个PoC,付出一点时间就可以拿到自己想要的,更加合理一点。

3. 练习PoC编写可以多关注新鲜的exp资源,如:[http://www.exploitalert.com/]

4. 项目中的PoC会一直保持公开和非盈利性,我会长期将自己和小伙伴写的PoC/Exp整合进去,贡献者将加入项目的ThankList,同时其PoC也会对外公开。有同样爱好的朋友可直接邮件联系我。

项目概况
1. 这个项目基本代表了我学习Python的历程,将长期维护更新。
2. 2.0版本开发中,将会部分重构代码,简化命令参数、增加稳定性并支持Google Hacking.
3. 项目发布以来收到一些朋友的反馈和建议,感谢你们,愿共同进步。

地址
----
[https://github.com/Xyntax/POC-T]

评分

参与人数 2酒票 +6 收起 理由
管理05 + 5 欢迎加入90!
柠檬草 + 1 精品文章

查看全部评分

发表于 2016-8-30 08:46:23 | 显示全部楼层
楼主的POC-T之前就关注过,github也关注了。确实是牛逼。一起开发。
发表于 2016-8-30 09:13:24 | 显示全部楼层
关注着大神的github,POC-T确实牛逼,自己开发脚本起来都很比较方便。
发表于 2016-8-30 11:03:34 | 显示全部楼层
这个很棒。
我原来也写过类似的,只是没有并发,使用方法是模仿metasploit的,当时的需求也只是想做成poc的管理框架。
但框架如果真的要做大,或者说创造出实际性的效益,其实是很难的。先不说框架的优缺点,单凭是计算资源就没办法和大公司相比,其次是插件的丰富性和稳定性......
一般这种框架对于个人来说就是当项目工程练手学习的,并根据自身需求去完善它,能长期坚持下去的很少。
作者框架的主要优势在于并发以及插件的面广,不拘束,很棒的,希望能长期维护下去。
发表于 2016-8-30 14:12:59 | 显示全部楼层
支持楼主,github一直都在关注。
发表于 2016-8-31 09:41:10 | 显示全部楼层
支持楼主,github一直都在关注。
发表于 2016-8-31 10:47:58 | 显示全部楼层
poc扫描这个东西一出来,就觉得很酷。现在已经有这么多人在写了啊,还好我机智的写了个,留着做毕设用
发表于 2016-9-4 21:43:48 | 显示全部楼层
一直有关注楼主的blog

九零

GMT+8, 2026-10-22 12:54

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表