Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/blacklanternsecurity/writehat
Testes de PenetraçãoUtilitários e FrameworksAprendizado e Educação
GitHubblacklanternsecurity/writehat

writehat

Uma ferramenta de relatório de pentest escrita em Python. Liberte-se do Microsoft Word.

Ver Repositório
1.5k2531há 4 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

WriteHat WriteHat é uma ferramenta de relatórios que elimina o Microsoft Word (e muitas horas de sofrimento) do processo de elaboração de relatórios. Markdown --> HTML --> PDF. Criada por testadores de penetração, para testadores de penetração - mas pode ser usada para gerar qualquer tipo de relatório. Escrita em Django (Python 3).

Funcionalidades:

  • Gere relatórios de pentest bonitos sem esforço
  • Construtor de relatórios drag-and-drop em tempo real
  • Suporte a Markdown - incluindo blocos de código, tabelas, etc.
  • Cortar, anotar, legendar e carregar imagens
  • Fundo/rodapé do relatório personalizável
  • Atribuir operadores e rastrear status para seções individuais do relatório
  • Capacidade de clonar e modelar relatórios
  • Banco de dados de descobertas
  • Suporta múltiplos tipos de pontuação (CVSS 3.1, DREAD)
  • Pode gerar facilmente múltiplos relatórios a partir do mesmo conjunto de descobertas
  • Design extensível permite que usuários avançados criem seções de relatório altamente personalizadas
  • Integração LDAP

writehat_report

Pré-requisitos de Instalação:

  • Instale e
docker
docker-compose
  • Estes podem geralmente ser instalados usando apt, pacman, dnf, etc.
root@kitploit:~
$ sudo apt install docker.io docker-compose

Implantando o WriteHat (A forma rápida e fácil, para testes):

WriteHat pode ser implantado com um único comando:

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

Faça login em https://127.0.0.1 (padrão: admin / PLEASECHANGETHISFORHEAVENSSAKE)

Implantando o WriteHat (Da maneira correta):

  1. Instale o Docker e o Docker Compose

  2. Clone o Repositório WriteHat em /opt

    root@kitploit:~
    $ cd /opt
    $ git clone https://github.com/blacklanternsecurity/writehat
    $ cd writehat
    
  3. Crie Senhas Seguras em writehat/config/writehat.conf para:

    • MongoDB (também insira em docker-compose.yml)
    • MySQL (também insira em docker-compose.yml)
    • Django (usado para criptografar cookies, etc.)
    • Usuário admin Nota: Nada mais além das senhas precisa ser modificado se você estiver usando a configuração padrão Nota: Não se esqueça de restringir as permissões em writehat/config/writehat.conf e docker-compose.yml: (chown root:root; chmod 600)
  4. Adicione o Nome de Host Desejado a allowed_hosts em writehat/config/writehat.conf

  5. (Opcional) Substitua os certificados SSL autoassinados em nginx/:

    • writehat.crt
    • writehat.key
  6. Teste se Tudo Está Funcionando:

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

    Nota: Se estiver usando uma VPN, você precisa estar desconectado da VPN na primeira vez que iniciar os serviços com docker-compose. Isso é para que o docker possa criar a rede virtual com sucesso.

  7. Instale e Ative o Serviço Systemd:

    Isso iniciará o WriteHat automaticamente na inicialização

    root@kitploit:~
    $ sudo cp writehat/config/writehat.service /etc/systemd/system/
    $ sudo systemctl enable writehat --now
    
  8. Acompanhe os Logs do Serviço:

    root@kitploit:~
    $ sudo journalctl -xefu writehat.service
    
  9. Crie Usuários

    Navegue até https://127.0.0.1/admin após fazer login com o usuário admin especificado em writehat/config/writehat.conf Nota: Existem algumas ações que apenas um admin pode realizar (por exemplo, backups do banco de dados). Um usuário admin é criado automaticamente a partir do nome de usuário e senha em writehat/config/writehat.conf, mas você também pode promover um usuário LDAP a admin:

    root@kitploit:~
    # Entre no contêiner da aplicação
    $ docker-compose exec writehat bash
    
    # Promova o usuário e saia
    $ ./manage.py ldap_promote <ldap_username>
    $ exit
    

Terminologia

Aqui estão explicações básicas para alguns termos do WriteHat que podem não ser óbvios.

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

Engagement

Um Engagement é onde o conteúdo é criado para o cliente. Aqui é onde o trabalho acontece - criar relatórios e inserir descobertas.

Report

Um Relatório é um arranjo modular e hierárquico de Componentes que pode ser facilmente atualizado através de uma interface de arrastar e soltar, depois renderizado em HTML ou PDF. Um engagement pode ter múltiplos Relatórios. Um Page Template pode ser usado para personalizar o fundo e o rodapé. Um Relatório também pode ser convertido em um Modelo de Relatório (Report Template).

Report Component

Um Componente de relatório é uma seção ou módulo do relatório que pode ser arrastado/soltado no lugar dentro do criador de relatórios. Exemplos incluem "Página de Título", "Markdown", "Descobertas", etc. Existem muitos componentes embutidos, mas você também pode criar os seus próprios. (Eles são apenas HTML/CSS + Python, então é bem fácil. Veja o guia abaixo)

Report Template

Um Modelo de Relatório pode ser usado como ponto de partida para um Relatório (em um Engagement). Relatórios também podem ser convertidos em Modelos de Relatório (Report Template).

