怎样自己构建一个小型的Zoomeye----从技术细节探讨到实现



转载请注明出处:http://blog.csdn.net/u011721501?viewmode=list


0、概述

Zoomeye是个网络空间的搜索引擎,它不同于传统意义上的搜索引擎,而是一种能够搜索网络组件和网络设备的搜索引擎。

这样的以各大组件指纹作为识别基础的数据平台,很多其它的是为了使得安全研究人员更好地评估漏洞的影响范围与当中隐含的数据模式。

1、架构分析

这是从网上搜索到的一张Zoomeye的后端架构图,主要分为调度框架、ES存储、UI呈现等模块。

对于一次漏洞的评估。启动调度框架分配域名或者IP列表给扫描节点,节点完毕任务后运行回调,做出自己主动化的效果事实上也不是非常难,从网上找个开源消息队列框架就能够完毕了。


事实上我觉得zoomeye背后必然有一个攻击框架的。原因非常easy,这个自己主动攻击的存在会带来非常多利润。

2、搜索项细节分析

如上图是一个discuz组件的搜索项。从这个item中我们能够看得到,主要包含下面数据元:

1)域名 or  IP  or title

2)组件信息(Win32OpenSSL

3)国家、城市信息

4)信息更新时间

5Http Response header

以上信息的採集都不是非常困难。首先这个域名和IP自然是不困难的。至于这个title,仅仅须要一个正则就抓出来了。

组件信息事实上就是Http Response中的server字段信息。

国家、城市可能非常多人非常疑惑是怎么获取的,这个就是使用了GeoIP数据库,效果非常不错。

剩下的就不再说了,一次扫描后(由request得到response)都能够获取到。

2、关于指纹识别

关于Web指纹识别,眼下没有什么好的文章。FB中有一篇《浅谈Web指纹识别》写得很好。我自己也写过一篇,相同是借鉴了FB上的那篇文章的思路,详细文章链接:http://blog.csdn.net/u011721501/article/details/39136797上面讲了怎样实现一个DedeCMS的指纹识别程序。

这里我再抛砖下解说下怎样识别discuz

 

方法

说明

Meta数据元识别

使用爬虫技术抓取html页面信息

Intext识别

使用模板自身的特征

Robots.txt识别

使用robots协议文件robots.txt识别

 

(1)Meta数据元识别

Meta是指站点html中包括的名为“meta”的标签,当中包括一些版权的信息。可是因为位于head标签中,所以不会影响页面布局。在二次开发中假设没有被去除掉。就能够作为识别指纹之中的一个。

2intext识别

类似于Meta识别,在网页html文本中,可能存在一些关于版权信息的字符串。如“Powered by xxxx”,通过这些字符串就能够识别对应的组件。

3robots文件识别

Robots协议也称为爬虫协议,是网络爬虫排除标准的简称。它告诉搜索引擎哪些页面能够抓取,哪些页面不能抓取。

例如以下图是Discuzrobots文件,能够看到,通过识别里面的“discuz”字样就能够推断是否是discuz。而且还能够进行粗略版本号识别。

上面就是一种识别方法,使用Python。结合正则。实现这个很easy的。

 

每一个你在Zoomeye进行搜索的keyword,比方搜索discuz,就会噼里啪啦一大堆数据,这些数据的本质就是他们内部积累数据的同一时候。使用Web指纹识别程序跑出来的。只是这一块须要人力物力才干做得非常好。

毕竟一个识别程序仅仅能相应一个组件,眼下这一块Zoomeye还有待提升。

 

2、关于数据的来源

Zoomeye背后应该有非常强大的硬件资源(带宽、集群)供其扫描拉数据。屌丝们实现一个小型的zoomeye仅仅能用现有的搜索引擎或者自己写爬虫抓来域名跑。

我们这学校的条件,达不到说你从1.1.1.1255.255.255.255都跑着反查一遍,基本不现实。所以,仅仅为了研究为目的,我们基本的来源就是搜索引擎、小规模的反查和扫描IP。我仅仅能说非常得屌丝。

就是这样的方法来拉数据,ecshop也还是逮住不少:


2、关于攻击框架

攻击框架是Zoomeye后面必然有的东西。这个结合创宇中安全团队积累的exp,真的会非常强大,我们做这个小型Zoomeye自然也配上一个。详细怎么实现的思路我已经写过一篇文章来阐述了:http://blog.csdn.net/u011721501/article/details/41908003 

这里无非就是攻击模式规定的规则了。我是做了例如以下的定义:

2、成果展示

说了乱七八糟一大堆。基本上都是说明我们实现这款小型zoomeye的大体思路,以下就是我们的小小的成果。因为前段童鞋不给力。所以请勿吐槽UI

(1)多port搜索

后端我们相同选择elasticsearch来构建。使用DSL语法与简单的语法解析轻松能够构建出多port搜索功能:

(1)攻击框架的演示

想必最最神奇的就是这个攻击框架了。由于至今zoomeye上也没有相关信息。倒是Fofa上有一个,只是是基于命令行的。我们这里更进一步,做成了基于WebUI的,測试例如以下:

1指定exp名称攻击:

全域名扫描(针对现有的域名所有进行攻击):

python safecatcli.py -m exp_name -n [exploit_file_name] -o all

-m exp_name -n goods_attr_exploit -o all

单个目标扫描(对输入的url或者ip地址加载攻击脚本进行攻击): python safecatcli.py -m exp_name -n [exploit_file_name] -o single -u [url or IP addr] 

-m exp_name -n goods_attr_exploit -o single -u http://bbs.paopaoyu.cn/

IP段扫描(对一个IP段的主机进行攻击): python safecatcli.py -m exp_name -n [exploit_file_name] -o range -start [your-start-ip-addr] -end [your-end-ip-addr]

-m exp_name -n goods_attr_exploit -o range -s 182.18.17.82 -e 182.18.17.82

 

2)指定关键词进行扫描:

you_class_name填你要攻击的flag,比方项目中整合了discuz,ftp,ecshop等。这里要填信息

指定查询语句攻击(对提交的查询语句进行解析,从es中找出符合条件的域名列表,然后加载一个模块的所有攻击脚本进行攻击)

python safecatcli.py -m flag -c [your class name] -q "[your query string]"

比方:攻击台湾的discuz主机

python safecatcli.py -c discuz -q "discuz country:Taiwan"

-m flag -c ecshop -q "ecshop"

指定一个域名攻击(对提交的一个domain进行攻击,从模块中加载所有脚本进行攻击):

python safecatcli.py -c discuz -u [domain]

-m flag -c ecshop -u http://www.1688gys.com

 

7、总结

Zoomeye这样的产品虽然非常多人在做,比方Fofa,可是能做到Zoomeye这样的产品级别的真的不算多。由于这里面的技术细节有多么坑真的非常难想象。做了一学期,我们这东西也仅仅能说能够看得下去了,离得真正的Zoomeye还是不少差距。无论怎么说,我们也仅是认为Zoomeye这样的东西做起来非常有意思。也仅仅是做个这类技术的研究。欢迎讨论。


转载请注明出处:http://blog.csdn.net/u011721501?

viewmode=list


因为源码比較散乱,整理过后会share,大牛勿喷。

设计部分文档share:链接:http://pan.baidu.com/s/1i3tbohf password:8sko





posted on 2016-01-09 12:01  gcczhongduan  阅读(889)  评论(1编辑  收藏  举报