注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。
[TOC]
描述:子域名接管漏洞通常被滥用于以下几个目的:恶意软件分发、网络钓鱼/鱼叉式网络钓鱼、XSS 、身份验证绕过等等。由于某些证书颁发机构仅需要域验证,因此也可以轻松生成SSL证书。
sub.expample.com(常规域名) 60 IN CNAME anotherdomain.com.(规范域名)
子域名接管是注册不存在的域名以获得对另一个域的控制权的过程常见的情况如下:
注意事项:
描述:我们在了解子域名接管的时候需要了解一哈DNS解析流程:
WeiyiGeek.
CNAME记录的域名的Web浏览器的行为流程:
WeiyiGeek.
子域名接管漏洞类型:
(1)CNAME子域名接管漏洞的成因:
(2)NS子域名接管漏洞的成因:
查找类似SERVFAIL或的响应,REFUSED并根据其发出警报
) (3)MX子域名接管漏洞的成因:
原理解析案例:
WeiyiGeek.
WeiyiGeek.
总体而言,应通过以下过程扩展自动化:
WeiyiGeek.
注意事项:
描述:子域名接管检查漏洞主要是看 CNAME,因此我们可以把收集到子域名的CNAME找出来(当然MX/A也可以但是出现这样的机率是非常少的); 漏洞检查工具: EdOverflow的can-i-take-over-xyz
#!/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
WeiyiGeek.
描述:关于子域名接管首先先得有能让你接管的子域名,所以我们针对子域名要进行收集,然后对比指纹查看是否有接管的可能。 常常使用dig、nslookup、host等命令进行收集查看:
$ nslookup c1h2e1.github.io
$ host c1h2e1.github.io
$ dig c1h2e1.github.io
记录一些典型案例:
案例1:feedpress子域名接管 参考案例:https://hackerone.com/reports/195350
#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子域名接管漏洞类型案例; 页面特征:
WeiyiGeek.
利用条件: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 cli
curl https://cli-assets.heroku.com/install.sh | sh
(3)创建一个简单页面
cd ~
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.添加要覆盖的子域,然后添加域即可
WeiyiGeek.
案例3:Tumblr子域名接管 描述:该漏洞是CNAME子域名接管漏洞类型案例; 要在Tumblr中使用自定义域,我们需要添加A记录,如果使用的是主域则该记录将指向66.6.44.4,如果Tumblr自定义域位于子域上则添加CNAME,例如我的blog.site.com然后CNAME是您拥有的tumblr子域site.tumblr.com。 攻击过程:
$ curl -I www.leifroswold.com
HTTP/1.1 404 Not Found
Server: openresty
Date: Mon, 24 Sep 2018 15:14:30 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding
X-Rid: 57de79ef9b33ae549a1795eecfd68570
P3p: CP=Tumblr s privacy policy is available here: https://www.tumblr.com/policy/en/priva
#用dig查看他以前用过的tumblr用户名。
$ dig www.leifroswold.com
.....
;; ANSWER SECTION:
www.leifroswold.com. 942 IN A 66.6.44.4 #这里配置错误实际应该设置CNAME指向字节Tumblr域名
现在转到您的Tumblr博客设置然后更改域名,因为没有创建CNAME记录,我们可以使用任何用户名的tumblr子域。只需要添加想要定义的域然后保存即可;
WeiyiGeek.
案例4:Fastmail 子域名接管 描述:Fastmail也存在子域名接管漏洞。因为当我们设置自定义域时没有额外的验证。 漏洞特征:
WeiyiGeek.
利用条件:
漏洞利用: 第一步是添加要覆盖的自定义域。进入设置菜单,然后进入域。 第二步是创建网站。成功添加要覆盖的域后,现在我们创建公共站点。首先在左下角菜单中,选择“ 文件”,上传html文件。 第三步是单击 websites 设置域名,最终使用www.zafkiel.net接管 web.messagingengine.com。
WeiyiGeek.
总结可接管服务: 参考:https://github.com/EdOverflow/can-i-take-over-xyz/blob/master/README.md
WeiyiGeek.
WeiyiGeek.
WeiyiGeek.
补充:启发式测试以确定是否可以接管子域/域
Engine 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(虚拟主机架构)非常相似的其他云服务。
案例5:Surge.sh 子域名接管 漏洞特征:
WeiyiGeek.
利用条件: CNAME 可定义为 na-west1.surge.sh,A 记录 指向 45.55.110.124 (其中一个条件得到满足,我们就可以接管。) 例如:
dig 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文件
mkdir surge
cd surge
nano index.html
第三步,运行 sunger : surge path_project namadomain.
比如:surge /home/linuxsec/surge/ agilesysadmin.com
WeiyiGeek.
建议:在绑定第三方域名解析记录的时候,需要了解其业务解析流程并进行CNAME安全配置,如果不使用第三方页面托管服务将需要取消其解析记录;