Uma introdução prática a Linux privesc baseada em enumeração, permissões inseguras e GTFOBins.
por rideckszz
C:\>aula_ □ ×
Linux Privilege Escalation
Uma primeira aula prática sobre Linux privesc: o que olhar depois do acesso inicial, como enumerar o sistema e como transformar uma permissão mal configurada em acesso maior.
1. O que é privesc?
C:\>conceito_ □ ×
Do foothold ao root
Privilege escalation é o processo de sair de um acesso limitado para um nível maior de permissão.
Em Linux CTF, isso geralmente significa partir de um usuário comum e chegar em root.
Depois do foothold, a máquina não acabou. Na maioria das vezes, o primeiro shell vem como um usuário com pouca permissão.
A partir daí, o trabalho muda: saímos de exploit remoto e entramos em enumeração local. O objetivo é descobrir o que esse usuário consegue ler, executar, alterar ou abusar.
Foothold
Primeiro acesso à máquina. Pode vir de SSH, web shell, reverse shell ou credenciais encontradas.
Enumeração local
Coleta de informações dentro do sistema: usuário, grupos, permissões, serviços e arquivos.
Vetor
A condição explorável: sudo mal configurado, SUID perigoso, credencial exposta, cron editável, capability insegura.
2. Primeiro minuto no shell
C:\>check inicial_ □ ×
Entenda onde você caiu
Antes de sair rodando ferramenta automática, descubra quem você é e que tipo de sistema está usando.
comandos_ □ ×
whoami
id
hostname
pwd
uname -a
ls -la
whoami
Mostra o usuário atual.
id
Mostra UID, GID e grupos. Grupos como docker, lxd e adm podem ser importantes.
uname -a
Ajuda a identificar kernel, arquitetura e distribuição.
ls -la
Mostra arquivos escondidos e permissões do diretório atual.
3. sudo -l
C:\>sudo_ □ ×
O que posso rodar como outro usuário?
O comando sudo -l mostra quais comandos o usuário atual pode executar via sudo.
Em CTF, essa costuma ser uma das primeiras pistas fortes de privesc.
comandos_ □ ×
sudo -l
A saída pode mostrar que o usuário consegue executar um binário específico como root, com ou sem senha.
Exemplo de formato:
saída esperada_ □ ×
User aluno may run the following commands on target:
(root) /usr/bin/algum-binario
A pergunta é se esse programa permite executar comandos, abrir arquivos, chamar shell ou carregar plugins.
4. GTFOBins
C:\>referência_ □ ×
Procure o binário, depois o contexto
GTFOBins é uma coleção de técnicas para abusar binários Unix em contextos inseguros.
Ele não diz que o binário é vulnerável por existir. O problema é a permissão em volta dele.
O mesmo binário pode aparecer em várias categorias:
sudo
Quando o usuário pode executar o binário com sudo.
SUID
Quando o binário roda com permissão do dono do arquivo.
Shell
Quando o binário permite abrir uma shell.
File read
Quando o binário pode ler arquivos que o usuário não leria diretamente.
File write
Quando o binário pode escrever em arquivos sensíveis.
Reverse shell
Quando o binário pode abrir conexão de volta.
Fluxo de pesquisa:
fluxo de pesquisa_ □ ×
1. Rode sudo -l.
2. Anote o caminho do binário.
3. Procure o nome do binário no GTFOBins.
4. Entre na seção que combina com o contexto encontrado.
5. Adapte o exemplo para o caminho real do alvo.
Dica prática: se o sudo -l mostrar um editor conhecido, abra o GTFOBins e veja a seção sudo desse editor.
5. Editores e pagers
C:\>pista_ □ ×
Ferramentas interativas merecem atenção
Editores e pagers geralmente têm recursos para executar comandos, abrir arquivos ou chamar uma shell.
Se eles aparecem em uma regra de sudo, a configuração precisa ser analisada com cuidado.
Editores
vim, vi, nano, ed.
Pagers
less, more, man.
Interpretadores
python, perl, ruby, awk, bash, sh.
Ferramentas
find, tar, zip, rsync, nmap antigo.
O ponto aqui não é decorar uma sequência de teclas. O ponto é perceber que programas interativos muitas vezes têm comandos internos.
Em um lab, se um desses programas puder rodar como root, pesquise o binário no GTFOBins e confira a seção correta.
6. SUID binaries
C:\>suid_ □ ×
Rodando com o dono do arquivo
SUID é uma permissão especial que faz um arquivo executar com os privilégios do dono.
Quando o dono é root, um binário SUID mal configurado pode virar caminho de privesc.
O caractere s nas permissões indica SUID:
saída esperada_ □ ×
-rwsr-xr-x 1 root root 54256 /usr/bin/passwd
O /usr/bin/passwd precisa disso porque altera arquivos sensíveis. O problema aparece quando binários que não deveriam ter SUID recebem essa permissão.
comandos_ □ ×
find / -perm -4000 -type f 2>/dev/null
Binário comum
passwd, su, mount e sudo podem aparecer normalmente.
Binário estranho
Arquivo customizado, nome incomum ou ferramenta interativa merece atenção.
Próximo passo
Checar permissões, dono, strings e GTFOBins.
7. PATH hijacking
C:\>path_ □ ×
Quando o programa chama comandos sem caminho absoluto
PATH hijacking acontece quando um script ou binário privilegiado chama outro comando sem usar caminho absoluto.
Se o PATH puder ser controlado, o sistema pode executar um binário falso antes do binário real.
Exemplo conceitual:
exemplo conceitual_ □ ×
O programa chama:
cat /arquivo
Em vez de chamar:
/usr/bin/cat /arquivo
Se o programa privilegiado respeitar um PATH controlado pelo usuário, é possível fazer ele encontrar um cat falso antes do cat real.
Sinal
strings mostra comandos como cat, cp, tar, id ou bash sem caminho absoluto.
Condição
O programa roda com privilégio maior e usa PATH inseguro.
Impacto
O comando falso pode herdar o contexto privilegiado.
PATH hijacking é comum em labs com binários customizados. Em sistemas reais, aparece bastante em scripts mal escritos.
8. Capabilities
C:\>capabilities_ □ ×
Privilégios quebrados em pedaços
Linux capabilities dividem poderes do root em permissões menores.
Uma capability perigosa em um binário comum pode permitir privesc.
comandos_ □ ×
getcap -r / 2>/dev/null
cap_setuid
Pode permitir mudar o UID do processo.
cap_dac_read_search
Pode permitir leitura ignorando permissões comuns.
cap_dac_override
Pode permitir acesso a arquivos ignorando DAC.
Se aparecer uma capability em um binário como Python, Perl, Bash ou outro interpretador, pesquise antes de ignorar.
9. Cron e tarefas automáticas
C:\>cron_ □ ×
Root executando coisa em intervalos
Cron jobs são tarefas executadas automaticamente em intervalos definidos.
Se root executa um script que você consegue alterar, isso pode virar privesc.
comandos_ □ ×
cat /etc/crontab
ls -la /etc/cron.d
ls -la /etc/cron.daily
ls -la /etc/cron.hourly
Quem executa?
Veja se a tarefa roda como root ou outro usuário privilegiado.
O que executa?
Anote o script ou binário chamado.
Posso alterar?
Cheque permissão de escrita no arquivo ou no diretório.
Cron vulnerável costuma ser falha de permissão: script gravável, diretório gravável ou PATH inseguro.
10. Arquivos e credenciais
C:\>credenciais_ □ ×
Nem todo privesc é exploit
Às vezes o caminho mais simples é uma senha esquecida, chave SSH, backup ou arquivo de configuração.
comandos_ □ ×
ls -la /home
find /home -type f -name "*.txt" 2>/dev/null
find /home -type f -name "*.bak" 2>/dev/null
find /home -type f -name "*.conf" 2>/dev/null
find / -name "*password*" -o -name "*passwd*" 2>/dev/null
Histórico
.bash_history, comandos antigos e scripts de deploy.
Config
Arquivos de aplicação, banco, backup e serviço.
SSH
Chaves privadas, authorized_keys e permissões fracas.
Reuso
Senha de aplicação reutilizada no usuário do sistema.
11. Ferramentas automáticas
C:\>apoio_ □ ×
LinPEAS
Ferramentas automáticas ajudam a encontrar pistas rapidamente.
Elas normalmente não substituem interpretação dos achados. O resultado precisa ser validado manualmente.
LinPEAS
Enumeração ampla de Linux. Costuma destacar permissões, arquivos e configurações suspeitas.
lse.sh
Linux Smart Enumeration. Bom para uma enumeração mais organizada.
pspy
Observa processos sem precisar de root. Útil para cron e scripts periódicos.
comandos_ □ ×
chmod +x linpeas.sh
./linpeas.sh
Em prova prática, rode manualmente o básico antes. Assim fica mais fácil entender por que uma linha do LinPEAS é importante.
12. Fluxo de análise
C:\>raciocínio_ □ ×
Permissão → contexto → impacto
Um achado só importa se ele puder ser ligado a impacto.
Permissão
O que o usuário consegue executar, ler ou escrever?
Contexto
Isso roda como root? Tem sudo? Tem SUID? É chamado por cron?
Abuso
Existe técnica conhecida para esse binário ou configuração?
Impacto
Dá para ler flag, obter shell, editar arquivo sensível ou trocar usuário?
Esse raciocínio evita dois extremos: ignorar uma pista boa ou tentar explorar qualquer coisa aleatória.
13. Cheat sheet
C:\>referência_ □ ×
Comandos úteis
Lista rápida para usar durante a prática.
comandos_ □ ×
# Identidade e sistema
whoami
id
hostname
pwd
uname -a
ls -la
# Sudo
sudo -l
# Usuários e diretórios
cat /etc/passwd
ls -la /home
ls -la /root 2>/dev/null
# SUID
find / -perm -4000 -type f 2>/dev/null
# Arquivos graváveis
find / -writable -type d 2>/dev/null
find / -writable -type f 2>/dev/null
# Capabilities
getcap -r / 2>/dev/null
# Cron
cat /etc/crontab
ls -la /etc/cron.d
ls -la /etc/cron.daily
ls -la /etc/cron.hourly
# Processos
ps aux
ps aux | grep root
# Arquivos interessantes
find /home -type f 2>/dev/null
find / -name "*password*" 2>/dev/null
find / -name "*.bak" 2>/dev/null
find / -name "*.conf" 2>/dev/null
# Binário suspeito
ls -la /caminho/do/binario
strings /caminho/do/binario 2>/dev/null
14. Pista de pesquisa
C:\>gtfobins_ □ ×
Não decore: encontre
Durante um lab, se sudo -l mostrar um binário conhecido, pesquise pelo nome dele no GTFOBins.
Depois escolha a seção que combina com o seu contexto: sudo, SUID, File read, Shell ou outra.
raciocínio_ □ ×
Exemplo de raciocínio:
1. sudo -l mostra que um binário pode ser executado como root.
2. O binário é interativo ou possui comandos internos.
3. Pesquise o nome no GTFOBins.
4. Use a seção sudo.
5. Adapte o exemplo ao caminho que apareceu no alvo.
15. O Ambiente do Laboratório
C:\>prática_ □ ×
Pwn Foothold Lab
Neste laboratório, você começa com um acesso restrito e precisa enumerar a máquina por dentro.
O objetivo é encontrar uma configuração local insegura e usar isso para obter acesso maior.