Heim >PHP-Framework >Denken Sie an PHP >Erfahren Sie in einer Minute mehr über die Prüfung des ThinkPHP-Frameworks (Teilen)

Erfahren Sie in einer Minute mehr über die Prüfung des ThinkPHP-Frameworks (Teilen)

慕斯
慕斯nach vorne
2021-06-18 10:29:383233Durchsuche

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!

Erfahren Sie in einer Minute mehr über die Prüfung des ThinkPHP-Frameworks (Teilen)

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen