Heim >PHP-Framework >Denken Sie an PHP >Schwachstellenanalyse für willkürliche Dateioperationen in ThinkPHP6
Einführung in die Sicherheitslücke
Am 10. Januar 2020 veröffentlichte das ThinkPHP-Team ein Patch-Update, das eine Sicherheitslücke bei willkürlichen Dateioperationen behebt, die durch eine unsichere SessionId verursacht wurde. Diese Sicherheitslücke ermöglicht es einem Angreifer, beliebige Dateien zu erstellen und zu löschen, wenn die Sitzung in der Zielumgebung aktiviert ist. Unter bestimmten Umständen kann der Angreifer auch an die Shell gelangen.
Die konkret betroffene Version ist ThinkPHP6.0.0-6.0.1.
Reproduktion der Sicherheitslücke
Die lokale Umgebung verwendet ThinkPHP 6.0.1+PHP7.1.20+Apache zur Reproduktion. Eine Webshell kann geschrieben werden, um das Testverifizierungsprogramm unter bestimmten Umständen auszuführen, wie unten gezeigt:
Schwachstellenanalyse
Laut dem offiziellen Github-Commit:
https://github.com/topthink/framework/commit/1bbe75019ce6c8e0101a6ef73706217e406439f2
Daher wird spekuliert, dass das Schreiben der Datei durch das Speichern der Sitzung verursacht werden könnte. Dann verfolgen Sie: vendor/topthink/framework/src/think/session/Store.php:254
.
Eine Schreibfunktion wird hier aufgerufen, folgen Sie: Vendor/topthink/framework/src/think/session/driver/File.php:210.
Rufen Sie die Funktion writeFile auf und folgen Sie:
Tatsächlich handelt es sich um einen Vorgang zum Schreiben einer Datei.
Fahren Sie mit dem umgekehrten Vorgang fort, um zu sehen, ob der Dateiname steuerbar ist. Der Dateiname ergibt sich aus dem Wert von $sessionId, der durch die anfängliche getId() erhalten wurde. Da es getId gibt, wird es auch setId geben. Schauen Sie sich den Funktionsinhalt an:
Wenn der eingehende Parameter $id die Länge von 32 Bit erreicht, wird der Wert festgelegt zu $ this->id. Sehen Sie sich an, wo setId aufgerufen wird: Vendor/topthink/framework/src/think/middleware/SessionInit.php:46.
Der Wert von $cookieName ist hier PHPSESSID.
Und $sessionId ist der Wert namens PHPSESSID im Cookie, sodass er vom Angreifer kontrollierbar ist, was dazu führt, dass der geschriebene Dateiname kontrollierbar ist.
Der geschriebene Dateiname ist kontrollierbar, aber ist der geschriebene Inhalt kontrollierbar? Die Analyse ergab, dass der geschriebene Inhalt der Inhalt ist, der zum Erstellen der Sitzung verwendet wurde. Die Erstellung einer Sitzung wird jedoch durch die tatsächliche Back-End-Geschäftslogik bestimmt und eine Sitzung wird nicht in der Standardumgebung erstellt. Daher ist das Schreiben beliebiger Dateien in der Standardumgebung nicht möglich.
Während der eingehenden Analyse dieser Schwachstelle haben wir festgestellt, dass diese Schwachstelle auch das willkürliche Löschen von Dateien bewirken kann und das Löschen von Dateien nur eine geringe Abhängigkeit von der Back-End-Geschäftslogik aufweist.
Immer noch in Vendor/topthink/framework/src/think/session/Store.php:254:
Durch Analyse und Überprüfung haben wir die Schwachstelle gefunden (Wie oben gezeigt) kann auch zum willkürlichen Löschen von Dateien führen.
Zusammenfassung
Wenn die Zielumgebung Windows ist und die Sitzung aktiviert ist, ist sie anfällig für willkürliche Angriffe zum Löschen von Dateien.
Wenn die Sitzung in der Zielumgebung geöffnet wird und die geschriebene Sitzung kontrollierbar ist, ist sie anfällig für willkürliche Dateischreibangriffe.
Relevanten Benutzern wird empfohlen, rechtzeitig ein Upgrade auf die ThinkPHP6.0.2-Version durchzuführen, um Angriffe zu vermeiden.
php Chinesische Website, eine große Anzahl kostenloser thinkphp-Einführungs-Tutorials, willkommen zum Online-Lernen!
Das obige ist der detaillierte Inhalt vonSchwachstellenanalyse für willkürliche Dateioperationen in ThinkPHP6. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!