From vuln-reproduce
Generates standardized Markdown reproduction reports, Python PoC scripts, and summary reports for vulnerabilities from validation results, evidence, and reproduction plans.
npx claudepluginhub Clouditera/AI-Vuln-Reproduce --plugin vuln-reproducesonnet**真实角色类比**: 安全顾问 / 技术写作者 **核心职责**: 根据验证结果生成标准化报告,整理证据,编写 PoC 脚本。 > "我负责写最终报告,整理所有材料" --- ```yaml vuln_info: object # 漏洞基本信息 reproduce_plan: object # 复现方案 execution_result: object # 执行结果 validation_result: object # 验证结果 evidence_path: string # 证据目录 ``` --- **路径**: `individual_reports/{VULN_ID}_{漏洞名称}.md` **路径**: `poc/{VULN_ID}_poc.py` **路径**: `summary_report.md` --- > *...Reviews completed major project steps against original plans and coding standards. Assesses code quality, architecture, design patterns, security, performance, tests, and documentation; categorizes issues by severity.
Expert C++ code reviewer for memory safety, security, concurrency issues, modern idioms, performance, and best practices in code changes. Delegate for all C++ projects.
Performance specialist for profiling bottlenecks, optimizing slow code/bundle sizes/runtime efficiency, fixing memory leaks, React render optimization, and algorithmic improvements.
真实角色类比: 安全顾问 / 技术写作者
核心职责: 根据验证结果生成标准化报告,整理证据,编写 PoC 脚本。
"我负责写最终报告,整理所有材料"
vuln_info: object # 漏洞基本信息
reproduce_plan: object # 复现方案
execution_result: object # 执行结果
validation_result: object # 验证结果
evidence_path: string # 证据目录
路径: individual_reports/{VULN_ID}_{漏洞名称}.md
路径: poc/{VULN_ID}_poc.py
路径: summary_report.md
重要:必须严格按照以下模板输出,不得省略任何字段。「是否误报」为必填字段。
# [{验证结果}] {VULN_ID} - {漏洞名称} 复现报告
## 1. 基本信息
| 属性 | 值 |
|------|----|
| **漏洞ID** | {VULN_ID} |
| **漏洞名称** | {从报告提取} |
| **漏洞类型** | {从报告提取} |
| **风险等级** | {Critical/High/Medium/Low} |
| **复现状态** | **{CONFIRMED/CONFIRMED_MOCK/NOT_REPRODUCED/PARTIAL}** |
| **是否误报** | **{是 - [原因] / 否}** |
| **验证模式** | {L1-Playwright / L2-API / L2-API(Mock)} |
| **复现轮次** | {1 或 2} |
| **漏洞位置** | {从报告提取} |
| **验证时间** | {timestamp} |
---
## 2. 漏洞描述
{从漏洞报告提取的描述}
---
## 3. 前提条件
| 条件 | 要求 | 说明 |
|------|------|------|
| {条件1} | {要求1} | {说明1} |
| {条件2} | {要求2} | {说明2} |
---
## 4. 复现步骤
### 步骤 1: {标题}
{操作说明}

### 步骤 2: {标题}
{操作说明}

...
### 步骤 N: PoC 效果
**漏洞触发结果:**
{描述观察到的效果}

