工具开发 | 子域名爆破的泛解析问题

admin 2023年7月2日23:53:15评论19 views字数 2824阅读9分24秒阅读模式

声明:本人坚决反对利用文章内容进行恶意攻击行为,一切错误行为必将受到惩罚,绿色网络需要靠我们共同维护,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。


一、什么是域名泛解析

  域名泛化解析是指:利用通配符* (星号)来做次级域名以实现所有的次级域名均指向同一IP地址。在域名前添加任何子域名,均可访问到所指向的IP地址。例如:
(1)常规域名解析
www.wolke.cn   10.10.10.10
(2)域名泛解析
*.wolke.cn     10.10.10.10
访问子域名a.wolke.cn,b.wolke.cn等均指向10.10.10.10

二、为什么要解决子域名泛化问题

在子域名解析中,每个子域名都会解析为一个特定的IP地址。只有被设置解析,用户才能正常进行访问。一旦用户输入错误的子域名,就会造成无法访问。在网站运营中,域名持有者为了避免因为错误输入,而造成用户流失,就会使用泛域名解析。泛域名解析是一种特殊的域名解析方式。它使用通配符形式,设置域名解析。它可以将没有明确设置的子域名一律解析到一个IP地址上。这样,即使用户输入错误的子域名,也可以访问到域名持有者指定的IP地址。

在信息收集中,这会造成请求的所有子域名都能访问的假象,从而收集到一堆无效的子域名。这为我们去做子域名爆破带来了极大的不便,以前子域名爆破常用的是layer子域名挖掘机。不过layer子域名挖掘机在跑具有泛解析的站的时候,就不是那么适用。

三、域名泛解析对抗

工具开发 | 子域名爆破的泛解析问题

这里以淘宝和百度为例子:ping一个绝对随机不可能存在的域名,它解析了,那么说明它大概率使用了泛解析
(1)淘宝可能存在域名泛解析👇

工具开发 | 子域名爆破的泛解析问题

(2)百度可能不存在域名泛解析👇

工具开发 | 子域名爆破的泛解析问题

针对百度,我们可以直接使用layer子域名挖掘机等子域名爆破工具,而针对淘宝的资产,我们不能使用layer子域名挖掘机等常规工具

1、判断是否使用了泛解析,五次完全随机的域名前缀A记录解析

import asyncioimport aiodnsimport random
loop = asyncio.get_event_loop()resolver = aiodns.DNSResolver(loop=loop)
async def query(name, query_type): return await resolver.query(name, query_type)
def random_to_A(main_domain): total = [] # 随机循环五次 for i in range(5): sub_domain = "".join(random.sample('abcdefghijklmnopqrstuvwxyz', random.randint(8, 12))) res = query(sub_domain + "." + main_domain, 'A') result = loop.run_until_complete(res) total.append(result) return total
if __name__ == '__main__': main_domain = input("Please input the main_doamin: ")    print(str(random_to_A(main_domain)).replace("],", "],n"))

  五次完全A记录解析成功,认为存在泛解析,如果不存在泛解析问题,就常规子域名收集一把梭,如果检测出泛解析,就使用破泛解析的子域名爆破工具。

工具开发 | 子域名爆破的泛解析问题

2、CNAME查询黑名单,维护特定厂商CNAME列表

  CNAME查询几个不存在的淘宝域名,也是一样的思路,循环多次不存在的域名,如果访问不存在的域名,CNAME为shop.taobao.com

工具开发 | 子域名爆破的泛解析问题

3、A记录查询命中次数,如果A记录查询,命中相同ip>10,后续的爆破A记录解析的域名就不展示记录

工具开发 | 子域名爆破的泛解析问题

四、脚本源码

import asyncioimport aiodnsimport randomimport optparse
loop = asyncio.get_event_loop()resolver = aiodns.DNSResolver(loop=loop)
async def query(name, query_type): return await resolver.query(name, query_type)
def random_to_A(main_domain): total = [] # 随机循环五次 for i in range(5): sub_domain = "".join(random.sample('abcdefghijklmnopqrstuvwxyz', random.randint(8, 12))) res = query(sub_domain + "." + main_domain, 'A') result = loop.run_until_complete(res) total.append(result) return total
def random_to_cname(sub_domain): res = query(sub_domain, 'CNAME') result = loop.run_until_complete(res) return result
if __name__ == '__main__': parser = optparse.OptionParser("%prog " + "[options] [domain]") parser.add_option('-a', action="store", dest='main_domain', type='string', help='') parser.add_option('-c', action="store", dest='sub_domain', type='string', help='') (options, args) = parser.parse_args() main_domain = options.main_domain sub_domain = options.sub_domain if main_domain: print(str(random_to_A(main_domain)).replace("],", "],n")) elif sub_domain:        print(str(random_to_cname(sub_domain)).replace("<", "n<"))

原文链接:

https://blog.csdn.net/m0_51468027/article/details/128004275


-END-

▎经典文章精选

渗透测试 | 攻击面信息收集
环境搭建 | CTFd动态靶机搭建笔记
权限提升 | suid提权及修复方式
近源渗透 | 使用Aircrack-ng破解wifi密码
神兵利器 | 自动化钉钉推送主机端口信息!


工具开发 | 子域名爆破的泛解析问题

扫描下方 二维码 加入我们吧!

工具开发 | 子域名爆破的泛解析问题

原文始发于微信公众号(betasec):工具开发 | 子域名爆破的泛解析问题

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月2日23:53:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   工具开发 | 子域名爆破的泛解析问题https://cn-sec.com/archives/1849753.html

发表评论

匿名网友 填写信息