服务器指纹识别之 DNS TXT - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

服务器指纹识别之 DNS TXT

atp7bkil 内网渗透 2019-12-29 10:35:14
收藏

导语:在这个博客中,我将演示域名验证的典型工作方式,回顾我的小型 DNS 研究项目的结果,并分享一个 PowerShell 脚本,这个脚本可以通过 DNS TXT 记录用于在线服务提供商的指纹识别。

DNS 侦察是大多数外部网络渗透测试和红队操作的重要组成部分。 在 DNS 侦察有许多重点领域,但是我认为深入研究DNS TXT记录是很有趣的,这些记录是为了验证域名所有权而创建的。它们非常常见,可以揭示目标公司使用的技术和服务的有用信息。

在这个博客中,我将演示域名验证的典型工作方式,回顾我的小型 DNS 研究项目的结果,并分享一个 PowerShell 脚本,这个脚本可以通过 DNS TXT 记录用于在线服务提供商的指纹识别。 这对于红色团队和内部安全团队寻找减少在互联网上的足迹的方法应该是有用的。

如果你想跳过这些内容,下面是内容的概述:

·  域名所有权验证过程

· 100万个域名的 TXT 记录分析

· 五大服务提供商类别

· 25大服务供应商

· 自动化实现域名验证令牌指纹识别

· 如何将域名验证令牌用于恶意操作?

域名所有权验证过程

当公司或个人想要使用与其域名相关的在线服务时,需要验证该域名的所有权。 根据服务提供商的不同,这个过程通常被称为“域名校验”或“域名验证”。

下面是这个过程的典型工作方式的大纲:

1、公司在在线服务提供商创建一个帐户

2、公司向在线服务提供商提供需要验证的域名

3、在线服务提供商向公司注册的域名联系人发送一封包含唯一域名验证令牌(文本值)的电子邮件

4、然后,公司为他们的域名创建一个 DNS TXT 记录,其中包含他们通过在线服务提供商的电子邮件收到的域名验证令牌

5、在线服务提供商通过执行 DNS 查询来验证域名所有权,以验证包含域名验证令牌的 TXT 记录是否已经创建

6、在大多数情况下,一旦域名验证的过程完成,公司可以删除包含域名验证令牌的 DNS TXT 记录

注意最后一步,这确实是每个人似乎都会忘记做的事情,这就是为什么简单的 DNS 查询对于深入了解在线服务提供商正在使用的是什么非常有用。

注意: 域名验证过程并不总是需要 DNS TXT 条目。 一些在线服务提供商仅仅要求你上传一个包含域名验证令牌的文本文件到域名的网站上。 例如, http://mywebsite.com/validation_12345.txt。 如果你知道你要找的是什么,Google hacking 是一个很方便的方法,但是现在让我们把注意力集中在 DNS 记录上。

100万个域名的 TXT 记录分析

多年来,我们的团队一直在从 DNS TXT 记录中搜集有关在线服务提供商的信息,但我希望能够更广泛地了解其中的内容。 因此,我开始了确定一些域名验证令牌趋势的旅程。

选择域名样本

我开始只是抓取Alexa 排名前100万的网站的 DNS TXT 记录。 我使用了一个稍微老一点的列表,但是对于那些想要重复挖掘这些信息的人来说,亚马逊有一个服务,你可以在 https://aws.amazon.com/alexa-top-sites/上使用。

查询 TXT 记录的工具

DNS TXT 记录可以很容易地通过 nslookup、 host、 dig、 massdns 等工具找到,或者像 dnsrecon  这样关注度比较高的安全工具。 我最终使用了一个基本的 PowerShell 脚本来发出所有的 DNS 请求,因为 PowerShell 让我变得懒惰。 虽然速度有点慢,但还是用了不到一天的时间从100万个站点收集了所有的 TXT 记录。

下面是我使用的基本收集脚本。

# Import list of domains $Domains = gc c:\temp\domains.txt # Get TXT records for domains $txtlist = $Domains | ForEach-Object{     Resolve-DnsName -Type TXT $_ -Verbose } # Filter out most spf records $Results = $txtlist  | where type -like txt |  select name,type,strings |  ForEach-Object {     $myname = $_.name     $_.strings |      foreach {                  $object = New-Object psobject         $object | add-member noteproperty name $myname         $object | add-member noteproperty txtstring $_         if($_ -notlike "v=spf*")         {             $object         }     } } | Sort-Object name # Save results to CSV $Results | Export-Csv -NoTypeInformation dnstxt-records.csv # Return results to console $Results

下面是我在收集信息后使用的高级过程:

1、删除剩余的 SPF 记录

2、解析键值对

3、对相似的键进行排序和分组

4、通过 Google hacking 和文档审查确定服务提供商

5、移除了完全唯一且不能轻易归属于特定服务提供商的键

6、对服务提供商进行分类

7、基于域名验证令牌计数确定最常用的服务提供商类别

8、基于域名验证令牌计数确定最常用的服务提供商

五大服务提供商类别

