注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。。
[TOC]
0x00 前言介绍
描述:子域名接管漏洞通常被滥用于以下几个目的:恶意软件分发、网络钓鱼/鱼叉式网络钓鱼、XSS 、身份验证绕过等等。由于某些证书颁发机构仅需要域验证,因此也可以轻松生成SSL证书。
注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。。
[TOC]
描述:子域名接管漏洞通常被滥用于以下几个目的:恶意软件分发、网络钓鱼/鱼叉式网络钓鱼、XSS 、身份验证绕过等等。由于某些证书颁发机构仅需要域验证,因此也可以轻松生成SSL证书。
注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。。
[TOC]
描述:子域名接管漏洞通常被滥用于以下几个目的:恶意软件分发、网络钓鱼/鱼叉式网络钓鱼、XSS 、身份验证绕过等等。由于某些证书颁发机构仅需要域验证,因此也可以轻松生成SSL证书。1
sub.expample.com(常规域名) 60 IN CNAME anotherdomain.com.(规范域名)
子域名接管是注册不存在的域名以获得对另一个域的控制权的过程常见的情况如下:
注意事项:
描述:我们在了解子域名接管的时候需要了解一哈DNS解析流程:
CNAME记录的域名的Web浏览器的行为流程:
子域名接管漏洞类型:
(1)CNAME子域名接管漏洞的成因:
(2)NS子域名接管漏洞的成因:
查找类似SERVFAIL或的响应,REFUSED并根据其发出警报
) (3)MX子域名接管漏洞的成因:
原理解析案例:
1 | dig ns wolframe.eu@8.8.8.8 +nostats |
您可以看见wolframe.eu本身只有一个A记录设置为1.1.1.1;所以一旦DNS请求*.wolframe.eu就会随机选择这上面这四个AWS名称服务器之一并返回A记录结果;
采用DNSPython模块自定义DNS解析器
1 | import dns |
总体而言,应通过以下过程扩展自动化:
注意事项:
描述:子域名接管检查漏洞主要是看 CNAME,因此我们可以把收集到子域名的CNAME找出来(当然MX/A也可以但是出现这样的机率是非常少的);
漏洞检查工具: EdOverflow的can-i-take-over-xyz1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49#!/bin/bash
#!Coded by Suleman Malik
#!www.sulemanmalik.com
cont(){
rm /tmp/cnames
rm /tmp/cname-ln
rm /tmp/fn-py
}
bl(){
echo -e "\033[0;31m-------------------------------------------------------------\033[0m"
}
ban(){
echo '''
________
/__ ___/
/ / ___ / ___ ___ ___ ___ __
/ / // ) ) //\ \ //___) ) // ) ) || / / //___) ) // ) )
/ / // / / // \ \ // // / / || / / // //
/ / ((___( ( // \ \ ((____ ((___/ / ||/ / ((____ //
'''
}
cont > /dev/null 2>&1
clear
ban
echo -e "\033[0;32m @sulemanmalik_3 v1\033[0m"
bl
echo "File Name:"
read inp
echo ''
echo ''
cot=0
lof=$(wc -l < $inp | sed 's/ //g')
while read dom
do
cot=$(($cot + 1))
echo -ne "\033[0;32mScanning Subdomains:\033[0m $cot/$lof\r"
cname=$( dig CNAME $dom | grep "CNAME" | tail -n1 | cut -c"29-" | sed 's/^.*E//' >> /tmp/cnames)
echo "$cot - $dom --> " >> /tmp/cname-ln
done < $inp
prog=$(awk 'NR==FNR{a[++y]=$0;next}{b[++x]=$0}
END{z=x>y?x:y;while(++i<=z){print a[i],b[i]}}' /tmp/cname-ln /tmp/cnames > /tmp/fn-py)
echo ''
echo ''
cat /tmp/fn-py
sleep 1
echo ''
bl
cont > /dev/null 2>&1
描述:关于子域名接管首先先得有能让你接管的子域名,所以我们针对子域名要进行收集,然后对比指纹查看是否有接管的可能。
常常使用dig、nslookup、host等命令进行收集查看:1
2
3$ nslookup c1h2e1.github.io
$ host c1h2e1.github.io
$ dig c1h2e1.github.io
记录一些典型案例:
案例1:feedpress子域名接管
参考案例:https://hackerone.com/reports/1953501
2
3
4
5
6
7
8
9
10
11
12
13
14#podcasts.slack-core.com是CNAME'd to redirect.feedpress.me:
$ dig podcasts.slack-core.com
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;podcasts.slack-core.com. IN A
;; ANSWER SECTION:
podcasts.slack-core.com. 299 IN CNAME redirect.feedpress.me.
redirect.feedpress.me. 3599 IN A 5.135.16.40
;; Query time: 253 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
思路:首先执行了dig命令发现解析了 redirect.feedpress.me 然而feedpress可以导致子域名接管,通过在Feed上创建我自己的帐户并且注册设置podcasts.slack-core.com作为我订阅的“自定义域名”,在它通过Feed传播之后最终成功的接管了域名podcasts.slack-core.com提供的内容。
案例2:Heroku子域名接管
描述:该漏洞是CNAME子域名接管漏洞类型案例;
页面特征:
利用条件:CNAME指向 herokudns.com的子域如果一个子域使用Heroku 服务的子域名,例如 vuln.example.com 显示如上错误页面,当通过子域名挖掘时,他就会产生子域名接管漏洞
vuln.example.com 60 IN CNAME vuln.example.com.herokudns.com
漏洞利用:
1.注册Heroku(https://signup.heroku.com/)
2.在Heroku上部署应用程序。
(1)安装git
(2)安装 heroku cli1
curl https://cli-assets.heroku.com/install.sh | sh
(3)创建一个简单页面1
2
3
4
5
6
7
8
9
10
11
12
13
14
15cd ~
mkdir herokudeploy
cd herokudeploy
echo "{}" > composer.json
echo "Subdomain takeover PoC" > index.html
touch index.php
#编辑index.php
<?php header( 'Location: /index.html' ) ; ?>
#接下来,
git init
git add .
git commit -m "just simple poc"
heroku apps:create justsimplesubdomaintakeoverpoc
如果Heroku中不存在应用程序的名称,则将创建应用程序。此外如果您从未登录过Heroku,系统会要求您提供Heroku帐户电子邮件和密码。请登录然后将本地文件推送到Heroku仓库。
git push heroku master
您正在部署的应用程序可以在*.herokuapp.com中看到。
本教程中的示例变为:https://justsimplesubdomaintakeoverpoc.herokuapp.com
3.添加要覆盖的子域,然后添加域即可
案例3:Tumblr子域名接管
描述:该漏洞是CNAME子域名接管漏洞类型案例;
要在Tumblr中使用自定义域,我们需要添加A记录,如果使用的是主域则该记录将指向66.6.44.4,如果Tumblr自定义域位于子域上则添加CNAME,例如我的blog.site.com然后CNAME是您拥有的tumblr子域site.tumblr.com。
攻击过程:
1 | $ curl -I www.leifroswold.com |
现在转到您的Tumblr博客设置然后更改域名,因为没有创建CNAME记录,我们可以使用任何用户名的tumblr子域。只需要添加想要定义的域然后保存即可;
案例4:Fastmail 子域名接管
描述:Fastmail也存在子域名接管漏洞。因为当我们设置自定义域时没有额外的验证。
漏洞特征:
利用条件:
漏洞利用:
第一步是添加要覆盖的自定义域。进入设置菜单,然后进入域。
第二步是创建网站。成功添加要覆盖的域后,现在我们创建公共站点。首先在左下角菜单中,选择“ 文件”,上传html文件。
第三步是单击 websites 设置域名,最终使用www.zafkiel.net接管 web.messagingengine.com。
总结可接管服务:
参考:https://github.com/EdOverflow/can-i-take-over-xyz/blob/master/README.md
补充:启发式测试以确定是否可以接管子域/域1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32Engine Possible Fingerprint Reference
AWS/S3 Yes The specified bucket does not exist
Bitbucket Yes Repository not found
Campaign Monitor Yes Support Page
Cargo Collective Yes 404 Not Found Cargo Support Page
Cloudfront Yes Bad Request: ERROR: The request could not be satisfied https://blog.zsec.uk/subdomainhijack/
Desk No
Fastly Yes Fastly error: unknown domain:
Feedpress Yes The feed has not been found. https://hackerone.com/reports/195350
Freshdesk No Freshdesk Support Page
Ghost Yes The thing you were looking for is no longer here, or never was
Github Yes There isn't a Github Pages site here. https://hackerone.com/reports/263902
Gitlab No https://hackerone.com/reports/312118
Google Cloud Storage No
Help Juice Yes We could not find what you're looking for. Help Juice Support Page
Help Scout Yes No settings were found for this company: HelpScout Docs
Heroku Yes No such app
JetBrains Yes is not a registered InCloud YouTrack
Mashery No Unrecognized domain https://hackerone.com/reports/275714
Microsoft Azure Yes
Sendgrid No
Shopify Yes Sorry, this shop is currently unavailable.
Squarespace No
Statuspage Yes You are being redirected https://hackerone.com/reports/49663
Surge.sh Yes project not found https://surge.sh/help/adding-a-custom-domain
Tumblr Yes Whatever you were looking for doesn't currently exist at this address
Tilda No Please renew your subscription
Unbounce Yes The requested URL was not found on this server. https://hackerone.com/reports/202767
UserVoice Yes This UserVoice subdomain is currently available!
Wordpress Yes Do you want to register *.wordpress.com?
WP Engine No
Zendesk Yes Help Center Closed Zendesk Support
简要概述了CloudFront(虚拟主机架构)非常相似的其他云服务。
Amazon S3 - 以前简要提到了Amazon S3。用于访问存储桶的默认基本域并不总是相同,并且取决于所使用的AWS区域。AWS文档中提供了Amazon S3基本域的完整列表。与CloudFront类似,Amazon S3允许指定备用(自定义)域名以访问存储桶的内容。
Heroku - Heroku是一个平台即服务提供商,可以使用简单的工作流程部署应用程序。由于需要访问应用程序,Heroku使用herokuapp.com上形成的子域公开应用程序。但是也可以指定自定义域名以访问已部署的应用程序。
Shopify - Shopify提供了一种在云中创建和自定义电子商务商店的方法。访问商店的默认子域是在myshopify.com上构建的。作为之前描述的服务,Shopify允许指定备用域名。值得注意的是Shopify验证了正确的CNAME记录配置。但是,此验证不是域名所有权验证。Shopify仅检查备用域的DNS区域中存在的准确CNAME记录。因此,此验证不会阻止子域名的接管。
GitHub - GitHub是Git的版本控制存储库。GitHub还允许使用他们的GitHub Pages项目进行免费的虚拟主机托管。此Web托管通常用于项目的文档,技术博客或支持Web页面到开源项目。除github.io下的默认域名外,GitHub Pages还支持自定义域名。
Microsoft Azure - Microsoft Azure是一个更加突出的云提供商,类似于AWS。与上面提到的云服务相比,它不同,因为它不提供虚拟主机架构。简而言之,对于每个云服务,Azure都会创建自己的具有自己IP地址的虚拟机。因此,域名和IP地址之间的映射是明确的(一对一映射)。值得注意的是,由于这不是常规虚拟主机设置,因此不一定必须在资源设置中明确定义配置CNAME记录。Azure提供多种云服务,但本文中讨论的云服务具有cloudapp.net和azurewebsites.net的默认域。其文档描述了使用A或CNAME记录设置域名和Azure资源之间的链接(指向前面提到的两个域之一)。一个有趣的观察是,对于A记录,Azure使用TXT记录进行域所有权验证。但是,对于CNAME记录而言并非如此,因此即使在Microsoft Azure的情况下也可以进行子域接管。
案例5:Surge.sh 子域名接管
漏洞特征:
利用条件:
CNAME 可定义为 na-west1.surge.sh,A 记录 指向 45.55.110.124 (其中一个条件得到满足,我们就可以接管。)
例如:1
2
3
4
5
6
7
8
9
10
11dig agilesysadmin.com
; <<>> DiG 9.10.3-P4-Ubuntu <<>> agilesysadmin.com
;; global options: +cmd
.......
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;agilesysadmin.com. IN A
;; ANSWER SECTION:
agilesysadmin.com. 3599 IN A 45.55.110.124
漏洞利用
第一步,安装nodejs后,执行: sudo npm install --global surge
第二步,创建一个文件夹,上传自定义html文件1
2
3mkdir surge
cd surge
nano index.html
第三步,运行 sunger : surge path_project namadomain.
比如:surge /home/linuxsec/surge/ agilesysadmin.com
建议:在绑定第三方域名解析记录的时候,需要了解其业务解析流程并进行CNAME安全配置,如果不使用第三方页面托管服务将需要取消其解析记录;
你好看友,欢迎关注博主微信公众号哟! ❤
这将是我持续更新文章的动力源泉,谢谢支持!(๑′ᴗ‵๑)
温馨提示: 未解锁的用户不能粘贴复制文章内容哟!
方式1.请访问本博主的B站【WeiyiGeek】首页关注UP主,
将自动随机获取解锁验证码。
Method 2.Please visit 【My Twitter】. There is an article verification code in the homepage.
方式3.扫一扫下方二维码,关注本站官方公众号
回复:验证码
将获取解锁(有效期7天)本站所有技术文章哟!
@WeiyiGeek - 为了能到远方,脚下的每一步都不能少
欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。
最后更新时间:
文章原始路径:_posts/网安大类/PenetrationNote/域名解析/Subdomain-Takeover子域名接管原理和利用案例.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/9-17-400.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议