Prüfung des ThinkPHP-Frameworks

藏色散人
Freigeben: 2020-08-08 13:18:57
nach vorne
2673 Leute haben es durchsucht

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]);
    }
Nach dem Login kopieren

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
Nach dem Login kopieren

Die Erklärung lautet wie folgt:

http://127.0.0.1/thinkphp/  public/        index.php/   index/   index/   index
       
域名       网站目录    对外访问目录    入口文件       前台     控制器    方法名
Nach dem Login kopieren

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);
Nach dem Login kopieren

跟入 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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!