Heim > Artikel > PHP-Framework > Prüfung des ThinkPHP-Frameworks
Das Folgende ist eine Einführung in die Prüfung des ThinkPHP-Frameworks aus der thinkphpFramework-Tutorial-Kolumne. Ich hoffe, es wird Freunden in Not hilfreich sein!
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 WEB-Anwendungsentwicklungs-Framework in China 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]); }
Unsere Nutzlast ist dieses Mal: .
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
Die Erklärung lautet wie folgt:
http://127.0.0.1/thinkphp/ public/ index.php/ index/ index/ index 域名 网站目录 对外访问目录 入口文件 前台 控制器 方法名
Erweiterung:
Über die Updatexml-Funktion UPDATEXML (XML_document, , ein XML-Dokumentobjekt. Der Name ist Doc
Der zweite Parameter: XPath _string ( Wenn Sie die Xpath-Syntax nicht verstehen, finden Sie online Tutorials. Der dritte Parameter: new_value, String-Format, ersetzt die gefundenen qualifizierten Daten ausgelöst werden.
Schwachstellenanalyse
首先,我们知道 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手册以及网上教程完成此次漏洞的审计。$sql = $this->builder->insert($data, $options, $replace);
Das obige ist der detaillierte Inhalt vonPrüfung des ThinkPHP-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!