渗透测试总是需要从广泛的信息收集阶段开始。 本文讨论了如何使用Internet上的开源信息来构建目标的概要。 收集的数据可用于识别服务器,域,版本号,漏洞,错误配置,可利用的端点和敏感信息泄漏。
通过开源情报收集技术可以发现大量数据,特别是对于拥有大量在线业务的公司。 总有一些微小的代码,一个技术论坛问题,精心设计的细节,一个长期被遗忘的子域,甚至包含可以用于目标站点的数据的营销材料的PDF。 即使简单的谷歌搜索通常也会产生有趣的结果。 以下是我们拥有客户端(域)名称(无特定顺序)后所做的一些事情:
1
Whois查找以查找管理员电子邮件地址。 这些电子邮件地址通常也作为应用程序上的有效用户存在。 可以通过数据库泄漏或通过HaveIBeenPwned等搜索服务搜索电子邮件地址,该服务会告诉您是否发现您的电子邮件是违规行为的一部分。
除了电子邮件地址,whois查询还可以IP历史信息,域过期日期甚至电话号码,这些可以在社会工程学中得到应用。
2
使用site 运算符的Google高级搜索,来限制目标网站,查找php(或任何服务端脚本文件类型),txt或者log文件。
|
|
我们曾多次使用类似搜索查询识别出包含敏感信息和应用程序完整系统路径的有趣文件(例如日志文件)。 您可以将此查询与减号运算符结合来排除特定搜索结果。
3
对域(和子域)执行搜索, 文件类型包括PDF,Excel,Word和PowerPoint。 这些文档可能包含可用于其他攻击的信息。 通常,文件中包含的文档数据(作者姓名等)可以用作应用程序本身的有效用户名。
|
|
您可以在本地下载这些文件,并通过文档元数据提取程序运行它们,或查看每个文件的属性,查看泄漏的信息。
要查看可用于搜索数据的所有选项,请参阅https://www.google.co.in/advanced_search。 此外,Google Hacking Database(现在在exploit-db上)允许您使用预先制作的查询来搜索Internet上特定和有趣的内容。
4
检查robots.txt文件中隐藏的有趣目录。 大多数框架和内容管理系统都有明确定义的目录结构。 所以admin目录是/admin或/administration请求。 如果没有,robots.txt很可能包含您寻找的目录名称。
5
浏览HTML源代码以识别/CMS/框架等。识别应用程序类型有助于将攻击集中在具有易受攻击的组件(例如插件和主题)。 例如,如果您查看页面源并查看wp-content,那么您可以确定您正在浏览WordPress站点。
许多公开可用的浏览器插件也可用于识别网站框架。 Firefox上的Wappalyzer在识别网站上的几种不同服务器类型,服务器和客户端框架以及第三方插件方面做得非常出色。
6
通常情况下,如果您正在查看的网站是由第三方供应商创建的,那么您很可能会在主页底部的某处看到“Powered by Third-Party-Developer-Company”。
使用它来跟踪您收集到承包商网站的信息,也可以获得令人难以置信的回报。 浏览它可能会得到它们构建的框架类型和版本号。 作为其开发计划的一部分,承包商很可能在您客户的网站上拥有测试/管理员帐户。
根据我的经验,许多网站管理员/开发人员经常使用的密码是公司名称(客户公司或承包商的公司)的变体,最后是一些带/不带特殊字符的数字。 例如,如果承包商公司被称为“示例开发人员”,则001Example,Example001,00example,example00等是在客户网站的登录面板上尝试的良好密码候选者。
7
查看公司的LinkedIn个人资料,以确定高级经理,董事和非技术人员。 很多时候,最薄弱的密码属于许多公司的管理人员。 搜索公司网站上的“关于我们”页面也可以找到薄弱的目标。
基于一些电子邮件,可以推测出用户名的标准格式。 一旦理解了用户名格式,就可以创建一个电子邮件地址h和用户名列表,然后可以用它们来执行其他攻击,包括登录页面的暴力破解甚至利用弱密码重置功能。
8
执行与IP地址相关的检查。 由于托管在同一IP(共享主机)上的应用程序不同且较弱,因此应用程序通常会受到攻击。 使用反向IP查找,您可以识别其他目标。 Bing使用IP进行搜索的功能很强大。
反向查找工具:you get signal 和 IP Address
作为使用IP地址进行检查的一部分,还必须注意域名的A和PTR记录。有时由于配置错误,在使用PTR或站点的A记录时可能会访问其他站点。 可以使用nslookup或dig命令获取此信息 :
|
|
9
子域名枚举,以找到客户端托管基础架构较弱的入口点。 子域枚举是评估和发现客户在线公开的资产的最重要步骤之一; 故意作为其业务的一部分或由于配置错误而意外发生。
子域名枚举可以使用各种工具完成,例如dnsrecon,subbrute,knock.py,使用Google的site操作符或dnsdumpster甚至virustotal.com等网站。 大多数这些工具使用大型常用描述性词典,如admin, pages, people, hr, downloads, blog, dev 等。这些单词附加到主域 - example.org,以创建可能的子列表 域名,如admin.example.org,pages.example.org,people.example.org等。然后可以针对DNS服务器检查这些名称验证条目是否存在。
10
查找不同类型资源请求的HTTP状态代码和响应标头。 对于有效页面,对于非现有页面,对于重定向的页面,对于目录名称等。在响应头中查找细微的拼写错误,额外空格和冗余值。
一个非常巧妙的X-Frame-Options标题。标题开头的额外空格使标题本身无效。
另外,请注意CSP头。 它们包含允许脚本加载的域名和来源。 有时,CSP标头中列出的域名中的拼写错误或托管CDN的不安全JavaScript可能是您执行XSS有效负载的唯一方法:)
11
通过Shodan和Censys搜索客户端的域名,以查找文件,IP地址,公开的服务和错误消息。 Shodan和censys扫描了互联网,列举了服务并对他们的调查结果进行了分类,使他们能够通过简单的关键字进行搜索。 这两项服务都可以用来发现大量有趣的东西,包括开放式摄像机,思科设备,医院设施管理服务器,弱配置的telnet和snmp服务以及SCADA系统。 过去曾使用Censys来查找托管源代码和完整应用程序的整个docker镜像的有趣端点。
12
在github,gitlab,bitbucket等代码托管服务上查找客户端。通过可搜索的存储库在线托管的代码中可以找到各种有趣的东西,包括Web漏洞,Web应用程序中的0days,配置问题,AWS和其他密钥。
开发人员经常使用生产密码或API访问密钥提交代码,以便稍后实现和删除敏感信息并进行其他提交。 但是,使用提交日志并检出特定提交,可以检索这些敏感信息,然后可以使用这些信息对客户端的托管基础架构发起完全攻击。
像Gitrob这样的工具可用于查询Github并从命令行本身搜索特定组织的敏感文件。
13
浏览网站的HTML源,以确定客户端是否在云上托管任何静态内容。 像image,js和css文件这样的内容可能托管在客户端拥有的s3数据库上。 在执行标准侦察时也可以识别客户端是否使用云下文来托管静态/动态内容。 在这种情况下,如果客户端在数据库上配置了错误的配置,那么查找客户端使用的数据库可能会非常有益。 在面向公众的数据库中可以找到大量有趣的信息。
像DigiNinja的Bucket Finder这样的工具可用于通过数据库的名称来自动化搜索过程。此工具需要精心策划的存储桶名称列表和潜在的完整URL才能生效。
有各种类型的数据可以归类为OSINT数据,但从渗透测试者的角度来看,所有这些数据都不重要。 作为渗透测试人员,我们或多或少对以下类别的信息感兴趣 :
1.增加攻击面(域,网块等)的信息
2.凭据(电子邮件地址,用户名,密码,API密钥等)
3.敏感信息(客户详细信息,财务报告等)
4.基础设施细节(技术堆栈,使用的硬件设备等)
开源情报(OSINT)是从公开来源收集到数据。
12 种 OSINT 信息收集技巧
1
SSL/TLS证书具有丰富的信息,这些信息在安全评估期间非常重要。
SSL / TLS证书通常包含域名,子域名和电子邮件地址。这使他们成为攻击者的宝库。
2
WHOIS服务通常在渗透测试期间用于查询与Internet资源的注册用户相关的信息,例如域名或IP地址(块)。 WHOIS枚举对于在互联网上拥有大量存在的目标组织尤其有效。
一些公共WHOIS服务器支持高级查询,我们可以使用这些查询来收集目标组织的各种信息。
让我们看一些先进的WHOIS查询来收集信息:
我们可以查询ARIN WHOIS服务器以返回具有给定域名的电子邮件地址的所有条目,在本例中为icann.org。我们只从结果中提取电子邮件地址。
|
|
我们可以查询RADB WHOIS服务器以返回属于自治系统号(ASN)的所有网段
|
|
我们可以查询ARIN WHOIS服务器以返回给定关键字的所有POC,ASN,组织和最终用户客户。
|
|