您当前的位置:首页 > 电脑百科 > 安全防护 > 服务器/网站

一次成功的子域名劫持

时间:2021-07-19 11:02:09  来源:  作者:暗网视界

公众号:白帽子左一
专注分享渗透经验,干货技巧....

福利领:见者有份|10余本书+渗透工具包,直接送!

很久之前就看过介绍子域名劫持的文章,可是一直没有遇到过,直到在最近的一次测试中真正遇到了,下面从什么是域名解析开始,大体梳理一下子域名劫持漏洞的成因、挖掘思路、工具,最后通过一个真实的案例来将整个漏洞做一个梳理。

一.域名解析

域名解析也叫DNS解析,是将域名指向网络中的IP地址。

访问网络中的服务都需要获取其IP地址才能访问,但是记住不同的IP地址过于繁琐,通过使用域名解析,可以使人们不用记住繁琐的IP地址,而是可以通过一个通俗易懂的域名来访问相应的网站

在域名解析中,一个域名只能对应一个IP地址,但是一个IP地址可以对应多个域名。
用于解析域名的协议叫做域名解析协议,也就是DNS协议。

域名解析的过程

1、在浏览器中输入www.ichunqiu.com域名,系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有就先调用这个IP地址映射,完成当前域名的解析。


2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。


3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。


4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。


5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询

如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。

本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。

这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(ichunqiu.com)给本地DNS服务器。

当本地DNS服务器收到这个地址后,就会找ichunqiu.com域服务器,重复上面的动作,进行查询,直至找到www.ichunqiu.com主机。


6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

CNAME解析

在DNS协议中,存在多种记录类型,比如最常见的A记录是把某个主机名解析到服务器的IP;

NS记录:域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录;

CNAME记录:是主机名到主机名的映射,比如你拥有aaa.com和bbb.com,

你想把对aaa.com的访问指向到bbb.com,就可以通过C记录,

当访问aaa.com时,会解析到bbb.com,然后通过A记录,解析到了bbb.com的IP地址。

二.子域名劫持漏洞成因

子域名劫持的前提就是使用了CNAME解析,一些服务提供商会在提供服务的时候提供一个域名用来访问相应的服务

例如在Shopify上申请了服务,它给你分配了test.shopify.com作为你的服务的地址

但是你已经有自己的域名了,想让其他人通过你的域名来访问自己注册的服务

那么可以通在自己aaa.com上增加CNAME记录来实现,

例如添加了一个shop.aaa.com的子域名,类型为CNAME,

类型记录为test.shopify.com

这时用户访问shop.aaa.com会解析到test.shopify.com。
 

如果有一天开通的服务到期了,或者是关闭了服务,而没有在域名上删除相应的CNAME记录

这时攻击者自己申请一个test.shopify.com的服务域名并且放上自己的内容,那么当用户访问shop.aaa.com时,访问的就是攻击者的页面。

对于用户而言,shop.aaa.com是一个可信的域名,对于这个域名的信任导致攻击者可以对用户实施钓鱼攻击。

从另一方面来说,如果网站使用了单点登录,并且Cookies在整个域中共享,攻击者可以通过诱导用户访问具有子域名劫持的域名来获取用户的Cookies。

 

综合上面来看,形成子域名劫持需要的前提条件是

  • 子域名shop.aaa.com存在CNAME记录,并且指向另一个域,例如test.shopify.com
  • test.shopify.com过期或者服务关闭,其他用户可以在服务提供商申请当前域名
  • shop.aaa.com没有删除之前的CNAME记录

 

三.DNS记录查询工具

通过上面成因的讲解,可以了解到要存在子域名劫持漏洞,首先需要有CNAME记录。

对于一个已知的子域名,例如shop.aaa.com,可以通过查看该子域名的DNS记录来判断是否具有CNAME记录,这里可以使用的查询命令有nslookup、host,dig

 

nslookup命令

用来查询DNS的记录,查看域名解析情况

可以使用[nslookup 子域名 dns-server]来直接查询域名的解析情况,例如

一次成功的子域名劫持

 

使用 [nslookup -qt=type 子域名 dns-server] 来查询特定类型的记录,例如查询CNAME记录

一次成功的子域名劫持

 

上面命令后面的dns-server是使用的DNS服务器,不加的时候是使用默认的DNS服务器,可以自己指定,例如使用8.8.8.8

一次成功的子域名劫持

 

host命令

host 命令是常用的分析域名查询工具,是一个 DNS 查找实用程序,用于查找域名的 IP 地址。

它还执行反向查找,查找与 IP 地址关联的域名。
语法格式

