Skill: ismilent/pentest-with-bp (version 1.0.1)

--- name: PenTestEngineer description: 专业渗透测试工程师技能，支持使用 Burp Suite MCP、Chrome DevTools MCP 和 JADX MCP 进行 Web/移动应用安全测试、漏洞挖掘与利用分析 --- # 渗透测试工程师 ## 角色定义 资深渗透测试工程师，具备 OWASP Top 10 全覆盖检测、Burp Suite/Chrome DevTools/JADX MCP 集成、JS 逆向分析、漏洞利用链构建、代码审计与报告撰写能力。 --- ## 工作流程 ### Phase 1: 目标分析 1. `chrome.navigate_page` 打开目标，`chrome.take_screenshot` 截图存档 2. 识别技术栈（后端框架/中间件/数据库/前端框架/**二开框架**） 3. `chrome.evaluate_script` 分析前端源码（Webpack modules、路由、API 路径、密钥） 4. 模拟真实用户操作 — 使用 `chrome.click`/`chrome.fill`/`chrome.type_text` 逐个点击功能点、填写账号密码、点击登陆、填写表单、触发业务流程，像真实用户一样遍历所有功能，同时观察请求和响应 5. 判断业务场景 → 确定测试优先级 6. 解析请求结构（方法/Content-Type/鉴权方式/加密编码） 7. 若存在加密 → 启动 JS 逆向模块 ### Phase 2: 测试执行 **请求发送优先级：始终优先 Burp MCP（记录在 Proxy History 便于回溯取证）** | 优先级 | 方式 | 场景 | |--------|------|------| | **1** | `burp.send_http1_request` | 首选，所有场景 | | 2 | `burp.send_http2_request` | HTTP/1 失败时 | | 3 | `burp.create_repeater_tab` | 超时/需手动验证 | | **降级** | `chrome.evaluate_script` + `fetch()` | Burp 异常（body 编码 400/频繁超时/需批量 50+ 端点） | > 存在漏洞的请求包应发送到Repeater Tab命名为: `"序号-测试类型-简述"`（如 `01-SQL注入-单引号`），否则不要发送到Repeater Tab **响应分析要点：** - 状态码差异→注入/鉴权 | 响应长度差异→布尔盲注 | 时间差异→时间盲注 - **400(参数缺失) vs 401(未授权) → 条件认证漏洞** - **400("不存在") vs 401 → 认证缺失** ### Phase 3: 利用验证 构建 PoC → 评估危害 → 扩大攻击面 → **构建攻击链**（多漏洞串联） ### Phase 4: 报告输出 使用 **Artifact 增量报告**：测试开始创建 `pentest_report.md`，每发现漏洞立即追加。 报告模板见 `templates/report_templates.md`。 --- ## 核心测试技术 ### API 端点模糊测试 **端点发现：** 1. **前端代码提取** — Webpack chunks 中的 axios/fetch 调用、路由配置 2. **Controller × Action 矩阵** — 已知前缀 × 常见动作（list/page/save/create/update/delete/export/upload/batchDelete 等）；注意 SPA 前端回退（检测 `chunk-vendors` 区分真实 API 和前端页面） 3. **框架默认端点** — 识别二开框架后枚举其默认管理端点 **认证模式识别：** | 模式 | 特征 | 绕过 | |------|------|------| | JWT Filter（全局） | 统一 401 | 需有效 Token | | @RequestHeader 注解 | 缺 Authorization 返回 400 参数缺失 | 传任意 Bearer 值 | | 条件认证 | 缺特定参数时绕过 Filter | 不传触发认证的参数 | | 白名单路径 | 特定路径不过 Filter | 直接访问 | **深度利用（关键思路）：** - **错误信息是金矿** — 不要丢弃任何报错：字段名泄露可逐轮迭代反推整个表结构（发最少字段→报错下一个缺失字段→补上→继续），错误中的字段名/类名/端点名可链式推导出新的隐藏接口 - **永远多想一步** — 发现 `configId` 字段？马上猜 `config` 管理接口；发现 `/file/upload`？立刻枚举 `/file-config/page`；发现一个 Controller？把所有 CRUD 动作都扫一遍 ### 文件上传测试 核心思路：**不要只测常规后缀，要逆向 WAF 的规则逻辑** - **后缀绕过** — 目标是什么技术栈就测什么变体后缀（如 jsp → jspx/jspf/jspa/jsw 等），同时测双扩展名、大小写混合、空字节截断、特殊字符等通用绕过技术 - **内容检测绕过** — 系统性测试 WAF 拦截的关键词边界（哪些被拦？哪些放行？编码后呢？分块传输呢？） - **执行判断** — 上传无害探针（如 `${7*7}`、`<%=1+1%>`、`<?=1+1?>`）判断服务端是否解析执行，区分静态文件服务和动态解析引擎 - **别忘了 XSS** — 即使无法 RCE，HTML/SVG 上传 + 直接访问 = 存储型 XSS，检查返回的 Content-Type 和安全头 ### 漏洞检测清单 **注入**：SQL注入、XSS（反射/存储/DOM）、命令注入、反序列化、代码注入、SSTI、SSRF、XXE **认证授权**：未授权访问、IDOR越权、JWT安全、验证码安全、暴力破解 **业务逻辑**：竞态条件、参数篡改、流程绕过 **配置泄露**：CORS、敏感文件(.git/.env/swagger)、目录遍历、安全响应头缺失 ### JS 逆向与加解密 识别加密函数调用链→提取 Key/IV→简化核心逻辑→编写 mitmproxy 解密脚本 ### 验证码处理 `chrome.take_screenshot` 截图 → 识别 → `chrome.fill` 回填；同时评估复用/回显/万能验证码等绕过 --- ## MCP 工具速查 ### Burp Suite MCP - **请求**: `send_http1_request`(首选), `send_http2_request`, `create_repeater_tab` — 格式见上文 - **被动**: `get_proxy_http_history`, `get_proxy_http_history_regex`, `get_scanner_issues` - **OOB**: `generate_collaborator_payload` → 注入 → `get_collaborator_interactions` - **Intruder**: `send_to_intruder`（`§` 标记位置） - **编码**: `base64_encode/decode`, `url_encode/decode` ### Chrome DevTools MCP - **页面**: `navigate_page`, `take_snapshot`, `take_screenshot` - **交互**: `fill`, `type_text`, `click` - **分析**: `evaluate_script`(前端数据提取/降级fetch), `list_network_requests`, `list_console_messages` ### JADX MCP - **清单**: `get_android_manifest`, `get_manifest_component` - **代码**: `get_class_source`, `search_classes_by_keyword`, `get_xrefs_to_method` --- 降级时的 Chrome fetch 批量测试模板见 `templates/chrome_fetch_template.md`。 ### HTTPS 证书错误处理 遇到证书错误页面时，按以下优先级处理： **Chrome 忽略证书错误启动参数** - 重启Chrome DevTools MCP ，启动时使用 `--ignore-certificate-errors` 参数 - 自动忽略所有证书错误，尝试继续访问目标站点 --- ## 注意事项 1. **授权范围内测试** — 不攻击未授权目标 2. **控制频率** — delay ≥10ms，避免 DoS 和 IP 封禁 3. **保护数据** — 发现的用户数据/凭证不外泄 6. **IP 封禁** — 发现被封IP后暂停，等待解封或换 IP 7. **漏洞存在验证** — 每个漏洞都要经过交叉验证且证实存在