Finding Group

Um Grupo de Descobertas é uma coleção de descobertas que são pontuadas da mesma forma (por exemplo, CVSS ou DREAD). Você pode criar múltiplos grupos de descobertas por engagement (por exemplo, "Descobertas Técnicas" e "Descobertas do Tesouro"). Ao inserir as descobertas no Relatório (via o Componente "Descobertas", por exemplo), você precisa selecionar qual Grupo de Descobertas deseja popular naquele Componente.

Page Template

Um Modelo de Página permite personalizar imagens de fundo e rodapés dos relatórios. Você pode definir um Page Template como padrão, e ele será aplicado globalmente a menos que seja sobrescrito no nível do Engagement ou Relatório.

Escrevendo Componentes de Relatório Personalizados

report_creation Cada componente de relatório é composto pelo seguinte:

  1. Um arquivo Python em writehat/components/
  2. Um template HTML em writehat/templates/componentTemplates/
  3. Um arquivo CSS em writehat/static/css/component/ (opcional)

Recomendamos consultar os arquivos existentes nesses diretórios; eles funcionam bem como pontos de partida / exemplos.

Um componente personalizado simples seria assim:

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

Observe que os campos devem compartilhar o mesmo nome tanto na classe do componente quanto no seu formulário. Todos os componentes devem herdar de BaseComponent ou de outro componente. Além disso, cada componente possui campos embutidos para name, pageBreakBefore (se deve começar em uma nova página) e showTitle (se deve exibir o campo name como cabeçalho). Portanto, não é necessário adicioná-los.

componentTemplates/CustomComponent.html:

Os campos do módulo Python são automaticamente adicionados ao contexto do template. Neste exemplo, queremos renderizar o campo summary como markdown, então adicionamos a tag markdown na frente dele. Observe que você também pode acessar variáveis do nível do engagement e do relatório, como report.name, report.findings, engagement.customer.name, etc.

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>

componentTemplates/CustomComponent.css (opcional):

O nome do arquivo deve corresponder ao do arquivo Python (mas com extensão .css em vez de .py). Ele é carregado automaticamente quando o relatório é renderizado.

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

Assim que os arquivos acima forem criados, basta reiniciar o aplicativo web e o novo componente será populado automaticamente.

root@kitploit:~
$ docker-compose restart writehat

Atualização/Migração Manual do BD

Se uma atualização for enviada que altere o esquema do banco de dados, as migrações do banco de dados Django são executadas automaticamente quando o contêiner é reiniciado. No entanto, a interação do usuário pode ser necessária às vezes. Para aplicar as migrações Django manualmente:

  1. Pare o WriteHat (systemctl stop writehat)
  2. Entre no diretório do WriteHat (/opt/writehat)
  3. Inicie o contêiner docker
root@kitploit:~
$ docker-compose run writehat bash
  1. Uma vez no contêiner, aplique as migrações como de costume:
root@kitploit:~
$ ./manage.py makemigrations
$ ./manage.py migrate
$ exit
  1. Pare os contêineres docker e reinicie o serviço
root@kitploit:~
$ docker-compose down
$ systemctl start writehat

Backup/Restauração Manual do BD

Observe que já existe funcionalidade no aplicativo para isso na página /admin do aplicativo web. Você pode usar este método se quiser fazer um trabalho de backup em nível de arquivo via cron, etc.

  1. No sistema de destino:
    • Siga os passos normais de instalação
    • Pare o WriteHat (systemctl stop writehat)
  2. No sistema de origem:
    • Pare o WriteHat (systemctl stop writehat)
  3. Empacote os diretórios mysql, mongo e writehat/migrations em um TAR e copie o arquivo para o sistema de destino (mesma localização):
root@kitploit:~
# DEVE SER EXECUTADO COMO ROOT
$ sudo tar --same-owner -cvzpf db_backup.tar.gz mongo mysql writehat/migrations
  1. No sistema de destino, faça um backup do diretório migrations
root@kitploit:~
$ mv writehat/migrations writehat/migrations.bak
  1. Extraia o arquivo TAR no destino
root@kitploit:~
$ sudo tar --same-owner -xvpzf db_backup.tar.gz
  1. Inicie o WriteHat no novo sistema
root@kitploit:~
$ systemctl start writehat

Roteiro / Possíveis Desenvolvimentos Futuros:

  • Rastreamento de alterações e revisões
  • Funcionalidade de revisão/feedback mais aprofundada
  • Edição colaborativa multiusuário semelhante ao Google Docs
  • Funcionalidade de exportação JSON
  • Geração de slides de apresentação
  • Criador de tabelas mais avançado com funcionalidade de upload CSV
  • Permissões/ACLs mais granulares (além de apenas funções de usuário + admin)

Bugs / Limitações Conhecidos:

  • Chrome ou Chromium é o navegador recomendado. Outros não foram testados e podem apresentar bugs.
  • O campo "Responsável" (Assignee) nos componentes do relatório funciona apenas com usuários LDAP, não com usuários locais.
  • Anotações em imagens às vezes saltam ligeiramente quando aplicadas. É um bug conhecido que estamos rastreando com a biblioteca JS: https://github.com/ailon/markerjs/issues/40
  • Bugs visuais aparecem ocasionalmente nas quebras de página. Eles podem ser corrigidos inserindo manualmente uma quebra de página no markdown afetado (há um botão para isso no editor).
Baixar ferramenta