caarlosousa/tcc-waf-bypass
GitHub: caarlosousa/tcc-waf-bypass
该项目是一个学术实验仓库,专注于通过请求体检查限制绕过AWS WAF和ModSecurity,用于对比分析WAF防护效果。
Stars: 0 | Forks: 0
# 🛡️ TCC:通过WAF检查限制耗尽进行实战评估
本代码库用于存储为毕业论文开发的实践项目(漏洞应用与自动化*脚本*)。该项目聚焦于**AWS WAF**与**ModSecurity**的对比分析,重点探索请求体检查限制(*Body Inspection Limit*)。
⚠️ **注意:** 本代码库所有*脚本*与技术文档仅用于学术与教育目的。所有测试均在作者拥有的受控实验室环境中进行。
## 📂 项目结构
代码库按逻辑分为目标应用与自动化攻击向量两部分:
```
TCC-WAF-BYPASS/
├── app-vulneravel/
│ ├── index.php # Página principal da aplicação
│ └── sqli-login.php # Aplicação PHP intencionalmente vulnerável a SQLi
└── scripts-ataque/
├── alteracao_logica/ # Testes de linha de base (Baseline)
│ ├── ataque 1-1.py # Bypass de autenticação clássico (OR '1'='1)
│ ├── ataque 1-2.py # Ofuscação com comentários SQL (/*...*/)
│ └── ataque 1-3.py # Uso de operadores alternativos (XOR)
├── blind_SQL/
│ └── ataque_time_based.py # Injeção baseada em tempo (SLEEP)
└── OWASP/ # Ataques avançados utilizando Bypass Volumétrico (8KB)
├── ataque_boolean_blind.py # Inferência booleana (SUBSTRING)
├── ataque_error_based.py # Exfiltração via erro XML (ExtractValue)
└── ataque_union.py # Fabricação de registros (UNION SELECT)
```
## ⚙️ 核心技术:*请求体检查限制绕过*
`OWASP`文件夹内攻击的基本原理是利用云端WAF的架构特性(*Fail Open*)。AWS的应用负载均衡器(ALB)等边缘服务对POST请求体前**8,192字节(8 KB)**有严格的检查限制。
为规避检测规则,Python*脚本*实现了**载荷填充**技术:
1. 生成包含8,192个无害字符的参数(如:`垃圾数据 = "A" * 8192`)
2. 将恶意*载荷*紧接在此数据块之后
3. WAF仅检查前8KB内容,未发现威胁即放行请求
4. PHP解释器处理完整载荷,MariaDB执行注入操作
## 🔬 攻击逻辑分解(PoC)
以下详述各*载荷*与MariaDB/MySQL数据库的交互机制。
### 📁 模块:`OWASP`(体积逃逸型攻击)
#### 1. 联合查询SQL注入 (`ataque_union.py`)
* **载荷:** `' UNION SELECT 1, 2, 3 -- `
* **原理:** 目标应用执行逻辑判断`if ($result->num_rows > 0)`。由于不存在空用户,原始查询返回空结果集。`UNION`操作符将我们的第二条查询结果(`SELECT 1, 2, 3`)附加到结果集。数据库返回该构造行,满足PHP条件并授权访问。
#### 2. 报错型SQL注入 (`ataque_error_based.py`)
* **载荷:** `' AND ExtractValue(1, concat(0x3a, @@version)) -- `
* **原理:** 利用XML处理函数`ExtractValue()`。`concat()`函数连接十六进制字符`0x3a`(代表":")与全局变量`@@version`。由于XPath语法不允许表达式以":"开头,MariaDB生成包含系统版本的致命错误:`XPATH语法错误: ':10.11.13-MariaDB'`。该信息通过服务器日志泄露。
#### 3. 布尔型盲注SQL注入 (`ataque_boolean_blind.py`)
* **载荷:** `' OR (SUBSTRING(@@version, 1, 1) = '1') -- `
* **原理:** 攻击者向数据库发送条件查询。`SUBSTRING`函数提取数据库版本首字符并验证是否等于'1'。查询变为`FALSE OR TRUE`,强制触发*登录*。通过迭代此过程,可通过页面行为(成功/失败)推断式提取整个数据库。
### 📁 模块:`blind_SQL`
#### 时间型盲注SQL注入 (`ataque_time_based.py`)
* **载荷:** `' OR SLEEP(5) -- `
* **原理:** 当查询首个条件失败(用户不存在)时,数据库因`OR`运算符必须评估第二个表达式。`SLEEP(5)`函数使数据库管理系统执行*线程*暂停整整5秒。攻击成功与否通过HTTP请求的往返时间(RTT)衡量。
标签:逆向工具