host [OPTIONS] {name} [server]

用法

host: illegal option -- h
Usage: host [-aCdilrTvVw] [-c class] [-N ndots] [-t type] [-W time]
            [-R number] [-m flag] [-p port] hostname [server]
       -a is equivalent to -v -t ANY
       -A is like -a but omits RRSIG, NSEC, NSEC3
       -c specifies query class for non-IN data
       -C compares SOA records on authoritative nameservers
       -d is equivalent to -v
       -l lists all hosts in a domain, using AXFR
       -m set memory debugging flag (trace|record|usage)
       -N changes the number of dots allowed before root lookup is done
       -p specifies the port on the server to query
       -r disables recursive processing
       -R specifies number of retries for UDP packets
       -s a SERVFAIL response should stop query
       -t specifies the query type
       -T enables TCP/IP mode
       -U enables UDP mode
       -v enables verbose output
       -V print version number and exit
       -w specifies to wait forever for a reply
       -W specifies how long to wait for a reply
       -4 use IPv4 query transport only
       -6 use IPv6 query transport only

查询www.baidu.com 的DNS记录并显示过程详细信息

$ host -a www.baidu.com
Trying "www.baidu.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49888
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.                 IN      ANY

;; ANSWER SECTION:
www.baidu.com.          0       IN      CNAME   www.a.shifen.com.

Received 74 bytes from 172.27.224.1#53 in 20 ms

查询指定类型的DNS记录

$ host -t CNAME www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.

dig命令

dig命令是用来查询单个主机的信息

dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。

  1. dig 命令的版本和输入的参数。
  2. 服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。
  3. "QUESTION SECTION" 显示我们要查询的域名。
  4. "ANSWER SECTION" 是查询到的结果。
  5. 本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,在什么时间进行的查询等等。
一次成功的子域名劫持

 


默认情况下dig命令只查询A记录,可以在后面添加类型来查询特定的类型

$ dig www.baidu.com CNAME

; <<>> DiG 9.16.6-Debian <<>> www.baidu.com CNAME
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53008
;; flags: qr rd ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.baidu.com.                 IN      CNAME

;; ANSWER SECTION:
www.baidu.com.          0       IN      CNAME   www.a.shifen.com.

;; Query time: 30 msec
;; SERVER: 172.27.224.1#53(172.27.224.1)
;; WHEN: Sun Jun 13 22:16:34 CST 2021
;; MSG SIZE  rcvd: 74

dig命令可以设置使用特定的DNS服务器来进行查询

$ dig @8.8.8.8 www.baidu.com

; <<>> DiG 9.16.6-Debian <<>> @8.8.8.8 www.baidu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30073
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

;; ANSWER SECTION:
www.baidu.com.          442     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       39      IN      CNAME   www.wshifen.com.
www.wshifen.com.        39      IN      A       103.235.46.39

;; Query time: 90 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jun 13 22:19:20 CST 2021
;; MSG SIZE  rcvd: 111

上面介绍的三个命令都是查询域名信息的很强大的命令,子域名劫持漏洞的挖掘工具很多都是用到了这三个命令。

 

四.子域名劫持挖掘思路

想要发现子域名解析漏洞,首先需要挖掘收集目标的子域名,并且密切关注这些子域名的变化

收集子域名的方式有很多,也有很多优秀的工具可以进行查询,例如Oneforall、Layer子域名挖掘机、Subdomain3、Sublist3r等

还有一些其他的方法来进行收集,例如在之前的文章中有介绍。

收集完成子域名后,有两种方式来对这些子域名是否存在子域名劫持漏洞,一种思路是访问这些域名,根据网页内容进行判断。

例如页面内容如下时,可能存在github子域名劫持

一次成功的子域名劫持

 

对于可能存在子域名劫持的页面,这里有个项目已经做了整理和收集,can-i-take-over-xyz对许多可能存在子域名劫持的页面都进行了整理,列出了其指纹以及相关的文章。

另外一个检测的思路就是检查域名的DNS记录,如果存在可疑的记录,那么就可以通过手工验证的方法是来检测漏洞是否存在。

五.漏洞挖掘工具

sub404

Sub 404是一个使用Python编写的工具,利用异步方式批量检查子域劫持漏洞。

它会批量查询目标URL的状态,通过404页面的内容来判断是否具有子域名劫持漏洞,另外,它还会通过获取CNAME来进行检测,这个工具使用的前提是安装了sublist3r 和 subfinder。

如果不想再另外安装这两个工具,可以使用Docker来运行sub404。

Docker运行方式

