我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

1. 背景

在开始渗透一个网站之前,你需要知道这个网站的网络资产:域名、IP等。IP和域名有直接的解析关系,所以如何找到该网站的所有子域名是关键。

2.实现思路

如果你知道网站主域名,可以按照以下方式收集域名。

2.1. 搜索引擎

使用百度等搜索引擎,可以用site关键字查询所有包含该域名的记录,权重高的子域名会排在前面。

举例来说,您可以通过搜索 site: 来获取包含的子域名。

缺点:界面性质的子域名不会被搜索引擎收录,而且可能会有遗漏

HTTPS 证书透明度

透明度报告中的证书透明度项目()是为了解决HTTPS证书体系的结构性缺陷,允许大家查询各个网站的HTTPS证书信息,从而找到颁发证书的子域名,证书透明度结果(:true;:true;:&lu=)

缺点:仅签署根域名证书存在疏漏

2.3. 自我披露

搜索:o=desc&q=%%22&s=&type=Code&utf8=✓

DNS 域名转移:dig@8.8.8.8 axfr

.xml文件:

缺点:不完整,有遗漏

2.4. DNS 查询

域名的存在是为了避免人们去记住 IP 地址,所以域名和 IP 地址是一一对应的。所以可以收集一个常用域名的字典,去 DNS 服务商查询是否有解析记录,枚举子域名。比如可以用 dig 命令查看二级域名的 DNS 解析记录()。

$ dig papers.feei.cn
; <<>> DiG 9.9.7-P3 <<>> papers.feei.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45877 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;papers.feei.cn. IN A ;; ANSWER SECTION: papers.feei.cn.    599 IN  CNAME  feeicn.github.io. feeicn.github.io.  3599 IN  CNAME  sni.github.map.fastly.net. sni.github.map.fastly.net. 29 IN  A  151.101.77.147 ;; Query time: 146 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Fri Mar 02 17:28:15 CST 2018 ;; MSG SIZE  rcvd: 128

缺点:速度慢,假阴性量少

3.最佳实践

每种方式都有漏报的可能,结合多种方式查询结果才能最全面。我们重点讲第四种方式,通过DNS查询枚举子域名。通过DNS枚举需要解决两个问题:字典和速度。

3.1. 词典

DNS服务提供商:从子域名到子域名

DNS 服务提供商的词典是最准确和有效的。首先找到最常用的子域名的已发布列表:--sub-.txt()

通用词典

一些基本的组合词典在大小和命中率之间做出权衡。

常用短语

一些最常见的中文和英文短语。

类似爆破工具词典

类似的工具各自收集和组织自己独特的词典,并将它们全部组合在一起。

3.2. 速度

使用常见的多进程,多线程等不能发挥最大作用,使用()+()可以发挥最大速度,简单例子:

import asyncio

import aiodns

loop = asyncio.get_event_loop()

resolver = aiodns.DNSResolver(loop=loop)

f = resolver.query('google.com','A')

result = loop.run_until_complete(f)

print(result)

实施过程

加载词典

协程批量查询

结果

字典生成

最多可并行运行 10,000 个协程

通过扫描,一共查到了规则,1913个域名,耗时大概100-160秒,平均每秒1000-1500条规则。后续又引入了多个进程,充分利用带宽。

4. 问题

域名通用解析问题

通过DNS查询枚举子域名遇到的最大问题就是域名泛解析的问题,域名泛解析是厂商为了方便维护解析记录,将所有域名情况解析到同一台服务器的一种做法。

比如你在域名服务商上将*.的A记录配置为103.21.141.30,那么无论你访问//,都会被解析到103.21.141.30,而这台服务器上的NGINX会区分出域名和对应的后端应用。

因此在使用字典对一个泛解析域名的子域名进行爆破时,无论该域名是否真实存在,都会有解析结果。

目前最好的方案是先获取绝对不存在的域名的响应内容,再遍历获取各个字典对应的子域名的响应内容,通过与不存在域名内容的相似度对比来枚举子域名,但这种实现方式是以牺牲速度为代价的,后续计划会将其作为可选方案。

5. 应对措施

虽然子域名本身是公共网络资产,但是作为甲方,我们必须思考如何具体增加收集子域名的难度。

使用 pan-parse

爆破泛解析的难点在于枚举子域名,而泛解析的出现则是为了方便业务快速管理子域名。在这种情况下,企业使用泛解析的优点大于缺点。例如,在上线新子域名时,无需等待域名同步时间,部分不存在的域名可以显示404页面,内部子域名统计也更加方便。

人类和机器识别

使用pan-parse方法只是增加了时间成本,如果是针对性攻击,攻击者不在乎时间成本或者采用分布式方法,那么甲方就需要为机器程序解决人机识别和页面相似度混淆问题。

6. 最后的想法

作为渗透测试中最基本的前提条件,枚举子域时要做的事情实在是太多了,只有覆盖到所有点,才能得到最接近真实全量的子域。项目名为ESD,最终实现已经开源到(),欢迎大家参与维护。

@Feei 博客链接:枚举子域名

二维码
扫一扫在手机端查看

本文链接:https://by928.com/2285.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线