La colonne du didacticiel du framework thinkphp ci-dessous vous présentera l'audit (partage) du framework ThinkPHP en une minute. J'espère qu'elle 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 Activez le débogage et la trace dans .php.
Ajouter la méthode dans 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]); }
s'explique ainsi :
http://127.0.0.1/thinkphp/ public/ index.php/ index/ index/ index
nom de domaine répertoire du site Web accès externe fichier d'entrée du répertoire contrôleur de réception nom de la méthode
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 作用:改变文档中符合条件的节点的值 访问payload,就可以触发漏洞了。 漏洞分析 首先,我们知道 insert 方法存在漏洞,那就查看 insert 方法的具体实现。 通过input获取到参数后,username变量情况如下: 跟入insert,thinkphp/library/think/db/Query.php 然后执行insert语句 跟入 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手册以及网上教程完成此次漏洞的审计。 相关推荐:最新的10个thinkphp视频教程 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!$sql = $this->builder->insert($data, $options, $replace);