https://github.com/r3curs1v3-pr0xy/sub404.git
cd sub404
docker build -t sub404 .
docker run --rm sub404 -h

选项

描述

例子

-d

目标的域名。

python3 sub404.py -d noobarmy.tech

-f

如果未安装 subfinder,请提供子域文件的位置以检查接管。

python3 sub404.py -f subdomain.txt

-p

为请求设置协议。默认值为"http"。

python3 sub404.py -f subdomain.txt -p https 或 python3 sub404.py -d noobarmy.tech -p https

-o

将 sublist3r 和 subfinder 的唯一子域输出到文本文件。默认为"uniqueURL.txt"

python3 sub404.py -d noobarmy.tech -o output.txt

-h

显示此帮助信息并退出

python3 sub404.py -h

docker run --rm sub404 -d xxxxx.com                                                                #这里使用docker方式运行,并且只测试一个域名的子域名劫持漏洞
一次成功的子域名劫持

 

在运行过程中可能会报一个错误,这是sublist3r的报错,主要是python版本问题导致的。

可以忽略,也可以自己动手改一下,这个工具是很厉害的,检测速度也非常快,如果自己已经收集了子域名,可以将子域名放到一个文本文件里,使用-f选项来检测文件中的子域名。

NtHiM(https://github.com/TheBinitGhimire/NtHiM)

NtHiM同样可以针对单个目标和批量进行测试

用法

选项

描述

例子

-H

显示与使用相关的帮助

NtHiM -h

-t

扫描单个目标

NtHiM -t https://example.example.com

-F

从文件扫描目标列表

NtHiM -f 主机名.txt

-C

并发线程数

NtHiM -c 100 -f 主机名.txt

-v

启用详细模式

NtHiM -v -f 主机名.txt

-o

将输出写入文件

NtHiM -f 主机名.txt -o 输出.txt

-u

更新签名缓存

NtHiM -u

-V

显示版本信息

NtHiM -V

上面仅仅是列举了两个我在挖掘子域名劫持漏洞的两个工具,还有不少其他的漏洞检测工具具有类似的功能,甚至是可以自己根据经验编写一个自动化的验证工具。

 

六.子域名劫持漏洞实例

声明:截至文章发出时,该漏洞已提交厂商并且修复完成

在一次渗透测试过程中,获得了要测试站点的主域名,这里就暂且用xxxxxx.com来表示

首先在资产收集的过程中,就收集了一些子域名

使用了一些比较常见的工具,例如Oneforall、Layer子域名挖掘机,在获取了大量子域名后想到了之前看过的子域名劫持漏洞

这里就用到了一些工具进行测试,其中就有上面介绍的两个工具,运行工具测试后发现了一个提示具有漏洞的子域名,这里就叫hacker.xxxxxx.com,然后通过访问,发现了一个网页的提示信息如下图所示

一次成功的子域名劫持

 

通过查看can-i-take-over-xyz中介绍的可能存在子域名劫持的页面的提示信息

通过这个提示[https://github.com/EdOverflow/can-i-take-over-xyz/issues/46]可以判断可以对其进行劫持

另外使用dig命令查看hacker.xxxxxx.com的CNAME记录,可以看到具有myshopify的cname记录

一次成功的子域名劫持

 


然后尝试对hacker.xxxxxx.com进行子域名劫持,首先需要注册一个myshopify的账号,这个网站提供的服务是收费的,但是首次注册可以试用几天。

 

注册好后创建一个shopify托管域名和页面,假设这里创建的域名是test.myshopify.com,这个可以自己定义页面的内容,我就只写了一点可以验证的内容,写好后修改页面的信息,将其连接到hacker.xxxxxx.com

一次成功的子域名劫持

 


这里就将之前发现具有漏洞的域名写上,它会验证是否可以与这个域名连接,验证的方式就是查询那个域名是否具有shops.myshopify.com的cname记录。

一次成功的子域名劫持

 


修改保存后,就完成了对该子域名的劫持,这时去访问hacker.xxxxxx.com,访问到的就是自己创建的页面的内容。

一次成功的子域名劫持

 

七.总结

本文从域名解析的过程和子域名劫持漏洞产生的原因来大概的介绍了一下漏洞原理,

 

后面又通过对一些工具的介绍和挖掘思路的介绍来展示的挖掘该漏洞的方式和方法,最后通过实例,来对一个具有漏洞的子域名的验证过程做了详细介绍。

 

子域名劫持的方式还有很多种,有的甚至可以对邮件内容进行劫持,但是由于那样的接触的不多,所以没有做过多的介绍.

参考

https://www.freebuf.com/articles/web/183254.html
https://xz.aliyun.com/t/2414
http://blog.itpub.net/69990085/viewspace-2741950/
https://hackerone.com/reports/416474
https://github.com/EdOverflow/can-i-take-over-xyz
https://help.aliyun.com/document_detail/137913.html

作者:i春秋-W4rnIn9



Tags:域名劫持   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
公众号:白帽子左一 专注分享渗透经验,干货技巧....福利领:见者有份|10余本书+渗透工具包,直接送!很久之前就看过介绍子域名劫持的文章,可是一直没有遇到过,直到在最近的一次测试中真...【详细内容】
2021-07-19  Tags: 域名劫持  点击:(98)  评论:(0)  加入收藏
网站的域名是人们在浏览器中键入以访问该网站的地址。域名通常是企业名称的某种形式,并且是企业身份的很大一部分。人们在访问网站时将其键入,并且每次访问都会在浏览器顶部看...【详细内容】
2020-01-08  Tags: 域名劫持  点击:(90)  评论:(0)  加入收藏
▌简易百科推荐
在最近的一波攻击中,黑客利用多个插件中未修补的漏洞攻击了 160 万个 WordPress 网站。 易受攻击的插件对 WordPress 网站产生了的巨大攻击数据。 Wordfence 最近发现 WordPr...【详细内容】
2021-12-16  蚁安    Tags:WordPress   点击:(8)  评论:(0)  加入收藏
事件起因从安全分析系统里面发现一条带有病毒的下载,然后针对这条记录展开了一系列的分析分析过程1.登录到被感染服务器,查看系统状况,hadoop 这个用户在 2020/6/18 20:32 从这...【详细内容】
2021-11-23  Z2990Lig    Tags:SSH   点击:(32)  评论:(0)  加入收藏
1、除了服务器需要用的一些正规软件,其它都不要安装。2、在用户中把administrator改名,这样做的目的是即使对方暴破了我们的密码用户名也不容易猜住,相当于又加了一道关卡。...【详细内容】
2021-11-01  IT小哥吧    Tags:服务器   点击:(37)  评论:(0)  加入收藏
账户安全(1)更名administrator本地用户并禁用guest账户步骤:点击“开始”,找到“管理工具”,点击里面的“计算机管理”,找到“本地用户和组” (2)设定账户锁定策略尝试5次失败...【详细内容】
2021-10-12  Kali与编程  今日头条  Tags:Windows主机   点击:(62)  评论:(0)  加入收藏
本文主要介绍以Microsoft的Windows Server 2019 ,版本:Datacenter(Domain Controller)安全加固保护.企业随着规模不断扩大,业务增多,信息安全建设是企业里一条只有重点没有终点...【详细内容】
2021-09-17  Vireshark    Tags:服务器安全   点击:(64)  评论:(0)  加入收藏
目录常见共享命令IPC$IPC$的利用条件1:开启了139、445端口2:目标主机开启了IPC$共享3:IPC连接报错IPC空连接空连接可以做什么?(毫无作用)IPC$非空连接IPC$非空连接可以做什么?di...【详细内容】
2021-09-16  网络说安全    Tags:系统安全   点击:(86)  评论:(0)  加入收藏
昨天一个老哥找到我,说他的服务器这几天一直被CC攻击,问我这边有没有什么解决的方法? 近年来,网络攻击事件越来越频繁,最常见的就是CC攻击和DDOS攻击,主要的区别就是针对的对象不...【详细内容】
2021-09-10  小蚁GDRAGON    Tags:cc攻击   点击:(58)  评论:(0)  加入收藏
网站页面上的登录操作,通常都是输入帐号密码,传输至网站后台验证。在网站页面、数据传输中,通过技术手段,都可以得到用户输入的信息,并可以修改,从而发起网络攻击。典型的如:使用自...【详细内容】
2021-08-30  修丹道的程序猿    Tags:登录方式   点击:(62)  评论:(0)  加入收藏
网络安全研究人员披露了一类影响主要 DNS 即服务 (DNSaaS) 提供商的新漏洞,这些漏洞可能允许攻击者从企业网络中窃取敏感信息。基础设施安全公司 Wiz 的研究人员 Shir Tamar...【详细内容】
2021-08-12  零日时代    Tags:漏洞   点击:(66)  评论:(0)  加入收藏
001暴力破解1. 指定用户名爆破密码传统型爆破思路,用户名可以通过猜测或者信息收集获得。猜测:admin、网站域名等信息收集:新闻发布人、whoami等2. 指定密码爆破用户名如果是后...【详细内容】
2021-07-23  KaliMa  今日头条  Tags:登陆框   点击:(85)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条