Skip to content

01 需求与设计

cdxy edited this page Feb 14, 2018 · 9 revisions

需求

安全技术人员经常遇到以下需求:

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

多次编码实现这些需求之后总结出它们的共性——数据的并发处理

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

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

设计

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

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

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

这个图片清晰的描述了程序的设计思路:

设计思路图 注:图中异步并发的参数已改为-eG

使用

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

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

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

漏洞验证

示例: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条

结果:

solr未授权访问实践

爬虫

示例: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

SSRF探测内网

示例:利用 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 : 从外部文件加载目标

批量IP反查域名

示例:利用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

PoC支持

针对漏洞验证,本项目中提供其它两项福利(详见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开发水平良莠不齐,大部分容错性很差,真正集成到扫描器中需要二次开发。

  2. 目前Bugscan收集了大量PoC,但是其编写者设置level的机制导致大部分PoC无法被获取。相比之下在Seebug付出一点时间就可以拿到自己想要的。

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