渗透测试几乎总是需要从一个广泛的信息收集阶段作为开始。 这篇文章讨论了如何利用互联网上的开源信息来建立目标的信息档案。收集的数据可用于识别服务器、域名、版本号、漏洞、错误配置、可利用的端点和敏感信息泄漏。
通过开源情报收集技术,我们可以发现大量的数据,尤其是对于那些拥有大量在线业务的公司。 总会有一些很小的代码片段,或者是一个带有详细细节的技术论坛的问题讨论,或者是一个长期被遗忘的子域名,甚至可能还有一个 PDF 文档,其中包含可用于攻击目标网站的元数据。即使是通过简单的谷歌搜索通常也会产生有趣的结果。以下是我们在获得客户端(域名)名称后所做的一些事情(排序没有特定的顺序) :
1. 通过 Whois 信息可以查找目标的管理员联系人和其他电子邮件地址。这些电子邮件地址通常也作为应用程序上的有效用户存在。电子邮件地址可以通过数据库泄露或者通过一个像 HaveIBeenPwned这样的搜索服务来进行搜索,这个服务会告诉你你的电子邮件是否在泄露的数据库中。
在https://haveibeenpwned.com上发现某个电子邮件地址已经出现在泄漏的数据库中。
除了电子邮件地址,whois 查询还可以返回 IP 地址的历史信息,域名过期日期,甚至电话号码,这些信息可用于社会工程学攻击。
whois.domaintools.com 是一个查询 whois 记录的好网站。
2. 使用谷歌高级搜索中的 site 操作符,可以将搜索结果限制在目标域名,找到 php (或任何服务器端脚本文件类型) ,txt 或日志文件
site:*.example.org ext:php | ext:txt | ext:log
在某些情况下,我们使用这样的搜索查询找到了一些有趣的文件(例如日志文件) ,这些文件可能包含敏感信息和应用程序的完整系统路径。你可以将此查询与一个减号操作符结合起来使用,以排除特定的搜索结果。
在谷歌搜索中发现通过 phpinfo() 函数泄漏了服务器信息的链接
3.在域名(或子域名)上搜索一些格式较老的文档。 文件类型首先应该包括 PDF、 Excel、 Word 和 PowerPoint。 这些文档可能包含可用于其他攻击的信息。 通常,包含在文件属性中的文档元数据(作者名等)也是一个可以登录 Web 应用程序的有效用户名。
site:*.example.org ext:pdf | ext:doc| ext:docx | ext:ppt | ext:pptx | ext:xls | ext:xlsx | ext:csv
你可以将这些文件下载到本地,并通过文档元数据提取器运行这些文件或者通过查看每个文件的属性检查泄漏了哪些信息。
要查看所有可用于搜索数据的选项,请参考 https://www.google.co.in/advanced_search。 此外,谷歌黑客数据库(现在可以在exploit-db上找到)允许你使用预先制定的查询,在互联网上搜索一些有趣的东西。
exploit-db 上的谷歌黑客数据库
4.检查 robots.txt 文件中隐藏的有趣的目录路径。 大多数购物车、框架和内容管理系统都有定义良好的目录结构。 因此,管理员后台可能是一个 /admin 或一个 /administration 请求。 如果管理后台的路径不是这些常见的路径,那么在 robots.txt 中很可能包含你要查找的目录名。
某个比较流行的网站上的 robots.txt 文件
5. 查看 HTML 源码来找到购物车、内容管理系统(CMS)、框架等信息。 识别应用程序类型有助于你在应用程序中利用脆弱组件拿到权限(例如插件和主题)。 例如,如果你查看页面源码并且看到 wp-content,那么你就可以确定这是一个 WordPress 站点。
许多公开可用的浏览器插件也可以用来识别网站框架。 Firefox 浏览器上的 Wappalyzer 插件在识别不同的服务器类型、服务器和客户端框架以及网站上的第三方插件方面是一个很不错的工具。
wappalyzer 在 https://www.wordpress.org 上识别的示例
6. 通常情况下,如果你正在查看的站点是由第三方供应商创建的,那么你很可能会在主页底部看到“由第三方开发者公司提供”的字样。
利用这个跟踪信息你可以对服务提供商的网站也进行信息收集,这很可能得到令人难以置信的回报。 浏览服务提供商的网站可能会发现构建客户网站的框架类型和版本号。 服务提供商也很可能会在客户的站点上创建一个用于测试或者管理站点的帐户,作为其为客户端进行网站开发计划的一部分。
根据我的经验,许多网站管理员和开发人员经常使用公司名称(客户的公司或服务提供商的公司)设置一些变种密码,以及在最后带有或者不带有特殊字符的数字。 例如,如果服务提供商公司叫做“示例开发人员(Example Developers)” ,那么001Example、 Example001、00example、 example00等就有可能是你在客户网站的登录页面上可以尝试的密码。
(请注意本文的后续内容,我们将讲解如何使用这种技术来入侵并访问客户的服务器并在服务器上运行 shell 命令。)
7.浏览目标公司的 LinkedIn 资料,找出高级经理、董事会人员和非技术人员。 很多时候,使用最脆弱的密码的人往往属于许多公司的非技术管理人员。 通过搜索公司网站上的“关于我们”页面也可以找到目标人物。
如果找到了目标公司的电子邮件,可以推导出用户名的标准格式。 一旦你理解了创建用户名的格式,就可以手工创建电子邮件地址列表和与其等价的用户名,然后可以用来执行其他攻击,包括暴力破解登录页面,甚至利用弱密码重置功能。 (我们不止一次发现通过搜索电子邮件地址和可能的用户名是非常有用的,由于目标公司的人员使用了弱密码从而导致完整的应用程序和服务器被入侵。)
8.执行 IP 地址的相关检查。 由于承载在同一 IP (共享主机)上的应用程序不同且有些应用程序漏洞比较多,因此应用程序经常会被入侵。 使用反向 IP 查找,你可以识别出其他目标。 微软的必应搜索有一个很好的搜索IP 的功能。
必应的 IP 搜索功能可以用来寻找同一个服务器上的其他网站
You Get Signal 和 IP Address 也提供了反向 IP 查找的功能。
你可以在 You Get Signal 网站输入一个域名或 IP 地址进行检索
作为检查 IP 地址的一部分,你还必须注意目标域名的 A 记录和 PTR 记录。 有时候由于配置不当,当使用 PTR 记录或站点的 A 记录时,可以访问到不同的站点。 这些信息可以通过 nslookup 或 dig 命令获得。
dig -x 8.8.8.8 nslookup 8.8.8.8
9. 枚举子域名可以找到容易入侵的目标网站和客户端托管基础设施中的脆弱入口点。 子域名枚举是评估和发现客户在网上公开的资产的最重要的步骤之一,无论是作为他们业务的一部分,还是由于错误配置而被意外发现的资产。
子域名枚举可以使用各种工具来完成,比如 dnscrecon,subbrute,knock.py,还可以使用谷歌搜索的 site 操作符,或者像 dnsdumpster,甚至 virustotal. com 这样的站点。 这些工具中的大多数都使用了一个包含常见描述性词汇的大字典,比如 admin、 pages、 people、 hr、 downloads、 blog、 dev、 staging 等等。 这些单词被附加到主域名例如 example. org 上,创建出一个可能的子域名列表,比如 admin.example.org、 pages.example.org、 people.example.org 等等。 然后可以根据 DNS 服务器依次检查这些名称,以验证子域名是否存在。
使用 dnsrecon 暴力破解子域名
10.请求不同类型的资源,然后检查 HTTP 状态码和响应头。 对于检查有效的页面,不存在的页面或者是重定向的页面,目录名等等都很有用。 注意响应标头中的一些细微错误、额外空格和冗余值。
一个非常巧妙的破坏 X-Frame-Options 标头的例子。 标头开头的空格使标头变得无效
另外,注意 CSP 头。 这里面包含了允许脚本加载的域名和源。 有时候,在 CSP 头中列出的域名中的输入错误或者不安全的 JavaScript 托管 CDN 可能是你执行 XSS 有效载荷的唯一方法:)
11. 通过 Shodan 和 Censys 搜索客户的域名,查找文件、 IP 地址、公开的服务和错误消息。 Shodan 和 censys 的开发人员煞费苦心地对互联网进行了端口扫描,枚举了各种服务,并对他们的发现进行了分类,使其可以用简单的关键词进行搜索。 这些服务可以用来发现大量有趣的东西,包括开放摄像头、思科设备、医院设施管理服务器、配置脆弱的 telnet 和 snmp 服务以及 SCADA 系统。 Censys 过去曾被用于寻找有趣的端点,这些端点托管了完整应用程序的源代码和整个 docker 映像。
Shodan 可以用来找到有趣的文件和设备
12. 在诸如 github、 gitlab、 bitbucket 等代码托管服务上查找客户泄露的源代码。 可以通过在线搜索代码托管存储库找到各种有趣的东西,包括网络漏洞,在网络应用程序中的0day,配置漏洞,AWS 和其他密钥。
开发人员经常提交带有产品密码或 API 访问密钥的代码,只是后来意识到安全问题,删除了敏感信息并进行了额外的提交。 但是,使用 git 提交日志和检查特定的 git 提交可以检索这些敏感的信息片段,然后可以使用这些信息对客户托管的基础设施发起全面攻击。
像 Gitrob 这样的工具可以用来查询 Github,并用命令行搜索特定组织的敏感文件。
13. 浏览站点的 HTML 源码,以确定客户网站是否在云上托管了任何静态内容。 像图片、 js 和 css 文件这样的内容可能托管在客户拥有的 s3 存储桶上。 如果客户使用云端下载静态或动态内容,也可以在进行标准的信息搜集时识别出来。 在这种情况下,如果客户在存储桶上配置了错误的权限,那么查找客户使用的存储桶确实是非常有益的。 在公开访问的存储桶里可以找到大量有趣的信息。
像 DigiNina 编写的存储桶搜索器这样的工具可以通过强行命名 存储桶来自动化搜索的过程。 这个工具需要一个精心构造的存储桶名称和潜在的完整 url 列表才能有效。
私有存储桶桶不会泄露客户的文件和资源
公共的存储桶会泄露文件和资源的名称。 然后可以使用完整的 url 下载这些文件。
OSINT 本身就是一个不断发展和不断提高的研究领域。 使用我上面列出的方法和其他技术,可以建立目标的配置文件并揭示一些目标组织的脆弱点,有些方法甚至不需要从系统中发送出一个数据包就可以获取到目标的信息。
一般来说,各种各样的数据都可以归类为 OSINT 数据,但是从渗透测试人员的角度来看,所有这类数据都没有什么意义。 从一个渗透测试人员的角度出发,我们或多或少应该对以下列类别的信息产生兴趣:
(1)增加攻击面的信息(域名、网络信息等)
(2)凭证信息(电子邮件地址、用户名、密码、 API 密钥等)
(3)敏感信息(客户详细信息、财务报告等)
(4)基础设施细节信息(技术栈,硬件设备等)
开源情报(OSINT)是从公共可用的数据源收集的数据
12个额外的开源情报搜集技术
1. SSL / TLS 证书中保存了很多有用的信息,这些信息在安全性评估期间非常重要。
一个SSL/ TLS 证书通常包含域名、子域名和电子邮件地址。 这使得目标站点的证书成为了攻击者的信息宝库
证书透明性(Certificate Transparency,CT)是一个项目。根据该项目,证书颁发机构(Certificate Authority,CA)必须将它们颁发的每个 SSL / TLS 证书发布到公共日志中。 因此,几乎每个主要的 CA 都会将它们颁发的每个SSL / TLS证书记录在 CT 日志中。 这些日志是公开的,任何人都可以查看这些日志。 于是,我们编写了一个脚本,用来从给定域名的 CT 日志中找到的 SSL / TLS 证书中提取子域名。 你可以在下面的链接找到这个脚本。
如上图:从 CT 日志中列出的 SSL/TLS 证书中提取子域名。
SSLScrape 是一个工具,它以 netblock (CIDR)作为输入,查询 SSL/TLS 证书的每个 IP 地址,并从返回的 SSL 证书中提取主机名。 这个工具可以在下面这个链接中找到。
sudo python sslScrape.py TARGET_CIDR
如上图:从 IPv4主机返回的 SSL/TLS 证书中提取主机名。
2. WHOIS 查询服务通常在渗透测试中用于查询与互联网资源的注册用户相关的信息,如域名或 IP 地址(块)。 用WHOIS查询那些在互联网上有大量业务的目标组织尤其有效。
一些公共 的WHOIS 服务器支持高级查询,我们可以使用这些查询收集目标组织的广泛信息。
下面,让我们看看一些高级的 WHOIS 查询来收集信息
· 我们可以查询ARIN WHOIS服务器返回所有具有给定域名的电子邮件地址的条目,在本例中是icann.org。我们只能从这个结果中提取出电子邮件地址。
whois -h whois.arin.net "e @ icann.org" | grep -E -o "\b[a-zA-Z0-9.-][email protected][a-zA-Z0–9.-]+\.[a-zA-Z0–9.-]+\b" | uniq
如上图:通过查询包含特定域名的电子邮件地址的条目从 WHOIS 信息中提取电子邮件地址。
· 我们可以查询RADB WHOIS服务器返回所有属于Autonomous System Number(ASN) 的网络信息。
whois -h whois.radb.net -- '-i origin AS111111' | grep -Eo "([0-9.]+){4}/[0-9]+" | uniq
如上图:列举了使用 RADB WHOIS服务器查询出的 ASN 的所有网络信息。
· 我们可以查询 ARIN WHOIS 服务器返回给定关键字的所有 POC、 ASN、组织和最终用户客户
whois -h whois.arin.net "z wikimedia"
如上图:利用WHOIS 服务查找相关的组织的信息。
3。 查找Autonomous System (AS) Numbers 可以帮助我们识别属于某个组织的网络信息,反过来,这也可能导致其他人发现在网络块信息中的主机上运行的服务。
· 使用dig 或host 命令解析给定域名的 IP 地址
dig +short google.com
· 有一些工具可以找到给定 IP 地址的 ASN
curl -s http://ip-api.com/json/IP_ADDRESS | jq -r .as
我们可以使用 WHOIS 服务或 NSE 脚本来标识所有属于 ASN 号码的网络块信息。
nmap --script targets-asn --script-args targets-asn.asn=15169
如上图:使用 targets-asn NSE 脚本来查找属于 ASN 的网络信息。
4.云存储的使用已经变得非常普遍,尤其是对象和信息块的存储服务,如 Amazon S3、 DigitalOcean Spaces 和 Azure Blob Storage。 在过去几年中,由于配置错误的 S3存储桶,出现了一些引人担心的数据泄露。
根据我们的经验,我们已经看到人们在安全性较差的第三方服务上存储各种各样的数据,大到他们的凭证文本文件小到他们的宠物照片片。
Slurp、 AWSBucketDump 和 Spaces Finder 等工具可以搜索特定服务的公共可访问对象存储实例。 像 Slurp 和 Bucket Stream 这样的工具将证书透明日志数据与基于排列的信息搜集扫描技术结合起来,以识别可公开访问的 S3存储桶。
如上图:使用关键词和排列扫描发现 亚马逊 S3 存储桶。
如上图:利用 CT 日志数据和排列扫描发现亚马逊 S3 存储桶。
5. Wayback Machine 是互联网上关于万维网和其他信息的海量数字档案。 Wayback Machine 还包含网站的历史快照。 有了Wayback CDX 服务 API 使得查找存档变得非常容易。 waybackurls 是一个简洁的工具,可用于搜索与感兴趣的网站相关的数据。
挖掘 Wayback Machine的 档案对于确定给定域名的子域名、敏感目录、敏感文件和应用程序参数非常有用。
go get github.com/tomnomnom/waybackurls waybackurls icann.org
"waybackurls"提取属于"Way back machine archive"中列出的域名的 url示例
6. Common Crawl 是一个构建和维护 web 爬虫数据仓库的项目,任何人都可以访问和分析这些数据。 Common Crawl包含网站的历史快照,以及关于网站和提供服务的元数据。 我们可以使用Common Crawl API 搜索该爬虫索引感兴趣的数据网站。 cc.py 是一个简洁的小工具,可用于搜索感兴趣的站点的爬虫数据。
python cc.py -o cc_archive_results_icann.org icann.org
如上图:在Common Crawl中通过cc.py 来抓取属于某个域名的URLs。
7. Censys 是一个聚合大量互联网扫描数据的平台,并提供一个通过数据集进行搜索的界面。 Censys 将数据集分为三种类型: IPv4主机、网站和 SSL/ TLS 证书。我们需要知道我们要寻找的是什么信息以及如何寻找这些信息,Censys 拥有与 Shodan 相当的有用信息。
Censys 有一个 API,我们可以用它对数据集执行查询。 我们编写了一个连接到 Censys API 的 Python 脚本,查询给定域名的 SSL/ TLS 证书,并提取属于该域名的子域名和电子邮件地址。 脚本可以在下面的链接中找到。
在 Censys 上对给定域名执行提取子域名和电子邮件的脚本。
如上图:“Censys-enumeration”使用 Censys API 提取子域名和电子邮件地址。
如上图:通过"Censys-enumeration"使用 Censys API 来提取子域名和电子邮件地址。
8. Censys 项目从多个来源收集 SSL/TLS 证书。 使用的技术之一是探测公共 IPv4 地址空间上的所有机器的 443 端口,并聚合它们返回的SSL/TLS证书。 Censys 提供了一种将收集到的SSL/TLS 证书与提供证书的 IPv4主机相关联的方法。
通过分析 SSL/TLS 证书和提供证书的 IPv4主机之间的相关性,可以暴露出那些受 Cloudflare 等服务商保护的域名的原始服务器。
Cloudflair 是一个使用 Censys 公开域的起源服务器的工具。 这个工具可以在下面链接找到。
使用 Censys 的全网扫描数据,通过 CloudFlare 查找网站背后的原始服务器。
如上图:用“Cloud Flair”发现medium.com的IP地址对应的原始服务器。
9. 在安全评估期间,源代码仓库也是一个信息宝库。 源代码可以揭示许多信息,从证书、潜在的漏洞到基础设施的细节等等。GitHub 是一个非常流行的版本控制和协作平台。 Gitlab 和 Bitbucket 也是很受欢迎的服务,你可以在那里找到目标组织的源代码。
像 GitHubCloner 这样的工具使用起来非常方便,可以自动克隆 Github 帐户下的所有代码仓库。
$ python githubcloner.py --org organization -o /tmp/output
GithubCloner——克隆指定用户和组织的 Github 代码仓库的脚本。
有各种各样的工具,可以自动化的发现代码仓库中的秘密,如 Gitrob,truffleHog,git-all-secrets 等。
10. 前向 DNS 数据集作为 Rapid7 公开数据项目的一部分发布。 这些数据是对 DNS 请求的响应,用于 Rapid7的 Project Sonar 已知的所有转发的 DNS 名称。 数据格式是 gzip 压缩的 JSON 文件。 我们可以解析数据集来查找给定域名的子域名。 数据集非常大(20 多GB 的压缩包,解压后约 300 多 GB)。 最近,数据集已经根据数据包含的 DNS 记录类型被分解成多个文件。
如上图:从 FDNS 数据集中提取域名和子域名。
11. 内容安全策略(CSP)定义了 Content-Security-Policy HTTP 头,它允许我们创建可信内容源的白名单,并指示浏览器只执行或呈现来自这些源的资源。
Content-Security-Policy 标头将列出一组攻击者可能感兴趣的源(域名)。 我们编写了一个简单的脚本来解析 CSP 头中列出的域名。 脚本可以在下面链接里找到。
从 Content Security Policy (CSP) HTTP 报头中提取域名的脚本。
12. 发件人策略框架记录(Sender Policy Framework)简称SPF,用来指示接收邮件交换的主机被授权对给定的域名发送邮件。
简单地说,SPF 记录可以列出所有被授权为某个域名发送电子邮件的主机。 有时候 SPF 记录会泄露内部的网络信息和域名。
像 Security Trails 这样的服务可以提供 DNS 记录的历史快照。 我们可以看看历史的 SPF 记录,来发现列在 SPF 记录中的域名的内部网络信息和子域名。
如上图:通过 Security Trails显示icann.org域名的历史 SPF 记录。
我们编写了一个快速脚本,从给定域名的 SPF 记录中提取网络信息和域名。 当脚本使用 -a 选项运行时,它还可以返回每个资产的 ASN 详细信息。 脚本可以在下面链接内找到。
一个从 SPF 记录中解析网络信息和域名的 Python 脚本。
python assets_from_spf.py icann.org -a | jq .
总结
在本文中,我们讲解了在日常安全评估中使用到的各种 OSINT 技术。 尽管这篇文章内容很广泛,但它并不是最全的。 OSINT技术是不断变化的,没有放之四海皆准的标准。 我们尽力阐述在渗透测试阶段中可以提高覆盖率的OSINT技术。
参考资料
· https://blog.appsecco.com/open-source-intelligence-gathering-101-d2861d4429e3
· https://blog.appsecco.com/certificate-transparency-part-3-the-dark-side-9d401809b025
· https://blog.appsecco.com/a-penetration-testers-guide-to-sub-domain-enumeration-7d842d5570f6
· https://www.certificate-transparency.org
· https://www.arin.net/resources/services/whois_guide.html
· https://index.commoncrawl.org/
· https://www.upguard.com/breaches/cloud-leak-accenture
· https://www.0xpatrik.com/censys-guide/
· https://www.0xpatrik.com/osint-domains/
· https://opendata.rapid7.com/sonar.fdns_v2/
本文翻译自:https://blog.appsecco.com/open-source-intelligence-gathering-201-covering-12-additional-techniques-b76417b5a544如若转载,请注明原文地址: https://www.4hou.com/system/19664.html