Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/blacklanternsecurity/writehat
渗透测试实用工具与框架学习与教育
GitHubblacklanternsecurity/writehat

writehat

一个用Python编写的渗透测试报告工具。让你摆脱Microsoft Word的束缚。

查看仓库
1.5k25335个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

WriteHat WriteHat 是一个报告工具,它将 Microsoft Word(以及许多小时的痛苦)从报告流程中移除。Markdown --> HTML --> PDF。由渗透测试员为渗透测试员创建 - 但也可用于生成任何类型的报告。基于 Django (Python 3) 编写。

特性:

  • 轻松生成漂亮的渗透测试报告
  • 即时拖放式报告构建器
  • 支持 Markdown - 包括代码块、表格等
  • 裁剪、标注、添加说明并上传图片
  • 可自定义的报告背景/页脚
  • 为各个报告部分分配操作员并跟踪状态
  • 能够克隆报告并作为模板使用
  • 发现项数据库
  • 支持多种评分类型 (CVSS 3.1, DREAD)
  • 可从同一组发现项轻松生成多份报告
  • 可扩展的设计使高级用户能够创建高度自定义的报告部分
  • LDAP 集成

writehat_report

安装前提:

  • 安装 docker 和 docker-compose
    • 通常可以使用 apt、pacman、 等进行安装。
dnf
root@kitploit:~
$ sudo apt install docker.io docker-compose

部署 WriteHat(快速简便方法,用于测试):

WriteHat 可以通过单个命令部署:

root@kitploit:~
$ git clone https://github.com/blacklanternsecurity/writehat && cd writehat && docker-compose up

登录 https://127.0.0.1**(默认:**`admin` / PLEASECHANGETHISFORHEAVENSSAKE)

部署 WriteHat(正确方式):

  1. 安装 Docker 和 Docker Compose

  2. 克隆 WriteHat 仓库 到 /opt

    root@kitploit:~
    $ cd /opt
    $ git clone https://github.com/blacklanternsecurity/writehat
    $ cd writehat
    
  3. 创建安全密码 在 writehat/config/writehat.conf 文件中:

    • MongoDB(同时输入到 docker-compose.yml 中)
    • MySQL(同时输入到 docker-compose.yml 中)
    • Django(用于加密 Cookie 等)
    • 管理员用户 注意:如果使用默认配置,除密码外无需修改其他内容。 注意:别忘了锁定 writehat/config/writehat.conf 和 docker-compose.yml 的权限:(chown root:root; chmod 600)
  4. 添加所需主机名 到 writehat/config/writehat.conf 的 allowed_hosts 中。

  5. (可选)替换自签名 SSL 证书 在 nginx/ 目录中:

    • writehat.crt
    • writehat.key
  6. 测试一切正常:

    root@kitploit:~
    $ docker-compose up --build
    

    注意:如果使用 VPN,首次使用 docker-compose 启动服务时需要断开 VPN 连接。这样 Docker 才能成功创建虚拟网络。

  7. 安装并激活 Systemd 服务:

    这样 WriteHat 将在开机时自动启动。

    root@kitploit:~
    $ sudo cp writehat/config/writehat.service /etc/systemd/system/
    $ sudo systemctl enable writehat --now
    
  8. 跟踪服务日志:

    root@kitploit:~
    $ sudo journalctl -xefu writehat.service
    
  9. 创建用户

    使用 writehat/config/writehat.conf 中指定的管理员用户登录后,浏览 https://127.0.0.1/admin 注意:有些操作只有管理员才能执行(例如数据库备份)。管理员用户会根据 writehat/config/writehat.conf 中的用户名和密码自动创建,但你也可以将 LDAP 用户提升为管理员:

    root@kitploit:~
    # 进入应用容器
    $ docker-compose exec writehat bash
    
    # 提升用户权限并退出
    $ ./manage.py ldap_promote <ldap_username>
    $ exit
    

术语

以下是一些可能不明显的 WriteHat 术语的基本解释。

root@kitploit:~
Engagement
 ├─ Customer
 ├─ Finding Group 1
 │   ├─ Finding
 │   └─ Finding
 ├─ Finding Group 2
 │   ├─ Finding
 │   └─ Finding
 ├─ Report 1
 └─ Report 2
     └─ Page Template

项目 (Engagement)

项目 (Engagement) 是为客户创建内容的地方。这是实际工作发生的地方——创建报告和录入发现项。

报告 (Report)

报告 (Report) 是 组件 (Components) 的模块化、分层排列,可通过拖放界面轻松更新,然后渲染为 HTML 或 PDF。一个项目可以有多个 报告 (Reports)。页面模板 (Page Template) 可用于自定义背景和页脚。报告 (Report) 也可以转换为 报告模板 (Report Template)。

报告组件 (Report Component)

报告 组件 (Component) 是报告中的一个部分或模块,可以在报告创建器中拖放到合适位置。例如“标题页”、“Markdown”、“发现项”等。内置组件很多,你也可以自行创建。(它们只是 HTML/CSS + Python,因此相当简单。参见下面的指南)

报告模板 (Report Template)

报告模板 (Report Template) 可用作 报告 (Report)(在 项目 中)的起点。报告 (Reports) 也可以转换为 报告模板 (Report Templates)。

发现项组 (Finding Group)

发现项组 (Finding Group) 是一组以相同方式评分(例如 CVSS 或 DREAD)的发现项。你可以为每个项目创建多个发现项组(例如“技术发现项”和“资金发现项”)。当将发现项插入 报告 (Report) 时(例如通过“发现项” 组件),你需要选择用哪个 发现项组 来填充该 组件。

页面模板 (Page Template)

