SQLmap injection SQL pentest

En tant que pentesters, chaque fois que nous obtenons les droits d’administration sur un site web WordPress nous savons que nous sommes très proches de la RCE. En effet, que ce soit par la modification du thème ou l’ajout d’un module, l’exécution de code PHP arbitraire n’est en général pas compliquée à obtenir. Par ailleurs, l’auditeur pourra trouver de nombreux articles à ce sujet sur Google :

Résultats Google WordPress admin RCE module

Cela fait plusieurs fois que des pentesters DSecBypass parviennent à devenir administrateur de sites web PrestaShop et l’absence de littérature sur le sujet, comparativement à celle disponible pour WordPress, les a poussés à écrire cet article.

Résultats Google PrestaShop admin RCE module

Découvrez comment construire un module PrestaShop modifié de manière à exécuter du code PHP arbitraire pendant vos tests d’intrusion.

Construire le module PrestaShop

PrestaShop propose une interface web pratique pour créer un squelette de module valide : https://validator.prestashop.com/generator.

Attention, cette étape est importante car de mauvaises options peuvent rendre l’interface d’administration ou le shop inaccessibles. C’est pourquoi nous préférons générer un module qui interagit seulement avec l’interface d’administration et qui n’est pas instancié automatiquement. Dans le doute, testez sur une version répliquée en local de PrestaShop.

Pour l’exercice, nous faisons en sorte que le module ne soit pas trop visible dans la liste des modules en remplissant les champs avec des valeurs probables. Notez le champs « Module name » qu’il vaut mieux randomiser car il est utilisé pour créer le dossier sur le système de fichier et se retrouve donc dans l’URL finale. Afin de ne pas voir le nom de son entreprise de pentest indexée par les moteurs de recherche, il est préférable d’y insérer ici une chaîne de caractères aléatoires.

Création module PrestaShop pentest

Il est préférable de positionner « Need instance » sur « No » pour éviter de générer une erreur 500 sur le back-office. Concernant la « Compliancy », l’adapter en fonction de l’âge du PrestaShop que vous visez. La valeur max n’a pas d’importance réelle car le code du module utilise ensuite la valeur de « _PS_VERSION_ ».

Création module PrestaShop pentest étape 2

 D’expérience, le module a plus de chances de fonctionner avec le hook « Administration panel footer » :

Création module PrestaShop pentest étape 3

En cliquant sur « Create » l’archive ZIP du module est téléchargée.

Arborescence module prestashop

Modification du module PrestaShop avec un WebShell

Le but est d’inclure le code PHP d’un WebShell dans ce plugin nouvellement créé.

Il est possible de simplement ajouter le fichier PHP de votre WebShell préféré dans l’archive et de l’uploader. Mais pour rester dans l’optique d’avoir un module qui ne soit pas trop suspect, nous modifions le fichier « index.php » accessible à la racine de l’archive. La seule ligne ajoutée dans le screenshot ci-dessous est la surlignée.

Modification index.php avec WebShell

Attention : le webshell utilisé ici est à titre d’exemple. Son accès n’est pas authentifié ce qui peut mettre en danger l’infrastructure de votre client. Préférez des webshells sécurisés ou reverse shells PHP.

Une fois l’archive reformée, nous pouvons uploader le module PrestaShop contenant notre WebShell. Il suffit d’aller dans le menu Modules de l’interface d’administration. Cette dernière peut être compliquée à découvrir puisque PrestaShop incite les administrateurs à modifier le chemin vers le dashboard administrateur. Nous supposons ici que les lecteurs connaissent ce chemin et disposent d’un compte administrateur.

Menu modules PrestaShop

Si le module est mal formé (archive mal reconstruite, erreur dans le code PHP) il se peut qu’une erreur soit retournée :

Module PrestaShop upload erreur 500

Selon le type d’erreur, le module peut avoir été déployé avec succès mais il y a de fortes chances que le menu « Modules » soit désormais cassé (erreur 500). Etant donné qu’il a été déployé, vous pouvez accéder à votre webshell pour supprimer ce nouveau module et essayer de corriger le problème.

Si les étapes de création du module ont été bien suivies, le message suivant devrait plutôt apparaître :

PrestaShop webshell module uploaded

Utilisation du WebShell

Une fois le module PrestaShop correctement uploadé, il devrait apparaître dans la liste des modules (ici « Cache management ») :

Liste modules PrestaShop WebShell

Une icône pourrait être ajoutée pour le rendre encore moins visible.

Si un administrateur essaye de le désinstaller, le message renseigné lors de la création du module sera affiché afin de le dissuader :

Avertissement désinstallation plugin PrestaShop

Nous pouvons confirmer que le module est bien déployé sur le système de fichier de notre environnement local :

WebShell module PrestaShop sur le système de fichier

Il ne nous reste donc plus qu’à utiliser notre WebShell et continuer le pentest :

PrestaShop module RCE en tant qu'admin

🛡️ DSecBypass vous accompagne sur l’audit de sécurité de vos applications Web. N’hésitez pas à nous contacter pour des informations complémentaires et/ou un devis personnalisé 📝.