material • 04/06/2026

Linux Privilege Escalation

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.

Lab: Linux Privilege Escalation & Host Pivot Nível: Intermediário Plataforma: exploitCamp Labs Infrastructure Target

Diferente dos labs web, aqui você interage diretamente com a máquina pela rede e pelo shell obtido.

Para entrar no alvo, use SSH com as credenciais abaixo. Troque IP pelo endereço da instância iniciada no laboratório.

C:\>acesso_ □ ×

Credenciais do lab

Use essas credenciais para fazer o primeiro acesso na máquina. Troque IP pelo IP da instância iniciada no lab.

Usuário

exploituser

Senha

pwned123

Acesso

ssh exploituser@IP
ssh inicial_ □ ×
ssh exploituser@IP

# senha:
pwned123

1. Entrar

Acessar o alvo via SSH usando exploituser@IP e senha pwned123.

2. Enumerar

Rodar os comandos básicos e entender o usuário atual.

3. Pesquisar

Conectar achados com GTFOBins, permissões e configurações.

4. Validar

Testar apenas o caminho que bate com o contexto.

C:\labs\infra-pwn-01_ □ ×
laboratório prático

Ambiente isolado para prática

Inicie uma instância temporária ao final da aula para praticar o conteúdo com segurança.

aguardando login
Faça login para usar o laboratório.