Road to HackMex: Dia 6 - webamok
Writeup: webamok - echoCTF
Información General

Descripción de la máquina
When you're ready to give up, just make sure you dont run amok...
Enumeración
Escaneo Inicial
Corremos un nmap sobre la dirección IP que nos señala servicio SSH en el puerto 22 y servicio HTTP en el puerto 80. Ninguno de los dos corre versiones vulnerables.
Extraño hacer máquinas que tengan servicios en puertos bien esotéricos lol, pero ni modo.

Bueno, también tenemos algunos servicios filtrados en otros puertos pero como es tráfico filtrado, muy rara vez nos vamos a fijar en ellos lol.
Vamos a ver que nos ofrece el servicio HTTP
Análisis de Servicios
Entrando por navegador a la dirección ip de la máquina nos encontramos con un "Sitio en construcción", que además no tiene expuesto un /robots.txt para tomar de referencia, entonces le corremos un dirsearch para ver qué se cuece.

El pedo es que no le tomé screenshot al dirsearch pero bueno jaja, encontramos el panel de admin en /admin/login/ -aunque la ruta completa no es necesario descubrirla, pues /admin nos redirige-. Este panel de administración ya nos dice de una vez que el servicio hosteado se llama WBCE CMS, y comenzamos a probar contraseñas.

Aquí si se dejó con mis defaults más poderosas, porque lit jaló con admin:password JAJAJA

Una vez dentro, estamos dentro del panel de administrador por lo que podemos comenzar a buscar exploits, con la confianza de que podríamos usar un autenticado sin pedos.
Explotación
Busqueda de vulnerabilidades
Me encontré con las siguientes vulnerabilidades para este servicio:
WBCE CMS v1.6.2 - Remote Code Execution (RCE) - PHP webapps Exploit
capture0x/WBCE_CMS: WBCE CMS Version : 1.6.1 Remote Command Execution
Las dos se sirven de un file upload para lograr remote command execution, solamente que una lo sube directamente como media -como lo hemos estado viniendo haciendo desde hace ya rato- mientras que la otra se sirve de la funcionalidad de paquetes de lenguajes que tiene el CMS para subir un install.php malicioso. Por una suerte de navaja de Ockham (no porque sea huevón), siempre vamos a preferir la primera opción más simple.
Intentos de explotaciones
Entonces, primero intentemos con la que se sirve de subir un archivo .inc con una webshell interactiva para ver qué sale.
Y no sé si fue por no haber replicado la solicitud al pié de la letra o porque de plano el servicio estaba bien configurado de este lado, pero a la hora de intentar utilizar la webshell, nos encontramos con que simplemente es inutilizable... Por más comandos que mandemos, no podemos encontrar la forma de que sean interpretados.

Entonces, vamos a comprobar si el otro funciona.
Explotación
Vamos a probar la segunda, la cual se sirve de utilizar la funcionalidad de instalar paquetes de lenguajes que tiene el CMS.
La funcionalidad de instalar lenguajes existe en /admin/languages/install.php.
Aquí vamos a encontrar una subida de archivos que concretamente acepta un archivo upgrade.php, el cual en realidad puede ir cargado con nuestra payload sin tanto saldo pa no llamar la atención, pues aunque el "paquete de lenguaje" es rechazado, el código en su interior siempre es interpretado. En este caso, lo usamos para obtener la bandera de /etc/passwd

Entonces, pues le mandamos un netcat por acá y nos ponemos a la escucha. Recibiremos la conexión y we're in.

Tiramos un env para intentar sacar la bandera en las variables de entorno, que efectivamente ahí va a estar, y de paso tiramos un sudo -l para ver qué tal está el cotorreo por acá.
Escalación de Privilegios
Análisis

Como podemos ver, podemos correr un binario llamado amok -ya nos dió la pista la descripción de la máquina. El cual ahora vamos a analizar. Ya de paso señalamos que tenemos env_reset y secure path por lo que no sale path hijacking

Este es un script en python que se sirve de las librerías pydash y random para hacer alguna cosa rara. La neta no me voy a detener a leer el código, vámonos a los madrazos y buscar si hay alguna vulnerabilidad en estas dos librerías.
Command Injection in pydash | CVE-2023-26145 | Snyk
Y esta vulnerabilidad encontrada en la biblioteca pydash no es solo muy ad hoc al código. Literalmente su prueba de concepto es el código
Entonces pues nos lo vamos a torcer usando el mismo ejemplo de dicha PoC
Explotación

Aquí confirmo la escalada de privilegios mediante el binario, pero hay que recordar que el script en python solamente nos retorna el resultado del comando ejecutado, por lo que no podemos directamente invocar un /bin/bash desde aquí. Podríamos:
- Invocar un netcat
- Dumpear las banderas usando esta ejecución de comandos como root
Adivinaste pa, voy a usar la segunda.
El ultimo parámetro recibido es el comando a ejecutar, si lo encerramos entre comillas simples podemos ejecutar comandos de varias líneas. Primero un 'ls -la /root' y luego un 'cat /etc/shadow'

headshot