Heim  >  Artikel  >  PHP-Framework  >  Prüfung des ThinkPHP-Frameworks

Prüfung des ThinkPHP-Frameworks

藏色散人
藏色散人nach vorne
2020-08-08 13:18:042686Durchsuche

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!

Prüfung des ThinkPHP-Frameworks

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语句

$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手册以及网上教程完成此次漏洞的审计。

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!

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