子域名劫持

子域名劫持即攻击者可以声称接管某站点的子域名

Tips

  1. 利用KnockPy等工具发现子域名,尤其注意这些子域名是否指向第三方服务,比如AWS, Github, Zendesk, Fastly等等,因为这些服务允许你注册自定义的URL
  2. 直接注册那些子域名指向的过期域名
  3. 对于无法接管的子域名,可以尝试通配符子域名
  4. 不要只限于子域名本身,网站引入的外部资源也可以尝试利用,如js。
  5. 耐心看文档非常重要

实例:Ubiquiti子域名劫持

assets.goubiquiti.com有一DNS条目指向了Amazon S3的文件存储但相应的bucket并不存在:

Goubiquiti Assets DNS

由于Amazon S3提供自定义域名服务,攻击者直接接管了 uwn-images.s3-website-us-west-1.amazonaws.com并部署了测试站点。

实例:Snapchat Fastly劫持

Fastly是一家CDN服务提供商,类似的还有Amazon’s CloudFront。
该漏洞发现者Ebrietas向Snapchat报告称由于他们的错误配置,http://fastly.sc-cdn.net有一条CNAME记录指向了一个不属于他们的
Fastly子域名,访问这个url会报错:

“Fastly error: unknown domain: XXXXX. Please
check that this domain has been added to a service.”

关于Fastly,如果你使用他们的共享通配符证书,他们会允许你注册一个自定义的子域名。

然而Ebrietas没有马上利用这个子域名来劫持,他先查阅了文档,发现域名遵循以下规则:EXAMPLE.global.ssl.fastly.net

另外,Ebrietas做了下面两件事来增加报告的完整性和说服力:

  1. fastly.sc-cdn.net确实是Snapchat指向Fastly的子域名,可是如何证明sc-cdn.net归属于Snapchat?因为从外表看真的很难说它属于哪个公司,于是Ebrietas通过censys.io查阅了它的SSL证书来验证。
  2. 劫持一开始并没有显示出效果,于是他搭建了一个服务器持续监听,最终收到了请求,证明该子域名确实在被使用。
root@localhost:~# cat /var/log/apache2/access.log | grep -v server-status | gre\
p snapchat -i
23.235.39.33 - - [02/Aug/2016:18:28:25 +0000] "GET /bq/story_blob?story_id=fRaYu\
tXlQBosonUmKavo1uA&t=2&mt=0 HTTP/1.1...
23.235.39.43 - - [02/Aug/2016:18:28:25 +0000] "GET /bq/story_blob?story_id=f3gHI\
7yhW-Q7TeACCzc2nKQ&t=2&mt=0 HTTP/1.1...
23.235.46.45 - - [03/Aug/2016:02:40:48 +0000] "GET /bq/story_blob?story_id=fKGG6\
u9zG4juOFT7-k0PNWw&t=2&mt=1&encoding...
23.235.46.23 - - [03/Aug/2016:02:40:49 +0000] "GET /bq/story_blob?story_id=fco3g\
XZkbBCyGc_Ym8UhK2g&t=2&mt=1&encoding...
43.249.75.20 - - [03/Aug/2016:12:39:03 +0000] "GET /discover/dsnaps?edition_id=4\
527366714425344&dsnap_id=56515658813...
43.249.75.24 - - [03/Aug/2016:12:39:03 +0000] "GET /bq/story_blob?story_id=ftzqL\
Qky4KJ_B6Jebus2Paw&t=2&mt=1&encoding...
43.249.75.22 - - [03/Aug/2016:12:39:03 +0000] "GET /bq/story_blob?story_id=fEXbJ\
2SDn3Os8m4aeXs-7Cg&t=2&mt=0 HTTP/1.1...
23.235.46.21 - - [03/Aug/2016:14:46:18 +0000] "GET /bq/story_blob?story_id=fu8jK\
J_5yF71_WEDi8eiMuQ&t=1&mt=1&encoding...
23.235.46.28 - - [03/Aug/2016:14:46:19 +0000] "GET /bq/story_blob?story_id=flWVB\
XvBXToy-vhsBdze11g&t=1&mt=1&encoding...
23.235.44.35 - - [04/Aug/2016:05:57:37 +0000] "GET /bq/story_blob?story_id=fuZO-\
2ouGdvbCSggKAWGTaw&t=0&mt=1&encoding...
23.235.44.46 - - [04/Aug/2016:05:57:37 +0000] "GET /bq/story_blob?story_id=fa3DT\
t_mL0MhekUS9ZXg49A&t=0&mt=1&encoding...
185.31.18.21 - - [04/Aug/2016:19:50:01 +0000] "GET /bq/story_blob?story_id=fDL27\
0uTcFhyzlRENPVPXnQ&t=0&mt=1&encoding...

这些请求虽然不带有任何tokens或cookies,但证明了用户有被提供恶意内容的风险。

实例:api.legalrobot.com

Legal Robot 被发现有一条CNAME记录将api.legalrobot.com指向Modulus.io,但是没有声明Modulus.io上页面的管理权


Modulus Application Not Found

根据Modulus的文档所说,“任何子域名都可以被指定”,显然这又是一个子域名劫持的例子,然而经过尝试,api.legalrobot.com并不能被声明,他继续尝试声明通配符子域名*.legalrobot.com,这一次成功了。

实例:Uber SendGrid邮件域名劫持

SendGrid是一个邮件云服务提供商,Uber是他们的客户之一。Uranium238团队发现了Uber的CNAME记录将 em.uber.com 指向SendGrid。

White-lable 是一种SendGrib用于向ISP展示其被授权代表用户(发件人)发送邮件的功能。授权的方式就是将发件人的域名指向SendGrid,这种代理模式有助于建立发件人的信誉。

基于这样的功能,SendGrid可以代表Uber发送邮件。查看Uber的MX记录也能发现, em.uber.com被指向mx.sendgrid.net。

Uranium238团队继续查阅SendGrid的文档,观察有没有可以利用的功能。SendGrid提供了一种入站解析Webhook,可以帮助公司解析接收到的邮件附件和内容,此功能需要两步配置:

  1. 将公司域名/子域名的MX记录指向mx.sendgrid.net
  2. 将域名和解析API设置页的URL相关联

第一步已经配置好了,第二步Uber没有声明em.uber.com和任何URL相关联,Uranium238团队替他们完成了,并测试了邮件接收功能。


SendGrid Inbound Parse Configuration using ngrok.io

Confirmation of sub domain takeover via parsed email

Reference

Web Hacking 101

Resources

HackerOne漏洞案例 | 子域名劫持漏洞的挖掘指南

你可能感兴趣的:(子域名劫持)