Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !
CVE-2022-1565 — Exploit d'exécution de code à distance authentifié pour le plugin WordPress WP All Import <= 3.6.7 (CVE-2022-1565). Téléverse des fichiers arbitraires via une validation de type de fichier non sécurisée dans wp_all_import_get_gz.php. | Kitploit
Exploit d'exécution de code à distance authentifié pour le plugin WordPress WP All Import <= 3.6.7 (CVE-2022-1565). Téléverse des fichiers arbitraires via une validation de type de fichier non sécurisée dans wp_all_import_get_gz.php.
Plugin WordPress WP All Import <= 3.6.7 - Exécution de code à distance (RCE) (Authentifié)
root@kitploit:~
Date: 05 novembre 2023
Auteur de l'exploit: Việt HÙng (https://github.com/phanthibichtram12)
Site du fournisseur: https://www.wpallimport.com/
Lien du logiciel: https://wordpress.org/plugins/wp-all-import/advanced/ (faites défiler pour sélectionner la version)
Version: <= 3.6.7 (testée: 3.6.7)
Testé sur: WordPress 6.1 (indépendant du système d'exploitation car cet exploit NE fournit PAS de charge utile)
CVE: CVE-2022-1565
DESCRIPTION DE LA VULNÉRABILITÉ
Le plugin WP All Import est vulnérable à un téléchargement arbitraire de fichiers en raison d'un manque de validation du type de fichier via le fichier wp_all_import_get_gz.php dans les versions jusqu'à 3.6.7 incluse.
Cela permet à des attaquants authentifiés, disposant de privilèges d'administrateur ou supérieurs, de télécharger des fichiers arbitraires sur le serveur du site affecté, ce qui peut conduire à une exécution de code à distance.
COMMENT L'EXPLOIT FONCTIONNE
1. Préparer le fichier zip:
créer un fichier PHP avec votre charge utile (ex: shell inversé)
définir la variable "payload_file_name" avec le nom de ce fichier (ex: "shell.php")
créer un fichier zip contenant la charge utile
définir la variable "zip_file_to_upload" avec le CHEMIN de ce fichier (ex: "/root/shell.zip")
2. Se connecter avec un compte administrateur:
définir la variable "target_url" avec l'URL de base de la cible (NE PAS terminer la chaîne par une barre oblique /)
définir la variable "admin_user" avec le nom d'utilisateur du compte administrateur
définir la variable "admin_pass" avec le mot de passe du compte administrateur
3. Récupérer wpnonce via la méthode get_wpnonce_upload_file()
il existe en réalité 2 types de wpnonce :
le premier wpnonce sera récupéré via la méthode get_wpnonce_edit_settings() à l'intérieur de la classe PluginSetting.
Ce wpnonce nous permet de modifier les paramètres du plugin (voir étape 4)
le second wpnonce sera récupéré via la méthode get_wpnonce_upload_file() à l'intérieur de la classe PluginSetting.
Ce wpnonce nous permet de télécharger le fichier
4. Vérifier si le mode sécurisé du plugin est activé via la méthode check_if_secure_mode_is_enabled() à l'intérieur de la classe PluginSetting
si le mode sécurisé est activé, le contenu du zip sera placé dans un dossier avec un nom aléatoire.
L'exploit désactivera le mode sécurisé.
En désactivant le mode sécurisé, le contenu du zip sera placé dans le dossier principal (voir la variable payload_url).
La méthode appelée pour activer et désactiver le mode sécurisé est set_plugin_secure_mode(set_to_enabled:bool, wpnonce:str)
si le mode sécurisé N'EST PAS activé, l'exploit téléchargera le fichier mais ensuite il N'activera PAS le mode sécurisé.
5. Télécharger le fichier via la méthode upload_file(wpnonce_upload_file: str)
après le téléchargement, le serveur répondra avec HTTP 200 OK mais cela ne signifie pas que le téléchargement est terminé avec succès.
La réponse contiendra du JSON ressemblant à ceci :
{"jsonrpc":2.0","error":{"code":102,"message": Vui lòng xác minh rằng tệp bạn tải lên là tệp ZIP hợp lệ."},"is_valid":false,"id" :"nhận dạng"}
Comme vous pouvez le voir, il signale une erreur avec le code 102 mais d'après les tests que j'ai effectués, le téléchargement est terminé
6. Réactiver le mode sécurisé s'il était activé via la méthode switch_back_to_secure_mode()
7. Activer la charge utile via la méthode activate_payload()
vous pouvez définir la méthode pour activer la charge utile.
La raison derrière ce choix est que cet exploit NE fournit AUCUNE charge utile.
Puisque vous pouvez utiliser une charge utile personnalisée, vous pouvez souhaiter l'activer via une requête HTTP POST plutôt qu'une requête HTTP GET, ou vous pouvez vouloir passer des paramètres
POURQUOI L'EXPLOIT DÉSACTIVE-T-IL LE MODE SÉCURISÉ?
Selon le PoC de cette vulnérabilité fourni par WPSCAN, nous pouvons récupérer les fichiers téléchargés en accédant à la "page des importations gérées".
Je ne sais pas pourquoi mais après avoir téléchargé un fichier, je ne peux pas voir le fichier téléchargé sur cette page (peut-être que la version Pro est nécessaire?).
J'ai dû trouver une alternative et je l'ai fait en exploitant cette option.
Lors des tests, j'ai remarqué que je téléchargeais un fichier XML invalide et c'est pourquoi le fichier n'apparaissait pas dans la "page des importations gérées"
Quoi qu'il en soit, cette méthode de désactivation du mode sécurisé est un peu plus "furtive" car le contenu téléchargé n'apparaît pas sur la page d'administration.
Si vous souhaitez voir le fichier téléchargé sur la page d'administration, plus d'étapes sont nécessaires.
Y A-T-IL DES PROBLÈMES AVEC L'EXPLOIT?
Pour que l'exploit soit efficace, veuillez considérer ce qui suit:
vérifier target_url et les identifiants de l'administrateur
vérifier le chemin du fichier zip et le nom de la charge utile (ils peuvent être différents)
si vous testez localement, essayez de définir verify_ssl_certificate sur False
vous pouvez utiliser print_response(http_response) pour approfondir l'investigation