toxy4ny/cortisol
GitHub: toxy4ny/cortisol
通过多重 URL 编码和规范化变体技术,系统性探测 WAF 与后端解码逻辑的不一致,帮助红队发现潜在绕过。
Stars: 16 | Forks: 2
# 🧪 cortisol — WAF 绕过与规范化压力测试工具(适用于红队)
`cortisol` 是一款轻量级的攻击性安全 CLI 工,旨在通过利用 URL 规范化逻辑中的不一致性,对 **Web 应用防火墙 (WAF)** 进行**压力测试**。它可帮助红队和渗透测试人员识别针对 **SQLi、XSS、SSRF 和路径遍历** 等常见防护措施的潜在绕过方法——尤其是当 WAF 仅对 payload 进行**单次解码**,而后端对其进行**多次解码**时。
灵感来源于真实的 Bug Bounty 发现,例如:
```
/api/v1/%2e%2e/%2e%2e/config?id=1%252bUNION%252bSELECT%252bsecrets--
```
`cortisol` 自动生成并测试**多重编码的 payload**,以检测 WAF 与应用程序响应之间的行为差异。
## 🔍 工作原理:规范化绕过理论
许多 WAF 在执行**单次 URL 解码步骤后**应用安全规则,而 Web 服务器(例如 Apache、Nginx、Tomcat)在将请求传递给应用程序之前可能会进行**多次解码**。
这种不匹配创造了一个机会:
| 编码级别 | WAF 视图 | 后端解码为 | 结果 |
|----------------|-------------------------|--------------------------|----------------------------|
| 原始 | `'` | `'` | 已拦截(如果 WAF 处于活动状态) |
| 单次 (%27) | `%27` | `'` | 通常被拦截 |
| **双重 (%2527)** | `%2527` → `%27` | `%27` → `'` | ✅ **可能绕过 WAF!** |
常见的绕过技术包括:
- 双重/三重 URL 编码 (`%252f` → `/`)
- 大小写混合 (`%2f` vs `%2F`)
- 路径混淆 (`..%2f`, `....//`, `%2e%2e/`)
- UTF-8 超长序列 (例如,`%c0%af`)
`cortisol` 会对这些变体进行系统性测试,并突出显示与良性基线**存在差异**的响应,从而指示潜在的绕过可能。
## 🚀 特性
- 🔍 **自动 WAF 检测** — 通过 HTTP 标头识别 Cloudflare、AWS WAF、Sucuri、Imperva、ModSecurity、Akamai 等。
- 🧬 **多重编码 Payload** — 针对每个向量的原始、单次、双重和三重 URL 编码。
- 📊 **智能差异分析** — 将状态码和响应大小与干净请求进行比较。
- 🎯 **攻击模板** — 内置的 payload 适用于:
- SQL 注入 (`sqli`)
- 本地文件包含 (`lfi`)
- 服务端请求伪造 (`ssrf`)
- 跨站脚本攻击 (`xss`)
- 🖥️ **精美的 CLI** — ASCII 标题横幅 + 通过 `rich` 实现的彩色输出。
- 📁 **JSONL 日志记录** — 机器可读的结果,便于与 SIEM 或自定义 pipeline 集成。
## ⚠️ 仅限道德使用
此工具默认以**实验模式**运行(无授权确认检查),专为受控环境设计,例如:
- 内部红队演练
- CTF 和训练实验室(例如,`testfire.net`)
- **已签署范围协议**的客户项目
## 🛠️ 安装
```
git clone https://github.com/toxy4ny/cortisol.git
cd cortisol
pip install -r requirements.txt
```
或者直接安装:
```
pip install requests click rich
```
## ▶️ 使用示例
### 基本 XSS 测试
```
python3 cortisol.py -t https://target.com/search -p q -a xss
```
### 带输出日志的 SQLi Fuzzing
```
python3 cortisol.py \
--target https://api.client.local/user \
--param id \
--attack sqli \
--output ./logs/cortisol-sqli-20251225.jsonl
```
### 详细模式(显示完整 URL)
```
python3 cortisol.py -t https://testfire.net/index.jsp -p content -a xss -v
```
## 📤 输出示例
```
WAF Bypass & Normalization Stress Tester
Lab Mode — Use only in authorized environments
Target: https://testfire.net/index.jsp
Param: content
Attack: XSS
🔍 Probing for WAF...
🛡️ Detected WAF: Unknown or No WAF Detected
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━┳━━━━━━┳━━━━━━━┓
┃ Vector ┃ Encoding ┃ Status ┃ Size ┃ Diff? ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━╇━━━━━━╇━━━━━━━┩
│