【技术分享】渗透测试:如何开展前期侦察以及收集敏感信息

http://p4.qhimg.com/t01f628669abfe1d560.png

作者:興趣使然的小胃

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、简介

在攻击活动中,对目标的侦察扮演着非常重要的角色。目标侦察并不单单意味着找到隶属于某个公司的子域名,同样也意味着找出该公司的组织架构以及公司所掌握的资源。本文中,我们会结合多种不同的工具及资源,向大家介绍几种关于如何开展目标侦察的方法,帮助我们挖掘目标的子域名、内部资源、运行模式、秘密或私有密钥、API接口以及文件目录结构。恰到好处的目标侦察可以增加我们的攻击范围,给予我们更大的攻击空间,进而找出更多安全漏洞。


二、暴力破解子域名

传统意义上,在暴力破解子域名方面,大多数黑客会使用诸如Sublist3rknockpy或者enumall之类的工具,配合字典来暴破目标域名。这种方法适用于大多数应用场景,然而,我认为我们可以适当改造这种方法,以发挥其全部潜能。最初的暴破过程结束后,一旦我们确定了公司的子域名信息,那么接下来我们应该递归暴破目标公司所使用的具体环境。比如,如果某个公司具有“dashboard.dev.hackme.tld”这个子域名,那么我们应该根据这个信息,继续查找隐藏在“dev”环境之后的更多子域名。通过这种方式,我们有可能绕过目标实际生产环境中的限制,获取目标其他属性信息。

如果目标公司的内部资产隐藏于企业或内部子域名后(如tools.corp.hackme.tld或tools.internal.hackme.tld),我们也可以通过这种方法来枚举公司的内部资产。对corp/internal.hacketwo.com进行暴破后,我们可以枚举出更多属性信息,以扩展我们的攻击面。


三、巧用Github

我们可以使用Github来收集目标基础设施的相关信息。首先,我们可以在Github中搜索目标公司的名字或网站(如hackme.tld),检查有哪些文件或文档被推送到Github中。我们可以利用前面的搜索结果进一步缩小搜索范围,查找满足特定条件的信息。比如,如果我们在搜索“hackme.tld”时发现该目标使用了“us.hackme.tld”这个域名,用于内部应用(如JIRA或公司VPN),那么,在暴破“us.hackme.tld”子域名的同时,下一阶段我们的搜索重点可以转到“us.hackme.tld”。

Github同时还是寻找凭证及私有API密钥的理想之地。在搜索不同密钥的过程中,最难的一点是我们必须具备创新精神。抛砖引玉,我在Github上通常会搜索如下关键词:

“Hackme.tld” API_key
“Hackme.tld” secret_key
“Hackme.tld” aws_key
“Hackme.tld” Password 
“Hackme.tld” FTP
“Hackme.tld” login 
“Hackme.tld” github_token

我们也可以在Github上搜索与子域名有关的更多信息及开放接口。我曾在Github上通过搜索“api.hackme.tld”,找到过目标企业过去遗留的API接口,而这个接口信息可以追溯到几年之前。我们可以借助大量工具,自动化完成这项工作,充分节省搜索时间。但通常情况下,我个人喜欢手动完成这个过程,因为即使直接搜索那些关键词所得到的结果没有价值,我们通过肉眼检查可能包含上述关键词的文件,也可能会发现其他一些“有趣”的信息。

在Github上挖掘情报听起来像是一个非常好的主意,但一不小心我们还是会犯一些错误,比如:

1、我们可能会被某个第三方app误导,最后得出的结果偏离预期目标,或者拿到的信息与目标应用无关。

2、我们拿到的密钥可能过于陈旧,不再可用,或者已不属于目标公司。当然这些密钥也有可能是假的密钥,被人故意放到Github上的。

找到信息后再次检查是必不可少的一个过程,以确保所得信息与预期目标相符。


四、巧用亚马逊云服务(AWS)

AWS(Amazon Web Service,亚马逊云服务)拥有海量资源,已经在为数以千计不同行业的公司提供服务。有些公司使用AWS s3存储桶(bucket)来托管公司内容,其他公司则用来部署及托管公司应用。与其他资源一样,AWS也可能被错误配置或被犯罪分子滥用。比如,我们经常会发现某些公司错误配置了s3存储桶,导致公司之外的用户能够读写属于该公司存储桶上的文件。

我们可以结合几种不同的方法来发现这些突破口:

1、在Google上搜索:site:s3.amazonaws.com + hackme.tld

2、在Github上搜索:“hackme.tld” + “s3”

3、我们可以暴破AWS,查找特定的s3存储桶,也可以通过自动化操作加速这一过程。

