渗透的人应该都清楚,给一个目标站点做测试,第一步就是信息收集,通过各种渠道和手段尽可能收集到多的关于这个站点的信息,帮助我们更多的去找到渗透点。而信息收集的方式有很多,大致有搜索引擎、域名注册网站、shodan、github信息收集工具、网站公告等等,甚至还有社工的方式。网上关于信息收集也有很多相关的文章介绍,其实方式方法都大同小异。今天我主要介绍一下我在做信息收集的时候用到的一些工具和自己写的一些脚本,帮助我在渗透过程中更加方便的做好这一步。

拿到一个目标站点,首先肯定是利用搜索引擎,去搜索跟站点相关的内容。首当其冲的当然是谷歌,功能强大,各种信息收集的命令,方便准确,但国内访问受限,我这里总结了一些利用谷歌去做站点信息收集时常用的场景和命令。

除了Google之外,百度和微软的bing都可以作为信息收集的好帮手,可以与Google作为互补,有时候通过这两款搜索引擎收集信息时也能有意想不到的收获,但对于信息收集命令的支持就没有Google这么强大了。

信息收集另一种常用的方式就是通过一级域名去收集该域名下的子域名,通过站长之家的whois、域名备案查询、IP/域名查询工具就能搜索到一些相关域名和IP,针对这些方式我就不做详细介绍了,今天我介绍一下我常用的一款子域名探测工具—aquatone,下载地址:https://github.com/michenriksen/aquatone

这款工具包含三个命令:

aquatone-discover:使用被动收集或字典爆破的方式去收集子域名;

aquatone-scan:完成子域名扫描后,可扫描域名开放端口、HTTP header、HTML body、截图等信息生成报告;

aquatone-gather:对扫描结果中的IP进行访问请求和网页截图,搜集信息;

这三个命令使用起来也非常方便,aquatone-discover跟上参数 -d 或–domain加上需要搜索的一级域名就可以了,这里有一点需要注意,在检索子域名的时候,会去shodan、censys、virustotal进行检索,需要在这些站点注册,并将各站点的key和secret配置在aquatone上。

Aquatone-discover探测子域名花费的时间会稍微有点长,检索完成之后会在目录下生成一个以一级域名命名的目录,检索的结果会存储在该目录下的hosts.txt和hosts.json文件中,内容包括发现的子域名及其对应IP:

子域名探测完成之后,就可以使用利用aquatone-scan探测域名开放的端口等内容,使用也很简单aquatone-scan–d/–domain 带上搜索的子域名,这时工具会自动去找到该子域名搜索结果的文件hosts.json,对检索到的域名进行探测。

在前面提到,我们查用搜索引擎去收集信息,但是如果通过一级域名搜索时,搜索到的结果会比较多,人工进行过滤的方式会耗费时间,这是我们可以利用上面检索到的子域名作进一步搜索引擎信息收集,缩小了结果范围,还可以利用工具进一步对搜索结果进行过滤,这里我以bing搜索引擎为例。

将需要搜索的站点做为参数传入,解析搜索结果页面,获取搜索到的域名URL,搜索结果比较多时还需要遍历搜索结果获取所有的URL:

运行后的结果大致如下:

这里可以发现有很多重复的URL,可以在检索完成之后做一次去重,有很多去重的方式,可以写入文件然后遍历去重,也可以写入redis中然后遍历去重,代价更大一点的方式是,在检索的过程中,存入list中,每次检索遍历list中的内容,如果已经存在则不写入,大家可以自己去实现。

信息收集的方式有很多,主要在于如何更有效的去收集信息,如何正确利用搜集到的信息,更多的收集到有效的信息能够帮助在站点渗透过程中有更多的突破点,发现站点中更多隐藏的问题。

*本文作者:yuegui_2004,转自FreeBuf