-
Notifications
You must be signed in to change notification settings - Fork 751
01 需求与设计
安全技术人员经常遇到以下需求:
- 新漏洞爆发,想要批量扫描公网主机并评估该漏洞影响。
- 收集论坛内所有成员的公开信息。
- 利用SSRF漏洞扫描内网主机及端口信息。
- 对某C段IP反查域名
多次编码实现这些需求之后总结出它们的共性——数据的并发处理
解决这个问题的三个关键点:
- 数据:数据怎么来?
- 处理:逻辑是什么?
- 并发:如何实现?
我尝试设计一个框架统一解决以上需求,它的实现逻辑很简单:
- 准备一个并发框架。
- 将数据扔到框架中。
- 将处理数据的逻辑扔到框架中。
- 运行,获取处理结果。
因为数据的获取方式不同,处理数据的逻辑也不同,从而能满足漏洞验证、爬虫、爆破、扫描等不同需求。
这个图片清晰的描述了程序的设计思路:
注:图中异步并发的参数已改为-eG
接下来用实例说明该框架如何解决一开始我们提出的需求。
使用本框架,用户只需做两件事:
- 编写一个函数
- 执行一条命令
示例:Apache Solr 未授权访问漏洞批量验证
思路:使用Shodan搜索引擎采集的IP作为数据输入,编写漏洞验证脚本作为数据的处理逻辑。
函数:
# 判断给定的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 -eT -s solr-unauth -aS "solr country:cn" --limit 10
-
-eT
使用多线程 -
-s solr-unauth
加载名为 solr-unauth 的脚本 -
-aS "solr country:cn"
指定 Shodan 搜索关键字 -
--limit 10
指定获取IP的数量:10条
结果:
示例:B站用户签名档爬虫
思路:将用户的ID作为数据输入,编写脚本下载该ID对应的用户签名作为数据的处理逻辑。
脚本:https://github.com/Xyntax/POC-T/blob/2.0/script/spider-example.py
命令:python POC-T.py -eG -s spider-example -iA 1-200000 -t 50
-
-eG
: 使用单线程异步(协程) -
-iA 1-200000
: 生成从1到200000的连续数字作为用户ID -
-t 50
: 设置并发数量为50
示例:利用 WebLogic SSRF 漏洞扫描内网
思路:从外部文件中读取IP地址作为数据输入,编写脚本扫描指定IP的端口开放情况作为数据处理逻辑。
脚本:https://github.com/Xyntax/POC-T/blob/2.0/script/weblogic-ssrf-netmap.py
命令:python POC-T.py -s weblogic-ssrf -iF iplist.txt
-
-iF iplist.txt
: 从外部文件加载目标
示例:利用Bing搜索引擎接口查询C段域名
思路:生成IP地址作为数据输入,编写脚本调用Bing搜索引擎接口作为数据处理逻辑。
脚本:https://github.com/Xyntax/POC-T/blob/2.0/script/bingc.py
命令:python POC-T.py -s bingc -iN 139.129.132.0/24
-
-iN 139.129.132.0/24
: 根据指定地址段生成IP
针对漏洞验证,本项目中提供其它两项福利(详见Github项目介绍):
- 公开PoC库:绝大部分为本人手工编写,均保证可用性、优化容错性,长期维护并更新。
- PoC编写插件:根据以往的PoC编写经验,集成了实用的PoC插件,如:随机串生成,MD5生成,获取真实IP,Cloudeye接口等。
- Seebug+Pocsuite+ZoomEye 一条龙服务确实很好用。Pocsuite的所有PoC需要按模板要求使用Pocsuite指定的函数,这样的优点在于可以在HTTP请求层面直接做控制,从而支持“全局代理”,“全局随机UA”等功能,同时保证了脚本的稳定性与规范性,对于不懂验证逻辑的客户或运维人员,直接运行脚本即可。
- 我在设计POC-T的初衷就是给脚本最大的自由度,可以引入第三方库,不需要任何模板和继承。这样既能够扩展其功能,又能保证效率的最大化,不用每次写脚本都查文档格式,一个脚本一行命令,三五分钟即可完成任务。缺点就是脚本的稳定性需要自己的编码能力和经验来保证。此外,POC-T提供更多的输入输出方式和第三方接口支持。
-
曾经认为将大量PoC整合到一起即是最强大的“扫描器”。 然而现状是PoC开发水平良莠不齐,大部分容错性很差,真正集成到扫描器中需要二次开发。
-
目前Bugscan收集了大量PoC,但是其编写者设置level的机制导致大部分PoC无法被获取。相比之下在Seebug付出一点时间就可以拿到自己想要的。
-
练习PoC编写可以多关注新鲜的exp资源,如:http://www.exploitalert.com/