Heim >PHP-Framework >Denken Sie an PHP >Erfahren Sie in einer Minute mehr über die Prüfung des ThinkPHP-Frameworks (Teilen)
Die folgende Spalte mit den Tutorials zum ThinkPHP-Framework führt Sie in einer Minute in die Prüfung (Freigabe) des ThinkPHP-Frameworks ein. Ich hoffe, dass es Freunden in Not hilfreich sein wird!
Einführung in ThinkPHP
ThinkPHP ist ein kostenloses und quelloffenes, schnelles und einfaches objektorientiertes, leichtes PHP-Entwicklungsframework. Es wurde Anfang 2006 gegründet und unter Apache2 Open Source veröffentlicht Es wurde für die agile Entwicklung von WEB-Anwendungen und die vereinfachte Entwicklung von Unternehmensanwendungen entwickelt. ThinkPHP hält sich seit seiner Gründung an das einfache und praktische Designprinzip und legt dabei den Schwerpunkt auf eine hervorragende Leistung und minimalen Code. Es verfügt über viele originelle Funktionen und Features und wurde in Bezug auf Benutzerfreundlichkeit, Skalierbarkeit und Leistung kontinuierlich optimiert und verbessert. Es hat sich zum führenden und einflussreichsten Framework für die Entwicklung von WEB-Anwendungen entwickelt Mit vielen typischen Fällen wird sichergestellt, dass es stabil für die Entwicklung auf kommerzieller und Portalebene verwendet werden kann.
Kurze Beschreibung der Schwachstelle
Obwohl das ThinkPHP 5.0.x-Framework parametrisierte Abfragemethoden zum Betreiben der Datenbank verwendet, sind die übergebenen Parameter in den Einfüge- und Aktualisierungsmethoden kontrollierbar und nicht streng gefiltert führte schließlich zu dieser SQL-Injection-Sicherheitslücke.
Verwendung der SQL-Injection-Schwachstelle ThinkPHP Framework 5.0.x zur Analyse
thinkphpOffizielle Website zum Herunterladen der Version 5.0.15: http://www.thinkphp.cn/down/1125. html . Richten Sie die Datenbank ein, die Datenbank ist tp, der Tabellenname ist Benutzer und es gibt zwei Felder, ID und Benutzername.
Ändern Sie die Datenbankkonfigurationsinformationen application/database.php und aktivieren Sie Debugging und Trace in application/config.php.
Fügen Sie die Methode in der Index-Klasse in application/index/controller/Index.php hinzu:
public function testsql() { $username = input('get.username/a'); db('user')->where(['id'=> 1])->insert(['username'=>$username]); }
wird wie folgt erklärt:
http: //127.0.0.1/thinkphp/ public/ index.php/ index/ index/ index
Domainname Website-Verzeichnis Externes Zugriffsverzeichnis Eintragsdatei Front Desk Controller Methodenname
Erweiterungen:
Über die updatexml-Funktion UPDATEXML (XML_document, :XPath_string (Zeichenfolge im Xpath-Format). Wenn Sie die Xpath-Syntax nicht verstehen, finden Sie Tutorials im Internet.
Der dritte Parameter: new_value, String-Format, ersetzt die gefundenen qualifizierten Daten
作用:改变文档中符合条件的节点的值
访问payload,就可以触发漏洞了。
漏洞分析
首先,我们知道 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手册以及网上教程完成此次漏洞的审计。
相关推荐:最新的10个thinkphp视频教程
Das obige ist der detaillierte Inhalt vonErfahren Sie in einer Minute mehr über die Prüfung des ThinkPHP-Frameworks (Teilen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!