Après avoir solutionné Who Wants To Be King: 1, je me suis penché sur le second opus, histoire de voir s’il était aussi mauvais ou non que le premier. C’est par pure curiosité scientifique. Je dirais même que je suis dans une approche éthologique humaine.
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
Nmap scan report for 192.168.56.58
Host is up (0.00022s latency).
Not shown: 65529 closed tcp ports (reset)
PORT STATE SERVICE VERSION
21/tcp open ftp ProFTPD
80/tcp open http Apache httpd 2.4.46 ((Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0)
| http-title: Welcome to XAMPP
|_Requested resource was http://192.168.56.58/dashboard/
|_http-server-header: Apache/2.4.46 (Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0
139/tcp open netbios-ssn Samba smbd 4.6.2
443/tcp open ssl/http Apache httpd 2.4.46 ((Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0)
|_ssl-date: TLS randomness does not represent time
|_http-server-header: Apache/2.4.46 (Unix) OpenSSL/1.1.1h PHP/7.2.34 mod_perl/2.0.11 Perl/v5.32.0
| tls-alpn:
|_ http/1.1
| ssl-cert: Subject: commonName=localhost/organizationName=Apache Friends/stateOrProvinceName=Berlin/countryName=DE
| Not valid before: 2004-10-01T09:10:30
|_Not valid after: 2010-09-30T09:10:30
| http-title: Welcome to XAMPP
|_Requested resource was https://192.168.56.58/dashboard/
445/tcp open netbios-ssn Samba smbd 4.6.2
3306/tcp open mysql?
| fingerprint-strings:
| NULL:
|_ Host '192.168.56.1' is not allowed to connect to this MariaDB server
Humour brésilien
D’expérience, les scanners ont parfois du mal à dialoguer avec SMB. Rien de mieux que d’utiliser ce vieux briscard de smbclient
:
1
2
3
4
5
6
7
$ smbclient -U "" -N -L //192.168.56.58
Sharename Type Comment
--------- ---- -------
liteshare Disk
IPC$ IPC IPC Service (Linux Lite Shares)
SMB1 disabled -- no workgroup available
Le partage en question est inacessible mais on sait au moins qu’il y en a un.
Quand on accéde au port 80 on est directement redirigé sur une instance de XAMPP :
Welcome to XAMPP for Linux 7.2.34
7.2.34 semble être la version de PHP qu’on retrouve dans le phpinfo disponible. On retient que le document root est /opt/lampp/htdocs
.
Le fichier de log est à un emplacement que je n’aurais pas trouvé sans le phpinfo : /opt/lampp/logs/php_error_log
.
Devant le manque d’informations supplémentaires, je lance feroxbuster
qui trouve un blog Wordpress :
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
$ feroxbuster -u http://192.168.56.58/ -w fuzzdb/discovery/predictable-filepaths/filename-dirname-bruteforce/raft-large-directories.txt -n
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.4.0
───────────────────────────┬──────────────────────
🎯 Target Url │ http://192.168.56.58/
🚀 Threads │ 50
📖 Wordlist │ fuzzdb/discovery/predictable-filepaths/filename-dirname-bruteforce/raft-large-directories.txt
👌 Status Codes │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500]
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.4.0
🚫 Do Not Recurse │ true
🎉 New Version Available │ https://github.com/epi052/feroxbuster/releases/latest
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Cancel Menu™
──────────────────────────────────────────────────
301 7l 20w 239c http://192.168.56.58/webalizer
403 45l 115w 0c http://192.168.56.58/phpmyadmin
301 7l 20w 239c http://192.168.56.58/wordpress
301 7l 20w 239c http://192.168.56.58/dashboard
301 7l 20w 233c http://192.168.56.58/img
302 0l 0w 0c http://192.168.56.58/
[####################] - 48s 62260/62260 0s found:6 errors:0
[####################] - 47s 62260/62260 1303/s http://192.168.56.58/
L’URL /wordpress
redirige vers http://armbjorn/wordpress/
. Il faut donc rajouter une entrée au /etc/hosts
.
On peut aussi lancer wpscan
dessus. Attention à là aussi passer l’option pour la correspondance de l’hôte :
1
docker run --add-host armbjorn:192.168.56.58 -it --rm wpscanteam/wpscan --url http://armbjorn/wordpress/ -e ap,at,cb,dbe --plugins-detection aggress
1
2
3
4
5
6
7
8
9
10
[+] WordPress theme in use: twentytwenty
| Location: http://armbjorn/wordpress/wp-content/themes/twentytwenty/
| Latest Version: 2.1 (up to date)
| Last Updated: 2022-11-02T00:00:00.000Z
| Style URL: http://armbjorn/wordpress/wp-content/themes/twentytwenty/style.css
| Style Name: are you ok? armbjorn
| Style URI: https://wordpress.org/themes/twentytwenty/
| Description: "aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj11RXQ1bFlYd1QtVQo="...
| Author: the WordPress team
| Author URI: https://wordpress.org/
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
56
57
[+] akismet
| Location: http://armbjorn/wordpress/wp-content/plugins/akismet/
| Latest Version: 5.0.1
| Last Updated: 2022-11-08T05:36:00.000Z
|
| Found By: Known Locations (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/akismet/, status: 403
|
| The version could not be determined.
[+] meta-generator-and-version-info-remover
| Location: http://armbjorn/wordpress/wp-content/plugins/meta-generator-and-version-info-remover/
| Last Updated: 2022-06-12T04:01:00.000Z
| Readme: http://armbjorn/wordpress/wp-content/plugins/meta-generator-and-version-info-remover/readme.txt
| [!] The version is out of date, the latest version is 15.0
| [!] Directory listing is enabled
|
| Found By: Known Locations (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/meta-generator-and-version-info-remover/, status: 200
|
| Version: 11.0 (100% confidence)
| Found By: Readme - Stable Tag (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/meta-generator-and-version-info-remover/readme.txt
| Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/meta-generator-and-version-info-remover/readme.txt
[+] stop-user-enumeration
| Location: http://armbjorn/wordpress/wp-content/plugins/stop-user-enumeration/
| Last Updated: 2022-11-14T22:13:00.000Z
| Readme: http://armbjorn/wordpress/wp-content/plugins/stop-user-enumeration/readme.txt
| [!] The version is out of date, the latest version is 1.4.5
| [!] Directory listing is enabled
|
| Found By: Known Locations (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/stop-user-enumeration/, status: 200
|
| Version: 1.3.29 (100% confidence)
| Found By: Readme - Stable Tag (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/stop-user-enumeration/readme.txt
| Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/stop-user-enumeration/readme.txt
[+] wps-limit-login
| Location: http://armbjorn/wordpress/wp-content/plugins/wps-limit-login/
| Last Updated: 2022-05-25T13:10:00.000Z
| Readme: http://armbjorn/wordpress/wp-content/plugins/wps-limit-login/readme.txt
| [!] The version is out of date, the latest version is 1.5.6
| [!] Directory listing is enabled
|
| Found By: Known Locations (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/wps-limit-login/, status: 200
|
| Version: 1.5 (100% confidence)
| Found By: Readme - Stable Tag (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/wps-limit-login/readme.txt
| Confirmed By: Readme - ChangeLog Section (Aggressive Detection)
| - http://armbjorn/wordpress/wp-content/plugins/wps-limit-login/readme.txt
On peut voir que l’auteur a rajouté quelques plugins de sécurité pour rendre impossible les attaques brute force.
Il a aussi édité le readme
du thème par défaut (twentytwenty
) pour que certains indices apparaissent lors du scan.
Ici l’indice est spiderman
qui est le nom d’un dossier à l’adresse /wordpress/spiderman
. On l’aurait aussi trouvé via une énumération web.
A cette adresse se trouve un fichier baptisé secret qui est en réalité une archive ZIP contenant 3 images, toutes des meme en rapport avec le comic book Spiderman (à priori piochés sur @_spidermemes).
1
2
3
4
5
6
7
8
9
10
11
$ file secret
secret: Zip archive data, at least v2.0 to extract, compression method=deflate
$ unzip -l secret
Archive: secret
Length Date Time Name
--------- ---------- ----- ----
58188 2020-12-12 09:52 5212ed22df5f1.jpeg
13701 2020-12-12 09:53 5269255c8fa23.jpeg
58521 2020-12-12 11:04 541b1217c0c16.jpeg
--------- -------
130410 3 files
L’une de ces images contient des métadonnées :
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
ExifTool Version Number : 12.45
File Name : 541b1217c0c16.jpeg
Directory : .
File Size : 59 kB
File Modification Date/Time : 2020:12:12 11:04:31+01:00
File Access Date/Time : 2022:11:17 09:36:34+01:00
File Inode Change Date/Time : 2022:11:17 09:36:07+01:00
File Permissions : -rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Exif Byte Order : Big-endian (Motorola, MM)
Make : armbjorn - spiderman is sexy?
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
Y Cb Cr Positioning : Centered
Current IPTC Digest : 392a623de95c8b4c5139d474a9e4d524
Source : uwer89j
Image Width : 478
Image Height : 360
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 478x360
Megapixels : 0.172
On pourrait imaginer que uwer89j
est une métadonnée provenant réellement de l’image originale. En revanche aucun doute que celle préfixée du nom de l’auteur du CTF est custom.
En toute logique les identifiants armjborn
/ spiderman is sexy?
devraient être acceptés sur l’interface d’administration du Wordpress
…. mais ce n’est pas le cas.
Joint de culasse
On passe donc directement en mode sous le capot en modifiant l’entrée GRUB au boot de la VM pour lancer un bash root.
Déjà il n’y a pas d’utilisateur Unix nommé armbjorn
. Juste un utilisateur nommé osboxes
.
A l’aide des identifiants MySQL choppés dans le fichier de configuration du Wordpress je peux accèder à la table wp_users
et obtenir le hash de armbjorn
: $P$BYh0g8tGfkHg2LR6QxbgHkCTnica3.0
.
Le hash ne tombe pas avec ce qu’on a trouvé jusqu’à présent. L’utilisateur de RockYou ne semble aboutit nul part non plus.
Mais admettons que l’on soit parvenu à récupérer un accès au Wordpress, éditer un fichier PHP du thème présent puis obtenir un web shell.
On aurait alors noté la présence de deux fichiers lisibles dans le dossier de osboxes
:
1
2
-rw-rw-r-- 1 osboxes osboxes 72239 Dec 8 2020 dict.txt
-rw-rw-r-- 1 osboxes osboxes 358 Dec 8 2020 hi.zip
On aurait vu que le ZIP était protégé par mot de passe donc on aurait utillisé zip2john
avant de casser le hash et extraire le fichier :
1
2
3
4
5
6
7
8
9
$ ./john --wordlist=dict.txt hello.hash
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, almost any other key for status
inbox (hi.zip/hello)
1g 0:00:00:00 DONE 20.00g/s 163840p/s 163840c/s 163840C/s the..wage
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Le fichier contient un indice :
Hey Mary James, how are you today?
The other time we were on a romantic date you asked me to give you Uncle Ben’s password, well it’s in the sqlite file in the browser folder
Ilove you Spiderman (100% peter parker, never black spiderman)
Double peine
Ok donc il faut récupérer un mot de passe dans un des fichiers sqlite du dossier Mozilla de l’utilisateur osboxes
.
Sauf que… le dossier n’est pas accessible en lecture :
1
2
daemon@osboxes:/opt/lampp/htdocs$ ls /home/osboxes/.mozilla/
ls: cannot open directory '/home/osboxes/.mozilla/': Permission denied
daemon
étant l’utilisateur que l’on aurait récupéré ici si on avait pu avoir un webshell.
J’ai tenté de casser le hash de l’utilisateur osboxes
aussi… sans succès.
Effectivement si on disposait de droits nécessaires on aurait eu le mot de passe :
1
2
3
4
5
6
7
8
$ sqlite3 firefox/wjjbvyxi.default-release/formhistory.sqlite
SQLite version 3.39.3 2022-09-05 11:02:23
Enter ".help" for usage hints.
sqlite> .tables
moz_deleted_formhistory moz_history_to_sources
moz_formhistory moz_sources
sqlite> select * from moz_formhistory;
1|searchbar-history|http://passwordofrootis:goodbyeseeyoulater/|1|1607445708246000|1607445708246000|rKYjrm8mS2aJOo8G
Et finalement obtenu le flag final :
1
2
3
4
5
6
7
8
9
root ~ cat nice.txt
_________ __ .__ __ .__
\_ ___ \ ____ ____ ________________ _/ |_ __ __| | _____ _/ |_|__| ____ ____
/ \ \/ / _ \ / \ / ___\_ __ \__ \\ __\ | \ | \__ \\ __\ |/ _ \ / \
\ \___( <_> ) | \/ /_/ > | \// __ \| | | | / |__/ __ \| | | ( <_> ) | \
\______ /\____/|___| /\___ /|__| (____ /__| |____/|____(____ /__| |__|\____/|___| /
\/ \//_____/ \/ \/ \/
Have a good day
Bref le CTF est cassé, je vais gagner du temps en ne regardant pas les CTFs du même auteur.