Audit du framework ThinkPHP
Ce qui suit est une introduction à l'audit du framework ThinkPHP de la colonne du didacticiel du framework thinkphp. J'espère que cela sera utile aux amis dans le besoin !
Introduction à ThinkPHP
ThinkPHP est a Il s'agit d'un framework de développement PHP léger, orienté objet, gratuit et open source, rapide et simple. Il a été fondé début 2006 et publié dans le cadre de l'accord open source Apache2. Il est né pour le développement d'applications WEB agiles et le développement simplifié d'applications d'entreprise. ThinkPHP adhère au principe de conception simple et pratique depuis sa naissance tout en conservant d'excellentes performances et un code minimal, il se concentre également sur la facilité d'utilisation. Il possède de nombreuses fonctions et fonctionnalités originales. Grâce à la participation active de l'équipe communautaire, il a été continuellement optimisé et amélioré en termes de facilité d'utilisation, d'évolutivité et de performances. Il est devenu le cadre de développement d'applications WEB le plus leader et le plus influent en Chine. , avec de nombreux cas typiques, garantit qu'il peut être utilisé de manière stable pour le développement commercial et au niveau du portail.
Brève description de la vulnérabilité
Bien que le framework ThinkPHP 5.0.x utilise des requêtes pour faire fonctionner la base de données, mais dans les méthodes d'insertion et de mise à jour, les paramètres transmis sont contrôlables et non strictement filtrés, ce qui a finalement conduit à l'apparition de cette vulnérabilité d'injection SQL.
Analyse de la vulnérabilité d'injection SQL dans le framework ThinkPHP 5.0.x
thinkphpTéléchargez la version 5.0.15 sur le site officiel : http://www.thinkphp.cn/down/1125.html . Configurez la base de données, la base de données est tp, le nom de la table est utilisateur et il y a deux champs identifiant et nom d'utilisateur.
Modifier les informations de configuration de la base de données application/database.php, dans application/config.php Activez le débogage et la trace.
Ajouter une méthode à la classe Index dans application/index/controller/Index.php :
public function testsql() { $username = input('get.username/a'); db('user')->where(['id'=> 1])->insert(['username'=>$username]); }
Notre charge utile cette fois est :
http://127.0.0.1/thinkphp5.0.15/public/index.php/index/index/testsql?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1
L'explication est la suivante :
http://127.0.0.1/thinkphp/ public/ index.php/ index/ index/ index 域名 网站目录 对外访问目录 入口文件 前台 控制器 方法名
Extension :
À propos de la fonction updatexml UPDATEXML (XML_document, XPath_string, new_value) ;
Le premier paramètre : XML_document est au format String et est le nom de l'objet document XML. Le texte est Doc<🎜. >
Le deuxième paramètre : XPath_string (chaîne au format XPath). Si vous ne comprenez pas la syntaxe XPath, vous pouvez trouver des tutoriels sur Internet.
Le troisième paramètre : new_value, format String, remplace les données qualifiées trouvées
Fonction : Modifier la valeur du nœud qualifié dans le document
Accéder à la charge utile pour déclencher la vulnérabilité.
Analyse de vulnérabilité
首先,我们知道 insert 方法存在漏洞,那就查看 insert 方法的具体实现。
通过input获取到参数后,username变量情况如下:
跟入insert,thinkphp/library/think/db/Query.php
然后执行insert语句
$sql = $this->builder->insert($data, $options, $replace);
跟入 thinkphp/library/think/db/Builder.php
跟入parseData至 thinkphp/library/think/db/Builder.php
可以看出$val是数组,且根据$val[0]值为inc,会通过switch语句进入到’inc’:
此处的parseKey,即thinkphp/library/think/db/builder/Mysql.php
此处并未对传入的$key进行更多的过滤与检查,将其与前面经过parseKey的结果进行拼接后返回给result
至此注入成功。
漏洞修复
https://github.com/top-think/framework/commit/363fd4d90312f2cfa427535b7ea01a097ca8db1b
在进行dec和inc操作之前对$val[1]的值进行了再次确认。
总结
第一次审计Thinkphp框架 ,结合Thinkphp5.0手册以及网上教程完成此次漏洞的审计。
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

L'article traite des considérations clés pour l'utilisation de ThinkPHP dans des architectures sans serveur, en se concentrant sur l'optimisation des performances, la conception sans état et la sécurité. Il met en évidence des avantages tels que la rentabilité et l'évolutivité, mais relève également des défis

Le conteneur IOC de ThinkPhp propose des fonctionnalités avancées comme le chargement paresseux, la liaison contextuelle et l'injection de méthode pour une gestion efficace des dépendances dans les applications PHP. COMMANDE CHARACTER: 159

L'article traite du cadre de test intégré de ThinkPhP, mettant en évidence ses principales fonctionnalités telles que les tests d'unité et d'intégration, et comment il améliore la fiabilité des applications grâce à la détection précoce des bogues et à une meilleure qualité de code.

L'article discute de la prévention des vulnérabilités d'injection SQL dans ThinkPhP à travers des requêtes paramétrées, en évitant le SQL brut, en utilisant ORM, des mises à jour régulières et une bonne gestion des erreurs. Il couvre également les meilleures pratiques pour sécuriser les requêtes de base de données et le validat

L'article décrit la création d'un système de file d'attente de tâches distribué à l'aide de ThinkPhp et RabbitMQ, en se concentrant sur l'installation, la configuration, la gestion des tâches et l'évolutivité. Les problèmes clés incluent assurer la haute disponibilité, éviter les pièges communs comme Imprope

L'article traite des différences clés entre ThinkPHP 5 et 6, en se concentrant sur l'architecture, les fonctionnalités, les performances et l'adéquation pour les mises à niveau héritées. ThinkPhp 5 est recommandé pour les projets traditionnels et les systèmes hérités, tandis que ThinkPhp 6 convient au nouveau PR

L'article discute de la mise en œuvre de la découverte de services et de l'équilibrage des charges dans les microservices ThinkPHP, en se concentrant sur la configuration, les meilleures pratiques, les méthodes d'intégration et les outils recommandés. [159 caractères]

L'article traite des meilleures pratiques pour gérer les téléchargements de fichiers et intégrer le stockage cloud dans ThinkPHP, en se concentrant sur la sécurité, l'efficacité et l'évolutivité.
