Maison développement back-end tutoriel php Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

Mar 21, 2019 pm 03:34 PM
thinkphp5 漏洞分析

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

1. Introduction à la vulnérabilité

Le 11 janvier 2019, l'équipe ThinkPHP a publié une mise à jour pour corriger A. Une vulnérabilité d'exécution de code à distance causée par des appels de fonctions dynamiques non sécurisés a été découverte. Cette vulnérabilité est très dangereuse et peut exécuter du code à distance par défaut. Après avoir effectué une analyse et une vérification du code source sur plusieurs versions de ThinkPHP, les chercheurs en sécurité de Venus ADLab ont confirmé que la version spécifiquement concernée est la version complète de ThinkPHP 5.0-5.0.23.

2. Reproduction de vulnérabilité

L'environnement local utilise la version complète de ThinkPHP 5.0.22 + PHP5.5.38 + Apache pour se reproduire. Après avoir installé l'environnement, exécutez le POC pour exécuter les commandes système, comme indiqué dans la figure :

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

Analyse des vulnérabilités

.

Selon le site officiel La version complète téléchargée de la 5.0.22 a été analysée et les points clés de la vulnérabilité ont d'abord été localisés :

thinkphp/library/think/Request.php:518
Copier après la connexion

Dans la deuxième branche if de la fonction méthode, un message externe données contrôlables $_POST[Config: :get['var_method']. La valeur de var_method est _method.

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

La fonction __construct de la classe Request est la suivante :

Le paramètre $options étant contrôlable, un attaquant peut remplacer l'attribut filter, l'attribut méthode Et obtenir de cette classe La valeur de l'attribut. Dans la fonction param de la classe Request :

Lorsque $this->mergeParam est vide, $this->get(false) sera appelé ici. Suivez la fonction $this->get :

La fonction $this->input est appelée à la fin de la fonction, et $this->get est transmise, et la valeur de $this ->get est l'attaque contrôlable. Suivez la fonction $this->input :

Cette fonction appelle $this->getFileter pour obtenir le filtre. Le corps de la fonction est le suivant :

$this->La valeur du filtre est remplacée et contrôlée par l'attaquant en appelant le constructeur. Après avoir renvoyé la valeur, il entrera dans la fonction d'entrée :

<. 🎜>Affichez la fonction filterValue comme suit :

Dans l'appel de la fonction call_user_func, $filter est contrôlable et $value est contrôlable. Par conséquent, l’exécution de code peut être provoquée.

Processus de déclenchement de vulnérabilité :

Démarrer l'analyse depuis le point d'entrée de ThinkPHP5 :

thinkphp/library/think/App.php:77
Copier après la connexion
La première ligne de la fonction run instancie un Classe de requête et attribuée à $request. Appelez ensuite routeCheck($request,$config) :

Ici, Route::check est appelé pour la détection d'itinéraire. La fonction est la suivante :

Faites attention à la partie police rouge. Correspond à la première étape du début, qui consiste à appeler la fonction méthode pour la couverture variable. Les propriétés qui doivent être remplacées ici sont $this->filter, $this->method, $this->get. Étant donné que la valeur de retour de $request->method() est $this->method, cette valeur doit également être contrôlée. La valeur de retour ici est affectée à $method, puis la valeur de self::$rules[$method] est retirée et donnée à $rules. Notez ici : THINKPHP5 dispose d'un mécanisme de chargement automatique de classe, qui chargera automatiquement certains fichiers dans le répertoire du fournisseur. Cependant, la structure du répertoire des fournisseurs de la version complète et de la version principale est différente.

La structure des répertoires de la version complète est la suivante :

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

La structure des répertoires de la version principale est la suivante :

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

Vous pouvez voir que la version complète contient plusieurs dossiers de plus que la version principale. Ce qui nécessite une attention particulière, c'est qu'il y a un fichier helper.php dans le dossier think-captcha/src :

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

La fonction thinkRoute::get est appelée ici pour enregistrer l'itinéraire . L'impact de cette étape est de changer la valeur de self::$rules mentionnée ci-dessus. Ce n'est qu'avec cet itinéraire que le RCE peut être effectué, sinon il ne réussira pas. C'est pourquoi cela n'affecte que la version complète et non la version principale. A ce moment, la valeur de self::$rules est :

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

Ensuite, lorsque l'attaquant contrôle la valeur de $method renvoyée pour être récupérée, la valeur de $rules est-ce des règles de routage. Revenez ensuite à ce qui précède pour obtenir $rules et obtenez la valeur de $item en fonction de l'URL entrante, de sorte que la valeur de $rules[$item] soit le tableau de routage captcha, et vous puissiez en outre appeler self :: fonction parseRule. Le corps de la fonction est légèrement plus long, voici les points clés :

La valeur de $route transmise à ce moment est thinkcaptchaCaptchaController@index. Par conséquent, nous entrons dans la branche if marquée en rouge. Dans cette branche, la valeur correspondant à la clé 'type' de $result est 'method'. Ensuite, $result est renvoyé couche par couche à la fonction d'exécution et affecté à $dispatch.

Ensuite, introduisez $dispatch dans la fonction self::exec :

Entrez la branche marquée en rouge, qui appelle la méthode param de la classe Request. Par conséquent, la troisième étape de la chaîne d’exploitation est satisfaite, provoquant l’exécution de la commande.

Les chercheurs en sécurité de Venus ADLab ont analysé chaque version de ThinkPHP5.0-5.0.23 et ont découvert que ThinkPHP5.0.2-5.0.23 peut utiliser le même POC, tandis que ThinkPHP5.0-5.0.1 doit être modifié. Jetons un coup d'œil au POC. La raison réside dans une petite différence d'implémentation de la fonction de règle de Route.php.

ThinkPHP5.0-5.0.1 version thinkphp/library/think/Route.php:235, convertissez $type en majuscule :

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

Dans ThinkPHP5. Version 0.2-5.0.23, la fonction de règle convertit $type en minuscules :

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

4. Analyse des correctifs

Dans ThinkPHP5. 0.24, le jugement de la méthode $this->a été ajouté et l'appel libre des fonctions de classe n'est plus autorisé.

Classe de base ThinkPHP5 Demander une analyse de vulnérabilité du code à distance

5. Conclusion

Il est fortement recommandé aux utilisateurs de mettre à niveau vers ThinkPHP version 5.0.24 et de ne pas activer le mode débogage pour éviter d'être attaqué.

Recommandations associées : "Tutoriel PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que dois-je faire si j'obtiens une erreur lors du déploiement de thinkphp5 dans Pagoda ? Que dois-je faire si j'obtiens une erreur lors du déploiement de thinkphp5 dans Pagoda ? Dec 19, 2022 am 11:04 AM

Solution à l'erreur signalée lors du déploiement de thinkphp5 dans Pagoda : 1. Ouvrez le serveur Pagoda, installez l'extension php pathinfo et activez-la ; 2. Configurez le fichier « .access » avec le contenu « RewriteRule ^(.*)$ index.php » ?s=/$1 [QSA ,PT,L]”; 3. Dans la gestion du site Web, activez simplement le pseudo-statique de thinkphp.

Que dois-je faire si la réécriture d'URL thinkphp5 échoue ? Que dois-je faire si la réécriture d'URL thinkphp5 échoue ? Dec 12, 2022 am 09:31 AM

Solution pour que la réécriture d'URL thinkphp5 ne fonctionne pas : 1. Vérifiez si le module mod_rewrite.so est chargé dans le fichier de configuration httpd.conf ; 2. Remplacez None dans AllowOverride None par All ; (.*)$ index.php [L,E=PATH_INFO:$1]" et enregistrez-le.

Que dois-je faire si la publication thinkphp5 ne parvient pas à obtenir la valeur ? Que dois-je faire si la publication thinkphp5 ne parvient pas à obtenir la valeur ? Dec 06, 2022 am 09:29 AM

thinkphp5 post ne peut pas obtenir de valeur car TP5 utilise la fonction strpos pour trouver la chaîne app/json dans la valeur de type de contenu de l'en-tête. La solution consiste à définir la valeur de type de contenu de l'en-tête sur app/json.

Comment obtenir l'URL demandée dans thinkphp5 Comment obtenir l'URL demandée dans thinkphp5 Dec 20, 2022 am 09:48 AM

Méthodes permettant à thinkphp5 d'obtenir l'URL demandée : 1. Utilisez la méthode "$request = Request::instance();" de la classe "\think\Request" pour obtenir les informations actuelles sur l'URL ; fonction "$request-> url()" pour obtenir l'adresse URL complète incluant le nom de domaine.

Comment supprimer l'icône de la barre de titre thinkphp5 Comment supprimer l'icône de la barre de titre thinkphp5 Dec 20, 2022 am 09:24 AM

Comment supprimer l'icône de la barre de titre thinkphp5 : 1. Recherchez le fichier favicon.ico sous le framework thinkphp5 public. 2. Supprimez le fichier ou choisissez une autre image pour le renommer en favicon.ico et remplacez le fichier favicon.ico d'origine.

Que dois-je faire si thinkphp5 indique que le contrôleur n'existe pas ? Que dois-je faire si thinkphp5 indique que le contrôleur n'existe pas ? Dec 06, 2022 am 10:43 AM

Solution pour thinkphp5 indiquant que le contrôleur n'existe pas : 1. Vérifiez si l'espace de noms dans le contrôleur correspondant est écrit correctement et remplacez-le par le bon espace de noms ; 2. Ouvrez le fichier tp correspondant et modifiez le nom de la classe.

Analyse et prévention des vulnérabilités typiques des applications réseau Analyse et prévention des vulnérabilités typiques des applications réseau Jun 11, 2023 pm 08:36 PM

Avec la popularisation d'Internet, de plus en plus d'applications réseau apparaissent et divers sites Web, applications, petits programmes, etc. sont partout. Les applications réseau nous apportent commodité et divertissement, mais elles comportent également des risques pour la sécurité. L'existence de vulnérabilités des applications réseau peut facilement être exploitée par des pirates informatiques, entraînant des problèmes de sécurité tels que des fuites de données, le vol d'informations personnelles, le vol de comptes et des attaques réseau. Cet article commencera par les vulnérabilités courantes des applications réseau, analysera les causes et proposera des mesures préventives. Vulnérabilité d'injection SQL La vulnérabilité d'injection SQL est une vulnérabilité courante exploitée par les pirates pour attaquer les bases de données.

Comment définir des invites d'erreur dans thinkphp5 Comment définir des invites d'erreur dans thinkphp5 Dec 07, 2022 am 10:31 AM

Comment définir les invites d'erreur dans thinkphp5 : 1. Entrez le dossier public dans le répertoire racine du projet et ouvrez le fichier d'entrée index.php ; 2. Affichez les commentaires sur le commutateur de mode de débogage ; 3. Ajustez la valeur de la constante "APP_DEBUG" ; sur true pour afficher l'invite de message d'erreur.

See all articles