Acunetix/Invicti 漏洞扫描 JSON 报告一键生成 Word 文档工具
https://github.com/kabuqin/awvs_json_word.py.git
一、脚本简介
awvs_json_word.py 是一个将 Acunetix(AWVS)/ Invicti 扫描器导出的 JSON 结果文件,自动生成为中文 Word 安全漏洞报告的一体化工具。

脚本内置了数据解析、格式转换、中文化翻译、统计图表生成和报告排版等全部功能,只需一条命令即可完成从原始扫描数据到正式报告的全过程,无需任何人工干预。
主要功能
二、环境要求
安装依赖
pip install python-docx matplotlibWindows 用户注意:图表中文渲染依赖
SimHei(黑体)字体,Windows 系统默认自带(C:\Windows\Fonts\simhei.ttf)。若图表中文显示为方块,请清除 matplotlib 字体缓存后重试:python -c "import matplotlib; print(matplotlib.get_cachedir())" # 删除缓存目录下的 fontlist-*.json 文件后重新运行脚本
三、使用方法
命令行格式
python awvs_json_word.py <report.json> [output.docx]report.json | ||
output.docx | report_报告编号_时间戳.docx |
使用示例
# 基本用法(自动命名输出文件) python awvs_json_word.py scan_result.json # 指定输出文件名 python awvs_json_word.py scan_result.json 安全漏洞扫描报告.docx # 查看帮助 python awvs_json_word.py -h输出位置
生成的 Word 报告与统计图表统一输出到脚本运行目录下的:
workspace/ └── report_result/ ├── 报告名称.docx # 生成的 Word 报告 └── vuln_chart.png # 漏洞统计图表(可单独使用)四、输入文件格式说明
脚本接受 Acunetix(AWVS)/ Invicti 扫描器的标准 JSON 导出格式,顶层结构如下:
{ "export": { "lang": "cn", "scans": [ { "info": { "host": "https://example.com", "start_url": "https://example.com/", "start_date": "2026-08-13T00:59:35+00:00", "end_date": "2026-08-13T01:04:55+00:00", "build": "25.1.250204093" }, "vulnerability_types": [ { "vt_id": "34a6c791-...", "name": "HTTP Strict Transport Security (HSTS) Policy Not Enabled", "severity": 2, "description": "...", "recommendation": "...", "type": "configuration" } ], "vulnerabilities": [ { "info": { "vt_id": "34a6c791-...", "name": "HTTP Strict Transport Security (HSTS) Policy Not Enabled", "url": "https://example.com/", "details": "URLs where HSTS is not enabled: ...", "request": "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n", "tags": ["confidence.100", "verified"] }, "response": "H4sIAAAAAAAA..." } ] } ] } }关键字段说明
scans | |
info.hostinfo.start_url | |
info.build | |
vulnerability_types | |
vulnerabilities | vt_id 关联类型定义 |
vulnerabilities[].info.request | |
vulnerabilities[].response | |
vulnerabilities[].info.details | |
tags | confidence.100 自动映射为 verified(已确认) |
若输入的 JSON 不是 Acunetix/Invicti 导出格式(缺少
export.scans字段),脚本会报错并提示。
五、生成报告内容结构
生成的 Word 报告包含以下章节:
┌─────────────────────────────────────────────┐ │ 封面页 │ │ - 报告标题(Web 应用安全漏洞扫描报告) │ │ - 测试目标 / 测试时间 / 测试工具 / 漏洞总数 │ ├─────────────────────────────────────────────┤ │ 目 录 │ ├─────────────────────────────────────────────┤ │ 一、漏洞扫描概述 │ │ 扫描时间、工具版本、漏洞数量统计 │ ├─────────────────────────────────────────────┤ │ 二、漏洞风险统计 │ │ 环形图 + 柱状图 + 漏洞类型分布表 │ ├─────────────────────────────────────────────┤ │ 三、网站漏洞列表(多目标时) │ │ 按站点统计各等级漏洞数量 │ ├─────────────────────────────────────────────┤ │ 四、漏洞详情 │ │ 每个漏洞包含: │ │ - 标题(含风险等级,如【中危】) │ │ - 漏洞编号/风险等级/类型/目标地址 │ │ - 漏洞描述(中文) │ │ - 漏洞详情(HTTP 请求/响应交互) │ │ - 修复建议(中文) │ ├─────────────────────────────────────────────┤ │ 五、修复建议汇总 │ │ SQL注入/认证/信息泄露/CSRF/响应头/代码 │ └─────────────────────────────────────────────┘风险等级对照
六、中文化机制
脚本内置 VULN_ZH_MAP 翻译表,将 Acunetix 常见漏洞的英文名称、描述、修复建议自动翻译为中文。
已内置翻译的漏洞类型(14 种)
扩展翻译表
遇到未收录的新漏洞类型时,报告会回退显示原始英文内容。如需补充翻译,编辑脚本中的 VULN_ZH_MAP 字典,按以下格式添加:
VULN_ZH_MAP = { "漏洞英文名称(与扫描器导出一致)": { "title_zh": "漏洞中文名称", "description_zh": "漏洞中文描述", "repair_zh": "漏洞中文修复建议", }, # ... 其他漏洞 }七、注意事项
输入校验:脚本会校验 JSON 是否为
export.scans结构,格式不符会立即报错退出。输出文件占用:若同名输出文件正被 Word 打开,脚本会因文件占用报错,请关闭后重试或更换输出文件名。
图表字体:matplotlib 首次运行会构建字体缓存,属正常现象;中文显示异常时按"二、环境要求"中的方法清除缓存。
缺失数据容错:漏洞无请求/响应数据时,脚本自动改用扫描器的
details检测详情填充"漏洞详情"章节,不会出现空白漏洞。响应截断:超长 HTTP 响应体(超过 1500 字符)会被截断并标注"内容已截断",避免报告篇幅失控。
报告编号:封面与页脚不显示报告编号,仅内部使用(用于自动命名输出文件)。
八、常见问题(FAQ)
Q1:运行报错 ModuleNotFoundError: No module named 'docx' 依赖未安装,执行 pip install python-docx matplotlib。
Q2:报告图表中文显示为方块 SimHei 字体未被 matplotlib 缓存识别,删除 %LOCALAPPDATA%\matplotlib 下的 fontlist-*.json 后重新运行。
Q3:漏洞标题/描述显示英文 该漏洞类型未收录在 VULN_ZH_MAP 翻译表中,按"六、中文化机制"中的方法自行补充翻译。
Q4:为什么有些漏洞的"漏洞详情"只有响应没有请求 SSL 审计类漏洞(如 Sweet32、弱加密套件)本身无 HTTP 请求数据,脚本自动使用扫描器的检测详情(details 字段)填充,属正常现象。
Q5:如何同时生成多个扫描任务的报告 Acunetix 导出的 JSON 中若包含多个 scans(多个站点),脚本会自动合并处理,生成包含站点对比统计的多目标报告。
九、版本信息
本手册随脚本功能同步更新,如有疑问请联系工具维护者。
夜雨聆风