Lazys3正是基于第3种方法构建的一个工具。该工具使用了一个包含常见的s3存储桶列表的字典,通过不同的模式及排列组合,抓取目标服务器的响应头部,如果响应代码不是404错误代码,那么就会返回相应结果。比如,如果我们正在搜索hackme.tld名下的s3存储桶,该工具就会逐一测试字典中的每个条目,组合不同模式进行查找(比如:attachments-dev.hackme.tld、attachments.dev.hackme.tld、attachmentsdev.hackme.tld等),如果响应代码为200或403,就返回对应的信息。

 http://p8.qhimg.com/t01b3c1b1b00c63527a.png

如上图所示,我们使用lazys3查找dev环境下名为“assets”的存储桶。当前版本仅支持输出已存在的存储桶。

虽然暴破亚马逊云服务、查找其上托管的不同应用有助于拓宽我们的攻击面,但我们有可能会犯如下错误:

1、虽然s3存储桶可能暗示它属于某个公司,但实际上该公司并没有拥有或管理这个存储桶。

2、由于各种原因(比如第三方应用的存在),我们所得结果可能与预期效果不一致。我们可能拥有s3存储桶的读取权限,但存储桶上的文件并不包含敏感信息。

此外,我们要时刻提醒自己检查所得结果,在反馈问题的时候,如果这些问题属于上述类别问题,那么问题可能不会得到承认。


五、资产识别

我们还可以使用诸如Censys、Shodan或者archive.org等资产识别工具,用以补充前文提到的方法,进一步扩展我们的攻击面。

Censys.io

Censys在扫描IP地址、收集不同端口的指纹信息方面卓有成效。我们可以借助Censys,通过分析目标属性有关的SSL证书,找出目标的内部工具及资产信息。我们可以组合各种查询方法及语法来使用censys,但就我个人而言,我更喜欢根据目标的SSL证书梳理目标相关信息。比如,我们可以使用“443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names:Yahoo.com”这个查询语句,搜索指向Yahoo.com的任何子域名或者属性信息。

与其他工具类似,我们也可以进一步优化Censys上的搜索结果。创造力始终是目标侦察上的关键因素。我曾经通过随机组合查询语句(如“hackme.tld” + internal,或其他关键词),找到之前搜索时未发现的独特属性,这种情况已经出现过很多次。

 http://p6.qhimg.com/t01bd35fbcae518c02d.png

Shodan.io

Shodan与censys类似,但不同的是Shodan可以搜索每个IP地址,查找该IP地址开放的任何端口,同时生成大量数据,允许用户指定地理位置、拥有该IP地址的组织、开放端口、产品服务(apache、tomcat、nginx等)、主机名及其他元素来过滤查询结果。

比如,如果我们想查找hackme.tld是否在默认端口上开放任何RabbitMQ服务,我们可以搜索“hostname:hackme.tld org:hackme ports:15672”。如果我们想查找特定产品(比如tomcat),我们也可以将查询语句中的端口关键词改为“product”关键词,此时查询语句变为:“hostname:hackme.tld org:hackme product:tomcat”。

Shodan创始人John Matherly写过名为“Shodan完整指南”的一篇文章,我们可以阅读这篇文章了解关于Shodan的更多信息。

Archive.org

Archive.org是另一个非常有用的参考来源,我们可以在上面找到网站之前的robots.txt文件,其中可能包含陈旧端点及其他敏感信息,也可以挖掘网站之前的版本信息,以分析站点源、收集更多信息,也可以找到被管理员遗忘的老的子域名及研发环境。只要访问Archive.org,搜索目标站点,选择过去的某个日期(可能是过去的一年或两年的某个日期),然后随便点击目标网站即可。

有些工具已经能够自动化完成这一工作了。我们可以使用waybackurl.py以及waybackrobots.txt这两个工具,找出我们想要的所有信息,静静等待输出结果即可。

我们也可以在Archive.org上找到网站之前的JavaScript文件,这些文件现在有可能还能访问。通过这种办法,我们可以找到与目标有关的已经过时的功能及端点。

搜集到一堆过去的以及新的JavaScript文件后,我们可以使用JSParser这个工具,从这些JavaScript文件中挖掘所有的端点信息。 

http://p0.qhimg.com/t01fe8b21dff03a850b.png


六、总结

侦察过程不单单是简单地运行一堆工具、查找目标属性信息而已,更多情况下,侦察过程需要我们首先对目标有所了解,能够灵活利用这些工具,通过各种方式组合使用这些工具,同时发挥我们自己的创造力,这样才能找到更多结果。本文并没有覆盖侦察过程中涉及的所有可能的方法,然而,结合本文提到的这些方法,在运用工具的过程中善于思考,引入更有创意的其他方法总是一个不错的开头。

(完)