dns泛解析及代码测试

news/2024/7/19 11:11:33 标签: 运维, 爬虫

0x00 前言


在自己的扫描器开发过程中,扫描器当中自然包括了子域名收集功能,但在遇到泛解析的网站时,也增加了扫描器很多不必要的检测,导致效率和资源的浪费。本文中主要针对扫描器遇到的问题进行解决并优化。

泛域名解析介绍 https://baike.baidu.com/item/%E6%B3%9B%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/9845966?fr=aladdin

0x01 问题产生


泛解析的功能为厂商提供了便利,但为自动化扫描带来了麻烦,什么麻烦呢?这里以一个使用了泛解析的厂商作为演示
dns泛解析及代码测试
由于该网站使用了泛解析,导致原本不存在的子域名也会成功被解析,那么其实访问这个域名,会重定向到主页

dns泛解析及代码测试

那么在自动化扫描中,通常我们会使用到一个字典组合域名的方式,然后进行dns解析,如果成功解析说明子域名存在,利用这种方式来进行子域名穷举,但使用泛解析的话,则会导致所有的域名都能成功解析,使得子域名穷举变得不精准。

dns泛解析及代码测试

ps:只是一个泛解析测试

0x02 解决方法


那么怎么去判断域名使用了泛解析和如何解决扫描器中遇到这种情况呢?

  • 泛解析的域名会自动匹配所有*.域名的解析,利用这点我们可以故意去解析一个根本不可能存在的域名,如果能成功解析代表使用泛解析,否之未采用
    dns泛解析及代码测试

    dns泛解析及代码测试

  • 扫描器解决思路也同上点,附上演示过程,(具体代码最后贴)
    dns泛解析及代码测试
    dns泛解析及代码测试
    上图中可以看到,如果能成功解析不存在的域名则使用泛解析,那么socket.getaddrinfo也不会抛出异常
    那么改进后的检测代码为
import socket
import sys
def dns_resolve(domain):
    url = 'abc1q2w3e4r5t.' + domain
    flag = False
    #抛出异常说明使用了泛解析
    try:
        socket.getaddrinfo(url, None)
        flag = True
    except:
        pass
    if not flag:
        print('[+] %s 未采用泛解析'%domain)
    else:
        print('[-] %s 采用泛解析'%domain)

if __name__ == '__main__':

    if len(sys.argv) < 2:
        print('python3 %s <domain>'%sys.argv[0])
        exit(1)

    dns_resolve(sys.argv[1])

dns泛解析及代码测试

0x03 tips


  1. 当域名使用了泛解析,那么放弃穷举的方式来获取子域名,可通过其他途径,类似爬虫或者搜索引擎来获取
  2. 如有错误,请斧正

转载于:https://blog.51cto.com/z2ppp/2082187


http://www.niftyadmin.cn/n/1774988.html

相关文章

文档预览功能使用技巧(3)---文字水印

一、导语 智能媒体管理 提供了文档预览功能&#xff0c;通过 快速搭建 文章的介绍&#xff0c;详细描述了使用 “文档转换 JS 前端渲染引擎” 实现文档预览的过程&#xff0c;本文将介绍预览功能中的 文字水印&#xff08;wmType1 和 wmValue水印文字 参数&#xff09; 技巧。…

浮动产生的高度坍塌解决方法以及使用siblings()方法获取同级元素

高度坍塌&#xff1a;如果一个没有设置高度div里的元素都是浮动元素&#xff0c;这个时候就可能产生高度坍塌&#xff0c;因为div的高度都是普通元素撑起来的&#xff0c;div里的元素浮动之后&#xff0c;元素就会脱离文档流&#xff0c;所以父级的div高度就可能为零&#xff0…

angular6 组件间的交流方式(1)--@Output 和@Input

为什么80%的码农都做不了架构师&#xff1f;>>> 总的来说&#xff0c;Input 用来进行属性绑定&#xff0c;将父组件的属性传给子组件,即有数据传进组件&#xff1b;Output 用来在事件绑定时&#xff0c;子组件将事件传给父组件进行处理&#xff0c;既有数据传出组件…

一个可变布局列表,有9种布局item大小,每个item可拖拽切换位置

代码地址如下&#xff1a;http://www.demodashi.com/demo/11271.html 一、准备工作 准备一台安卓设备手机&#xff0c;4.4以上版本本例子实现&#xff0c;一个可变布局列表&#xff0c;有9种布局item大小&#xff0c;每个item可拖拽切换位置二、程序实现 项目结构截图主界面列表…

Android手写状态切换布局

实现状态切换布局 image效果图 image原理 继承RelativeLayout&#xff0c;然后向其中添加各种状态的View&#xff0c;通过对各种View的显示隐藏的切换来实现各种状态的切换。 实现过程 1.继承RelativeLayout&#xff0c;这里通过构造方法之间的调用来简化实例化需要写的代码 pu…

linux服务器性能调优

本文转载自https://www.cnblogs.com/ace-lee/p/6628079.html一 linux服务器性能查看1.1 cpu性能查看1、查看物理cpu个数&#xff1a; cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l2、查看每个物理cpu中的core个数&#xff1a; cat /proc/cpuinfo |grep &q…

聊一聊 Django 中间件

Django默认的Middleware有七个&#xff1a; MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,django.middleware.csrf.CsrfViewMiddleware,django.contrib.auth…

sylixos定时器使用

1. 适用范围 本文档介绍SylixOS下实现定时器功能的方法&#xff0c;使用者应熟悉SylixOS以及SylixOS下的编程规范。2. 实现方案 SylixOS提供标准定时器接口&#xff0c;用户可在应用层直接调用&#xff0c;下面列出定时器的创建、启动、停止以及删除等操作&#xff0c;除…