Dotfiles + bootstrap de ferramentas pra deixar uma VM nova (Kali, Ubuntu ou Debian) pronta pra pentest rápido, num único comando.
Uso restrito a máquinas próprias, labs de estudo (OSCP, HTB, Solyd, Exploit Mind) e engajamentos com autorização formal. As ferramentas aqui são as mesmas usadas no dia a dia de qualquer pentester — o script só automatiza a instalação delas.
git clone https://github.com/s3mPr1linux/PENTEST_DOTFILES.git
cd ~/PENTEST_DOTFILES
chmod +x install.sh scripts/*.sh
./install.sh --allDepois é só abrir um shell novo (ou source ~/.bashrc) pra tudo entrar
no PATH.
./install.sh --recon # subfinder, amass, httpx, nuclei
./install.sh --webapp # ffuf, gobuster, sqlmap
./install.sh --ad # impacket, bloodhound-python, netexec
./install.sh --wordlists # SecLists, rockyou.txt, hashcat, john
./install.sh --dotfiles # .vimrc / .bashrc / .gitconfig + Vundle
# combina o que quiser:
./install.sh --recon --webapp --dotfiles| Módulo | Ferramentas | Como |
|---|---|---|
--recon |
subfinder, amass, httpx, nuclei (+ templates) | go install |
--webapp |
ffuf, gobuster, sqlmap | go install / git em /opt |
--ad |
impacket, bloodhound-python, netexec | pipx |
--wordlists |
SecLists, rockyou.txt, hashcat, john | git clone + apt |
--dotfiles |
.vimrc, .bashrc, .gitconfig, Vundle + plugins |
symlink |
Burp Suite não é instalado automaticamente — é GUI com licença própria. Baixe em https://portswigger.net/burp.
O script instala só o ingestor (bloodhound-python), que já cobre 90% do
uso em campo. Se quiser a interface gráfica pra visualizar o grafo, a
forma mais simples é via Docker:
curl -L https://ghst.ly/getbhce -o docker-compose.yml
docker compose upIsso sobe BloodHound CE + Neo4j já configurados. Acesse em
http://localhost:8080.
pentest-dotfiles/
├── install.sh # entrypoint — parse de flags e orquestração
├── README.md
├── config/
│ ├── vimrc
│ ├── bashrc
│ └── gitconfig
└── scripts/
├── lib.sh # cores, logging, detecção de distro, helpers
├── 10-recon-osint.sh
├── 20-webapp.sh
├── 30-ad-windows.sh
├── 40-wordlists-cracking.sh
└── 90-dotfiles.sh
Cada módulo é só uma função bash. Pra adicionar algo no módulo de recon,
por exemplo, edita scripts/10-recon-osint.sh e acrescenta:
go_install "github.com/owner/ferramenta@latest" "nome-amigavel"Ou, pra ferramentas Python:
pipx_install "nome-do-pacote" "nome-amigavel"Ou pra clonar um repo pra /opt e criar um wrapper em /usr/local/bin
(mesmo padrão usado pro sqlmap em scripts/20-webapp.sh).
Isso é diferente do item acima: aqui é pra quando você quer uma flag nova
inteira (ex: --mobile, --osint-social, --wireless), não só uma
ferramenta a mais dentro de um módulo que já existe.
1. Crie o arquivo do módulo em scripts/. Escolha um prefixo numérico
que reflita a ordem de execução — os módulos rodam na ordem dos números,
e o 90-dotfiles.sh fica por último de propósito, então qualquer coisa
nova costuma ficar entre 40- e 90- (ex: 50-):
#!/usr/bin/env bash
# ============================================================
# 50-nome-da-categoria.sh — descrição curta
# ============================================================
set -uo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1091
source "${DIR}/lib.sh"
install_nome_da_categoria() {
log_head "Nome da Categoria"
ensure_go || true # ferramentas Go
go_install "github.com/owner/tool@latest" "tool"
ensure_pipx # ferramentas Python
pipx_install "pacote-pypi" "nome-amigavel"
apt_refresh_once; apt_install pacote1 pacote2 # pacotes apt
git_clone_or_update "https://github.com/owner/repo.git" "/opt/repo" # clonar do zero
log_ok "Nome da Categoria concluído"
}2. No install.sh, adicione o source junto dos outros módulos, logo
abaixo da declaração de REPO_DIR:
source "${REPO_DIR}/scripts/50-nome-da-categoria.sh"3. Adicione a flag em três pontos dentro do install.sh:
No usage(), na lista de opções:
--categoria Descrição curta do que instala
Na declaração de variáveis dentro de main():
RUN_CATEGORIA=0No case do parsing de argumentos — e, se quiser que --all já inclua
essa categoria, também na linha do --all:
--all)
RUN_RECON=1; RUN_WEBAPP=1; RUN_AD=1; RUN_WORDLISTS=1; RUN_DOTFILES=1; RUN_CATEGORIA=1
;;
...
--categoria) RUN_CATEGORIA=1 ;;4. Chame a função condicionalmente, junto dos outros
[ "$RUN_..." -eq 1 ] && ... dentro de main():
[ "$RUN_CATEGORIA" -eq 1 ] && install_nome_da_categoria5. (Opcional) Liste as ferramentas novas no summary(), no array
tools, pra elas aparecerem no resumo final de "o que ficou disponível".
6. Teste antes de confiar:
chmod +x scripts/50-nome-da-categoria.sh
bash -n scripts/50-nome-da-categoria.sh # checa sintaxe sem executar
./install.sh --categoria # testa isolado, sem rodar tudo de novoDepois é só atualizar a tabela em "O que cada módulo instala" (mais acima neste README) com a linha da categoria nova.
No config/gitconfig, troca:
[user]
name = SEU NOME AQUI
email = seu.email@exemplo.compelos seus dados de verdade — senão seus commits saem assinados errado.
Rodar ./install.sh --all de novo numa máquina que já tem tudo instalado
não quebra nada: go install e pipx install apenas reinstalam/atualizam
a versão mais recente, e git_clone_or_update (em lib.sh) faz git pull
em vez de clonar de novo se o repo já existir. Dá pra rodar como rotina de
manutenção pra manter as ferramentas atualizadas.