一次成功的子域劫持

admin 2021年12月31日00:51:22评论90 views字数 7226阅读24分5秒阅读模式


一次成功的子域劫持 先介绍一下子域名劫持的文章,但是一直没有遇到过,直到最近的测试中真正遇到了,下面从什么是目标解析开始,大体一下一下子市场捕捉漏洞的成因、浅思思路、最后通过了一个的案例来将整个漏洞做一个工具。

域名解析

域名解析也叫DNS解析,是将需要访问域名解析网络中的IP地址。记住繁琐的IP地址,而是可以通过一个通俗易懂的域名来访问相应的网站。在域名解析中,一个域名只能对应一个IP地址,但是一个IP地址可以对应多个域名。
用于解析域名的协议域名解析协议,也就是DNS协议。

域名解析的过程

1、在浏览器中输入域名,系统会先检查自己本地的主机文件是否有这个地址映射关系,如果有就先调用这个IP地址映射,完成当前域名的解析。
2、如果主机里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3,如果主机与本地DNS解析器缓存都没有相应的网址映射关系,首先会在TCP/IP参数中设置首选的DNS服务器,在我们叫它本地DNS服务器,这个服务器收到查询时,如果要查询的域名,在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4,如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射完成域名解析此解析不具有权威性。
5,如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)谁来授权管理,并会返回一个重点该场所市场服务器的一个IP。本地DNS服务器收到IP信息后,将联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,就会找一个管理.com域的下一级DNS服务器地址(***.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找**.com域服务器,重复上面的动作,进行查询,直到找到www.***.com主机。


6、如果用议论模式,此DNS服务器会把请求转发至上一级DNS服务器,由上一级服务器进行,上一级服务器如果无法解析,或找根DNS或把转请求转至上级,继续循环。不管是本地DNS服务器用的是评论,还是根提示,最终结果返回给本地DNS服务器,抓住DNS服务器再返回给把。

CNAME解析

在DNS协议中,存在多种记录类型,比如最常见的记录是把某个主机名解析到服务器的IP;NS记录:域名服务器记录,如果需要把子放在其他DNS服务器解析商,就需要添加NS记录;CNAME记录:是主机名到主机名的映射      对方你拥有a'a'a.com和bbb.com,你想对aaa.com的访问权限到bbb.com,就可以通过C记录,当访问aaa.com时,会解析到bbb.com,然后通过A记录,解析到bbb.com的IP地址。

子域名劫持漏洞成因

子域名劫持的前提解析就是使用CNAME,某些时候提供的服务会在提供服务的服务,例如在Shopify上申请了服务,它给你了test.shopify.com作为你的服务的地址,但是你有自己的域名了,希望已经有其他人通过你的域名来访问自己注册的服务,然后就可以在aa.com 上通上自己的 CNAME 记录来实现,添加了一个商店。 aaa.com的子域,类型为CNAME,类型记录为test用户访问shop.aa.com会解析到shop.testify.com。


如果开通的服务了,或者是关闭了服务,而不是在域名上删除自己的CNAME记录,指甲攻击者申请一个test.shopify.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


一次成功的子域劫持

主机命令

主机命令是常用的分析域名查询工具,是一个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.

挖掘命令

挖掘命令是解决
单个主机的信息挖掘命令默认的输出信息丰富,大概可以分为 5 个部分。

  1. dig 命令的版本和输入的参数。

  2. 服务返回的一些技术详情,比较重要的是状态。如果状态的值为NOERROR,则说明本次查询成功结束。

  3. “QUESTION SECTION”显示我们要查询的域名。

  4. “ANSWER SECTION”是查询到的结果。

  5. 本次查询的一些统计信息,比如用了很多时间,有哪些DNS服务器,在什么时间进行的查询等等。

一次成功的子域劫持


默认情况下挖掘命令只查询一张记录,可以在下面添加类型来特定的查询

$ 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

挖掘命令可以设置使用特定的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

上面的三个命令是域名信息的唯一命令,子域名劫持漏洞的渗透工具很多都有这三个命令。

子域名劫持思路

想要发现子域名解析漏洞,首先需要搜索目标的子域名,并且可以关注这些子域名的变化,收集子域名的方式可以很多,也可以有很多优秀的工具进行查询,例如可以全部、层子域名解析机、Subdomain3、Sublist3r等,还有一些其他的方法来进行收集,例如在之前的文章介绍。收集完成子域名后,有两种方式来这些子域名是否存在子域名劫持漏洞,一种思路是访问这些域名,根据网页内容进行判断。页面内容时如下,可能存在github子域名劫持。


一次成功的子域劫持


对于可能存在子域名劫持的页面,这里有项目已经完成整理和收集,can-i- takeover -xyz对许多可能存在子域名劫持的页面进行了整理,有其都知道以及相关的文章。



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


钻孔工具

子404

Sub 404是一个使用python写的工具,利用一些小批量检查子劫持漏洞。有时会批量查询目标URL的状态,通过404页面的来判断是否有子域劫持漏洞,另外,它可以通过获取CNAME 来进行检测,这个工具使用的前提是已经安装了 sublist3r 和 subfinder。如果不想再安装这工具,可以使用 docker 来运行 sub404。

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 如果未安装子查找器,请提供子域文件的位置以检查接管。 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来表示,首先在资产收集的过程中,就收集了一些域名,这里就用了一些比较常见的工具,比如综合、层子域名缩小机,获取了大量子域名之后再考虑进行一些域名抢占漏洞,这里就在子子了一些工具测试,其中就有了上面介绍的两个工具,工具测试后发现了一个提示有漏洞的子域,这里就叫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的账号,这个网站提供的服务是收费的,先注册可以试用几天。这里创建的域名是test.myshopify.com,这个可以定义自己页面的内容,我只写了一点可以验证的内容,写好后修改页面的信息,将其连接到hacker.xxxxxx.com


一次成功的子域劫持


这里就将先发现有漏洞的域名查询,它会验证是否可以与该域名连接,验证的方式就是该域名是否具有shops.myshopify.com的cname查询。


一次成功的子域劫持


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


一次成功的子域劫持


总结

本文从领域解析的过程和子域劫持漏洞产生的原因来概括的介绍一些漏洞原理,还可以通过工具的介绍和抽象思路的介绍来展示的重点该漏洞的方式和 最终通过实例,来对一个漏洞的子域名的验证过程有详细介绍。 子域名劫持的方式还有很多种,甚至有对邮件内容进行劫持,但由于某些接触的,所以没有可以多的介绍。

一次成功的子域劫持

本文始发于微信公众号(疯猫网络):一次成功的子域劫持

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月31日00:51:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次成功的子域劫持https://cn-sec.com/archives/503400.html

发表评论

匿名网友 填写信息