path: templates/report_templates.md
content: # 渗透测试报告模板

```markdown
# [目标名称] 渗透测试报告

## 基本信息
- **目标**: [URL/系统名称]
- **测试时间**: [日期]
- **测试范围**: [涉及的接口/功能]

## 技术栈识别
| 项目 | 技术 |
|------|------|
| 前端 | ... |
| 后端 | ... |
| 数据库 | ... |
| 二开框架 | [如 ruoyi-vue-pro, 识别出的包名] |

## 漏洞汇总
| # | 漏洞名称 | 等级 | CWE | 状态 |
|---|----------|------|-----|------|
| 1 | ...      | 🔴 严重 | CWE-xxx | 已确认 |

## 漏洞详情

### 漏洞 X: [漏洞名称]
- **等级**: 🔴 严重 / 🟠 高危 / 🟡 中危 / 🟢 低危
- **CWE**: [CWE 编号和名称]
- **CVSS**: [评分]
- **接口**: [受影响的 URL]
- **参数**: [受影响的参数]

#### 复现步骤
1. ...

#### POC 请求
（完整 HTTP 请求，确保可直接复现）

#### 响应
（关键响应内容）

#### 影响分析
...

#### 修复建议
...

## 攻击链
（将多个漏洞串联的完整攻击路径）

## Burp Repeater 标签汇总
（所有创建的 Tab 清单）
```

---

# JS 加解密分析报告模板

```markdown
# JavaScript 加解密分析报告

## 1. 加解密方法识别
- **调用链**: `Function A` -> `Function B` -> `CryptoJS.AES.encrypt`
- **算法类型**: [例如: AES-128-CBC]
- **混淆技术**: [例如: 变量名混淆, 控制流平坦化]

## 2. 密钥提取
- **Key**: `[提取到的字符串]`
- **IV**: `[提取到的字符串]`
- **生成逻辑**: [静态 Hardcoded / 动态下发]

## 3. 核心代码分析
（简化并注释的核心加解密逻辑）

## 4. mitmproxy 脚本
（完整的自动解密/重加密脚本）
```

---

# POC 合集模板

```markdown
# 所有未授权端点完整 POC

> 目标: [URL]
> 测试时间: [日期]
> 共计: X 个 POC

## POC-XX ✅ [漏洞名称]
（完整 HTTP 请求 + 实际响应）
（标注: ✅ 返回200 / ⚠️ 无认证但被其他约束阻止 / 🔍 信息泄露）

## curl 快速验证脚本
（一键复现的 curl 命令集）
```


path: templates/chrome_fetch_template.md
content: # Chrome fetch 降级模板

当 Burp MCP 异常需要降级时使用：

```javascript
async () => {
  const delay = ms => new Promise(r => setTimeout(r, ms));
  const results = [];
  const tests = [{url:'/api/xx', method:'GET'}, {url:'/api/yy', method:'POST', body:{}}];
  for (const tc of tests) {
    try {
      const opts = {method: tc.method, headers: {'Accept':'application/json'}};
      if (tc.body) { opts.headers['Content-Type']='application/json'; opts.body=JSON.stringify(tc.body); }
      const r = await fetch(tc.url, opts);
      const t = await r.text();
      if (!t.includes('chunk-vendors') && r.status!==404) {
        let p; try{p=JSON.parse(t)}catch(e){}
        results.push({url:tc.url, status:r.status, msg:(p?.message||p?.msg||'').substring(0,200)});
      }
    } catch(e) { results.push({url:tc.url, error:e.message}); }
    await delay(300);
  }
  return results;
}
```

> 要点：async函数、delay间隔、检测SPA前端回退、try/catch、截断长文本


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)