页面模板 (Page Template) 让你自定义报告背景图片和页脚。你可以将一个 页面模板 设置为默认,它将全局应用,除非在 项目 或 报告 级别进行覆盖。

编写自定义报告组件

report_creation 每个报告组件由以下部分组成:

  1. writehat/components/ 中的一个 Python 文件
  2. writehat/templates/componentTemplates/ 中的一个 HTML 模板
  3. writehat/static/css/component/ 中的一个 CSS 文件(可选)

我们建议参考这些目录中的现有文件;它们作为起点/示例效果很好。

一个简单的自定义组件如下所示:

components/CustomComponent.py:

root@kitploit:~
from .base import *

class CustomComponentForm(ComponentForm):

    summary = forms.CharField(label='Component Text', widget=forms.Textarea, max_length=50000, required=False)
    field_order = ['name', 'summary', 'pageBreakBefore', 'showTitle']


class Component(BaseComponent):

    default_name = 'Custom Report Component'
    formClass = CustomComponentForm

    # the "templatable" attribute decides whether or not that field
    # gets saved if the report is ever converted into a template
    fieldList = {
        'summary': StringField(markdown=True, templatable=True),
    }

    # make sure to specify the HTML template
    htmlTemplate = 'componentTemplates/CustomComponent.html'

    # Font Awesome icon type + color (HTML/CSS)
    # This is just eye candy in the web app
    iconType = 'fas fa-stream'
    iconColor = 'var(--blue)'

    # the "preprocess" function is executed when the report is rendered
    # use this to perform any last-minute operations on its data
    def preprocess(self, context):

        # for example, to uppercase the entire "summary" field:
        #   context['summary'] = context['summary'].upper()
        return context

注意:字段在组件类及其表单中的名称必须相同。所有组件必须继承自 BaseComponent 或其他组件。此外,每个组件都有内置字段用于 name、pageBreakBefore 和 showTitle。因此无需添加这些。

componentTemplates/CustomComponent.html:

root@kitploit:~
{% load custom_tags %}
<section class="l{{ level }} component{% if pageBreakBefore %} page-break{% endif %}" id="container_{{ id }}">
  {% include 'componentTemplates/Heading.html' %}
  <div class='markdown-align-justify custom-component-summary'>
    <p>
      {% markdown summary %}
    </p>
  </div>
</section>

来自 Python 模块的字段会自动添加到模板上下文中。在此示例中,我们希望将 summary 字段渲染为 markdown,因此我们在其前面添加 markdown 标签。注意,你还可以访问项目级和报告级变量,例如 report.name、report.findings、engagement.customer.name 等。

componentTemplates/CustomComponent.css (optional):

root@kitploit:~
div.custom-component-summary {
    font-weight: bold;
}

文件名必须与 Python 文件匹配(但扩展名为 .css 而非 .py)。报告渲染时会自动加载。

创建上述文件后,只需重启 Web 应用,新组件就会自动填充。

root@kitploit:~
$ docker-compose restart writehat

手动数据库更新/迁移

如果推送的更新更改了数据库结构,Django 数据库迁移会在容器重启时自动执行。但有时可能需要用户交互。 如需手动应用 Django 迁移:

  1. 停止 WriteHat (systemctl stop writehat)
  2. 进入 WriteHat 目录 (/opt/writehat)
  3. 启动 Docker 容器
root@kitploit:~
$ docker-compose run writehat bash
  1. 进入容器后,按常规方式应用迁移:
root@kitploit:~
$ ./manage.py makemigrations
$ ./manage.py migrate
$ exit
  1. 关闭 Docker 容器并重启服务
root@kitploit:~
$ docker-compose down
$ systemctl start writehat

手动数据库备份/恢复

注意,Web 应用的 /admin 页面已有此功能的内置支持。如果你想通过 cron 等方式创建文件级备份作业,可以使用此方法。

  1. 在目标系统上:
    • 按照正常安装步骤操作
    • 停止 WriteHat (systemctl stop writehat)
  2. 在源系统上:
    • 停止 WriteHat (systemctl stop writehat)
  3. 将 mysql、mongo 和 writehat/migrations 目录打包为 TAR 文件,并将归档文件复制到目标系统(相同位置):
root@kitploit:~
# 必须以 root 身份运行
$ sudo tar --same-owner -cvzpf db_backup.tar.gz mongo mysql writehat/migrations
  1. 在目标系统上,备份 migrations 目录
root@kitploit:~
$ mv writehat/migrations writehat/migrations.bak
  1. 在目标系统上解压 TAR 归档文件
root@kitploit:~
$ sudo tar --same-owner -xvpzf db_backup.tar.gz
  1. 在新系统上启动 WriteHat
root@kitploit:~
$ systemctl start writehat

路线图 / 潜在的未来开发:

  • 变更跟踪与修订
  • 更深入的审查/反馈功能
  • 类似 Google Docs 的协作式多用户编辑
  • JSON 导出功能
  • 演示幻灯片生成
  • 更高级的表格创建器,支持 CSV 上传
  • 更细粒度的权限 / ACL(超越普通用户和管理员角色)

已知错误 / 限制:

  • Chrome 或 Chromium 是推荐的浏览器。其他浏览器未经测试,可能遇到错误。
  • 报告组件上的“分配者”字段仅适用于 LDAP 用户,不适用于本地用户。
  • 图片标注有时在应用时会轻微跳动。这是一个已知错误,我们正在跟踪 JS 库中的问题: https://github.com/ailon/markerjs/issues/40
  • 分页时偶尔出现视觉错误。可以通过在受影响的 markdown 中手动插入分页符来解决(编辑器中有一个按钮)。
下载工具