子域名爆破的泛解析问题

  字节跳动——渗透测试实习生面试题:信息收集如何处理子域名爆破的泛解析问题?

一、什么是域名泛解析

  利用通配符* (星号)来做次级域名以实现所有的次级域名均指向同一IP地址。在域名前添加任何子域名,均可访问到所指向的IP地址。

常规域名解析
www.wolke.cn   10.10.10.10

域名泛解析
*.wolke.cn     10.10.10.10
访问子域名a.wolke.cn,b.wolke.cn等均指向10.10.10.10

  这为我们去做子域名爆破带来了极大的不便,以前子域名爆破常用的是layer子域名挖掘机。不过layer子域名挖掘机在跑具有泛解析的站的时候,就不是那么适用

二、域名泛解析对抗

img

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

  淘宝可能存在域名泛解析👇

1669041209348-c8088bf5-bba6-4560-88ca-4f11fc7d3110

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

1669041304697-185ced71-dd14-4cbb-90de-2189ad5195b7

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

1、判断是否使用了泛解析

  思路:五次完全随机的域名前缀A记录解析

import asyncio
import aiodns
import 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

img

3、A记录查询命中次数

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

image-20221123165746034

三、脚本源码

  附上自己编写的简单的泛解析识别脚本源码

import asyncio
import aiodns
import random
import 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<"))

image-20221123165729592

四、参考链接

  • https://www.cnblogs.com/piaomiaohongchen/p/15959042.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值