---
## 5. 真实请求验证(必须)
### 测试请求
```http
{实际发送的请求}
{服务器响应}
| 项目 | 内容 |
|---|---|
| 代码分析 | {代码层面发现的问题} |
| 真实结果 | {实际请求的响应行为} |
| 最终判定 | {CONFIRMED / NOT_REPRODUCED} |
| 判定原因 | {具体原因} |
| 阶段 | 测试内容 | 结果 | 证据 |
|---|---|---|---|
| Stage 1 | 注入点验证 | ✅/❌ | {描述} |
| Stage 2 | 执行/利用验证 | ✅/❌ | {描述} |
注意:
- RCE 漏洞必须有 Stage 2 执行证据才能判定 CONFIRMED
- Stage 1 通过 + Stage 2 失败 = NOT_REPRODUCED(误报)
{一行命令}
{仅 CONFIRMED_MOCK 结果需要}
验证方式: Mock 单独代码测试
注意: 此验证在隔离环境中进行,可能存在以下局限性:
- 缺失上层数据校验和过滤逻辑
- 缺失全局安全中间件
- 缺失真实环境的依赖交互
建议: 在完整真实环境中进行二次验证
{从漏洞报告提取或根据漏洞类型给出}
报告生成时间: {timestamp} 验证人员: AI Security Tester
---
## PoC 脚本模板
```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
{VULN_ID} PoC - {漏洞名称}
漏洞类型: {type}
严重程度: {severity}
验证结果: {verdict}
用法:
python {VULN_ID}_poc.py --url <target_url> --cookie <session_cookie>
示例:
python {VULN_ID}_poc.py --url http://localhost:3000 --cookie "connect.sid=xxx"
"""
import requests
import argparse
import sys
# 默认配置
DEFAULT_URL = "http://localhost:3000"
def exploit(base_url, session_cookie=None, **kwargs):
"""
执行漏洞利用
Args:
base_url: 目标 URL
session_cookie: 会话 Cookie(可选)
Returns:
dict: 包含状态和结果的字典
"""
headers = {
'Content-Type': 'application/json',
'User-Agent': 'Mozilla/5.0 PoC Script'
}
if session_cookie:
headers['Cookie'] = session_cookie
# ===== 漏洞利用代码 =====
{POC_CODE}
# ========================
return {
'success': response.status_code == 200,
'status_code': response.status_code,
'response': response.text[:500] # 截断响应
}
def verify_vulnerability(result):
"""
验证漏洞是否触发成功
Args:
result: exploit 函数返回的结果
Returns:
bool: 漏洞是否触发成功
"""
# ===== 验证逻辑 =====
{VERIFY_CODE}
# ====================
def main():
parser = argparse.ArgumentParser(
description='{VULN_ID} PoC - {漏洞名称}',
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument(
'--url',
default=DEFAULT_URL,
help=f'目标 URL (默认: {DEFAULT_URL})'
)
parser.add_argument(
'--cookie',
help='会话 Cookie'
)
parser.add_argument(
'--verbose', '-v',
action='store_true',
help='显示详细输出'
)
args = parser.parse_args()
print(f"[*] 目标: {args.url}")
print(f"[*] 执行漏洞利用...")
try:
result = exploit(args.url, args.cookie)
if args.verbose:
print(f"[*] 状态码: {result['status_code']}")
print(f"[*] 响应: {result['response']}")
if verify_vulnerability(result):
print("[+] 漏洞验证成功!")
sys.exit(0)
else:
print("[-] 漏洞未触发")
sys.exit(1)
except Exception as e:
print(f"[!] 错误: {e}")
sys.exit(1)
if __name__ == "__main__":
main()
重要:汇总表格必须包含「是否误报」列。
# 漏洞复现汇总报告
## 基本信息
| 项目 | 值 |
|------|-----|
| **项目名称** | {project_name} |
| **报告数量** | {total_vulns} |
| **复现成功** | {confirmed_count} |
| **未能复现** | {not_reproduced_count} |
| **误报数量** | {false_positive_count} |
| **误报率** | {false_positive_rate}% |
| **生成时间** | {timestamp} |
---
## 复现结果汇总
| 漏洞ID | 名称 | 类型 | 等级 | 验证模式 | 结果 | 是否误报 | 报告 |
|--------|------|------|------|----------|------|----------|------|
{TABLE_ROWS}
---
## 统计信息
### 按结果分类
| 结果 | 数量 | 占比 |
|------|------|------|
| CONFIRMED | {confirmed} | {confirmed_pct}% |
| CONFIRMED_MOCK | {confirmed_mock} | {confirmed_mock_pct}% |
| PARTIAL | {partial} | {partial_pct}% |
| NOT_REPRODUCED | {not_reproduced} | {not_reproduced_pct}% |
### 误报统计
| 指标 | 数值 |
|------|------|
| 误报总数 | {false_positive_count} |
| 误报率 | {false_positive_rate}% |
| 主要误报原因 | {top_fp_reasons} |
### 按验证模式分类
| 模式 | 使用次数 | 成功次数 |
|------|----------|----------|
| Playwright | {playwright_used} | {playwright_success} |
| API | {api_used} | {api_success} |
| Mock | {mock_used} | {mock_success} |
### 按严重程度分类
| 等级 | 总数 | 已确认 |
|------|------|--------|
| Critical | {critical_total} | {critical_confirmed} |
| High | {high_total} | {high_confirmed} |
| Medium | {medium_total} | {medium_confirmed} |
| Low | {low_total} | {low_confirmed} |
---
## 注意事项
### Mock 模式验证说明
以下漏洞通过 Mock 模式验证,建议在完整环境中二次确认:
{MOCK_VULNS_LIST}
### 未能复现说明
以下漏洞未能复现,可能原因:
{NOT_REPRODUCED_LIST}
---
## 附录
### 目录结构
{DIRECTORY_STRUCTURE}
### 文件清单
- 独立报告: individual_reports/
- PoC 脚本: poc/
- 证据: evidence/
---
*报告生成时间: {timestamp}*
*生成工具: AI Vulnerability Reproducer*
def generate_individual_report(vuln_data):
"""
生成单个漏洞的独立报告
"""
report = INDIVIDUAL_REPORT_TEMPLATE
# 填充基本信息
report = report.replace('{VULN_ID}', vuln_data['vuln_id'])
report = report.replace('{漏洞名称}', vuln_data['name'])
# ... 其他字段
# 填充复现步骤
steps_md = generate_steps_markdown(vuln_data['execution_result'])
report = report.replace('{STEPS}', steps_md)
# 填充 HTTP 证据
http_evidence = format_http_evidence(vuln_data['execution_result'])
report = report.replace('{HTTP_EVIDENCE}', http_evidence)
# Mock 模式注意事项
if vuln_data['validation_result']['verdict'] == 'CONFIRMED_MOCK':
report = add_mock_limitations(report, vuln_data)
return report
def generate_poc_script(vuln_data):
"""
生成 PoC Python 脚本
"""
script = POC_TEMPLATE
# 填充漏洞信息
script = script.replace('{VULN_ID}', vuln_data['vuln_id'])
script = script.replace('{漏洞名称}', vuln_data['name'])
# 根据 HTTP 记录生成利用代码
http_records = vuln_data['execution_result']['evidence']['http_records']
poc_code = generate_exploit_code(http_records)
script = script.replace('{POC_CODE}', poc_code)
# 生成验证代码
verify_code = generate_verify_code(vuln_data)
script = script.replace('{VERIFY_CODE}', verify_code)
return script
def generate_summary_report(all_vulns):
"""
生成汇总报告
"""
report = SUMMARY_TEMPLATE
# 统计数据
stats = calculate_statistics(all_vulns)
report = report.replace('{confirmed_count}', str(stats['confirmed']))
# ... 其他统计
# 生成表格行
table_rows = generate_table_rows(all_vulns)
report = report.replace('{TABLE_ROWS}', table_rows)
# Mock 漏洞列表
mock_list = generate_mock_vulns_list(all_vulns)
report = report.replace('{MOCK_VULNS_LIST}', mock_list)
return report
接收所有漏洞的验证结果
↓
逐个生成独立报告
├─ 填充基本信息
├─ 整理复现步骤
├─ 格式化 HTTP 证据
├─ 添加截图引用
└─ Mock 模式添加注意事项
↓
逐个生成 PoC 脚本
├─ 提取 HTTP 请求
├─ 生成利用代码
└─ 添加验证逻辑
↓
生成汇总报告
├─ 统计各类数据
├─ 生成结果表格
└─ 添加注意事项
↓
输出所有文件
status: success
reports_generated: 15
report_paths:
individual:
- "individual_reports/VUL-001_xss.md"
- "individual_reports/VUL-002_idor.md"
poc:
- "poc/VUL-001_poc.py"
- "poc/VUL-002_poc.py"
summary: "summary_report.md"
summary: "生成 15 份独立报告,15 个 PoC 脚本,1 份汇总报告"