ctf联合注入 waf
时间: 2025-05-22 18:56:15 浏览: 32
### CTF比赛中绕过WAF进行联合注入的技术或技巧
在CTF竞赛中,绕过Web应用防火墙(WAF)并实现SQL联合注入是一项重要的技能。以下是几种常见且有效的技术与技巧:
#### 1. 双写绕过
某些WAF会简单匹配特定的关键字,例如`UNION`、`SELECT`等。通过重复这些关键字的一部分字符来规避检测是一种有效的方法。例如,将`UNION SELECT`替换为`UuNnIoOn SeElEcCtT`[^3]。
```sql
' UNION ALL SELECT NULL, version(), database() --
```
#### 2. 使用注释符分割关键词
利用SQL中的注释功能可以混淆WAF的规则引擎。例如,在关键字之间插入空白注释或者特殊字符组合,从而改变字符串的形式而不影响实际执行逻辑。
```sql
' UN/**/ION SE/**/LECT user(), @@version, schema()--
```
这种方法通常适用于过滤了连续字母形式的关键字的情况[^2]。
#### 3. 子查询绕过
当直接尝试联合查询被阻止时,可以考虑采用子查询的方式构造payload。这种方式能够隐藏原始意图,并可能避开部分基于签名的防御机制。
示例:
```sql
' OR (SELECT CASE WHEN EXISTS(SELECT * FROM information_schema.tables WHERE table_name='users') THEN SLEEP(5) ELSE 'false' END)--
```
上述例子展示了如何借助条件语句配合时间延迟函数验证目标数据库是否存在指定表结构[^5]。
#### 4. 修改请求头传输Payload
许多传统型WAF主要关注GET/POST参数层面的数据流分析,而忽略了HTTP头部字段的内容检查。因此,我们可以通过调整浏览器扩展工具如ModHeader来动态更改Request Headers内的数据项传递恶意载荷。
具体操作流程如下所示:
- 利用插件设置自定义Cookie携带payload;
- 或者是在Referer/User-Agent等其他非核心属性位置嵌入攻击向量[^4]。
#### 5. 替代同义词表达方式
对于一些严格限制标准语法使用的场景下,则可寻找相应的替代品完成相同效果的操作过程。比如把常用的聚合运算符换成其别名版本;或者是运用MySQL内置变量获取当前登录用户名等等[^1]。
```sql
' AND 1=(SELECT COUNT(*) FROM DUAL GROUP BY CONCAT_WS(',',@@hostname,FLOOR(RAND()*2)))--
```
---
### 注意事项
尽管以上列举了几种主流思路方向供参考学习之用,但在真实环境中还需结合实际情况灵活变通处理问题所在之处。同时也要注意合法合规前提下的实践演练活动开展!
阅读全文
相关推荐
















