
Uma ferramenta de relatório de pentest escrita em Python. Liberte-se do Microsoft Word.
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).

docker e docker-compose
apt, pacman, dnf, etc.$ sudo apt install docker.io docker-compose
WriteHat pode ser implantado com um único comando:
$ 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)
Instale o Docker e o Docker Compose
Clone o Repositório WriteHat em /opt
$ cd /opt
$ git clone https://github.com/blacklanternsecurity/writehat
$ cd writehat
Crie Senhas Seguras em writehat/config/writehat.conf para:
docker-compose.yml)docker-compose.yml)writehat/config/writehat.conf e docker-compose.yml: (chown root:root; chmod 600)Adicione o Nome de Host Desejado a allowed_hosts em writehat/config/writehat.conf
(Opcional) Substitua os certificados SSL autoassinados em nginx/:
writehat.crtwritehat.keyTeste se Tudo Está Funcionando:
$ 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.
Instale e Ative o Serviço Systemd:
Isso iniciará o WriteHat automaticamente na inicialização
$ sudo cp writehat/config/writehat.service /etc/systemd/system/
$ sudo systemctl enable writehat --now
Acompanhe os Logs do Serviço:
$ sudo journalctl -xefu writehat.service
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:
# 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
Aqui estão explicações básicas para alguns termos do WriteHat que podem não ser óbvios.
Engagement
├─ Customer
├─ Finding Group 1
│ ├─ Finding
│ └─ Finding
├─ Finding Group 2
│ ├─ Finding
│ └─ Finding
├─ Report 1
└─ Report 2
└─ Page Template
Um Engagement é onde o conteúdo é criado para o cliente. Aqui é onde o trabalho acontece - criar relatórios e inserir descobertas.
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).
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)
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).
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.
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.
Cada componente de relatório é composto pelo seguinte:
writehat/components/writehat/templates/componentTemplates/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: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):