在简要分析了近100万个域名的 DNS TXT 记录之后,我创建了一个需要域名验证的最常见的在线服务类别和提供商的列表。

下面是前五大类别:

image.png

还有许多其他类型的服务,从缓存服务(如 Cloudflare)到安全服务(如“ Have i Been Pwned”) ,但上面的类别似乎是最普遍的。 值得注意的是,我删除了 SPF 记录,因为从技术上讲,SPF 记录里面没有域名验证令牌。 然而,SPF 记录是另一个丰富的信息来源,如果管理不善,可能导致电子邮件欺骗的机会。 不管怎样,他们已经超出了这个博客的范围。

25大服务供应商

下面是前25个服务提供商,我可以基于他们的域名验证令牌(TXT 记录)进行指纹识别。 然而,我总共能够提供大约130个属性。

微信截图_20191225113028.png

域名验证令牌指纹自动化

为了简化这个过程,我编写了一个 PowerShell 函数,名为“ Resolve-DnsDomainValidationToken”。 你可以简单地为它提供域名,它将基于我创建的域名验证令牌库扫描已知服务提供商的相关 DNS TXT 记录。 目前它支持单个域名、域名列表或 url 列表的参数。

Resolve-DnsDomainValidationToken 可在此下载。

命令示例

为了让你了解命令和输出是什么样的,我在下面提供了一个示例。 目标域名是从 Alexa 前100万个域名中随机选出的。

# Load Resolve-DnsDomainValidationToken into the PowerShell session IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/PowerUpSQL/master/PowerUpSQL.ps1") # Run Resolve-DnsDomainValidationToken to collect and fingerprint TXT records $Results = Resolve-DnsDomainValidationToken -Verbose -Domain adroll.com   # View records in the console $Results

image.png

对于那些不喜欢在控制台查看结果的人来说,还可以使用 Out-GridView查看结果。

# View record in the out-grid view $Results | Out-GridView

image.png

最后,该命令还会自动创建两个包含结果的 csv 文件:

1、Dns_Txt_Records.csv 包含了发现的所有 TXT 记录。

2、Dns_Txt_Records_Domain_Validation_Tokens.csv 包含了可以进行指纹识别的 TXT 记录。

image.png

域名验证令牌如何用于邪恶?

下面是我们在渗透测试中如何使用域名验证令牌的一些例子。 由于渗透测试人员和红色团队受到法律限制,我还添加了一些只对现实世界的攻击者可用的选项。

渗透测试人员使用案例

a. 支持但不使用 MFA 的联合身份验证的服务:这是我们最常见的用例。 通过检查域名验证令牌,我们能够识别支持与公司的活动目录部署相关联的联合身份验证的服务提供商。 在许多情况下,它们没有配置双重身份验证。 常见的例子包括 Office 365、 AWS、 GSuite 和 Github。 专业提示: 一旦你对 Azure 进行了身份验证,你就可以通过解析服务主体名称,快速找到支持联合或托管身份验证的其他服务提供商目标。 你可以通过 Karl 的 Get-AzureDomainInfo.ps1 脚本实现。

b. 通过子域名劫持目标:域名验证令牌可以显示支持子域名的服务,一旦 CNAME 记录失效,这些服务可能会受到攻击。 关于常用技术的信息,帕特里克 · 胡达克在这里写了一篇很好的博文。

c. 社会工程学:在构建电话和电子邮件网络钓鱼活动时,更好地理解组织使用的技术和服务提供商是非常有用的

d.一般的成熟度度量:当审查一个组织拥有的所有域名的域名验证令牌时,可以对它们的成熟度水平有一个大致的了解,你可以开始回答一些基本的问题,比如: 

1. 它们是否使用内容分发网络(CDN)来分发和保护它们的网站内容? 

2. 他们是否使用第三方营销和分析? 如果是这样的话,又是哪个第三方? 它们是如何配置的? 

3. 他们是否使用与安全相关的服务提供商? 这些保险提供什么保障? 

4. 他们使用谁来颁发 SSL / TLS 证书? 它们是如何使用的? 

5. 他们使用什么邮件保护服务? 那些默认配置是什么?

e. 分析特定的在线服务提供商的域名验证令牌可以产生额外的洞察力。 例如,许多域名验证令牌都是惟一的某个数值,每个新客户的数值都会递增。 通过分析数千个域名的值,你可以开始推断某个特定客户机使用的服务提供商的时间之类的事情。 一些验证令牌还包括散列和加密的 base64值,这些值有可能在离线时被破解以显示某些明文信息。

f. 现实世界的攻击者还可以试图直接入侵服务提供商,然后横向移动到特定公司的站点、数据存储等服务器上。 共享主机提供商就是一个常见的例子。 渗透测试人员和红队人员不能利用这些场景,但是如果你是一个服务提供商,你应该努力加强客户端隔离,以帮助避免向攻击者敞开这些攻击向量。

总结

分析 DNS TXT 记录中发现的域名验证令牌远非一个新概念,但我希望 Resolve-DnsDomainValidationToken 中的指纹库将有助于在下一个红队、渗透测试评估或内部审计期间节省你的一些时间。

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论