01 Hintergrund
Kürzlich veröffentlichte QiAnXin einen Sicherheitsrisikohinweis zu einer Sicherheitslücke bei der „willkürlichen“ Dateierstellung in ThinkPHP 6.0. Als Reaktion darauf analysierte DYSRC die Sicherheitslücke sofort und reproduzierte die Sicherheitslücke erfolgreich.
Schwachstellenumfang: top-think/framework 6.x
02 Standortproblem
Basierend auf der Erstellung beliebiger Dateien und dem aktuellen Commit-Verlauf kann darauf geschlossen werden 1bbe75019 ist der Patch für dieses Problem. Es ist ersichtlich, dass der Patch die Sitzungs-ID darauf beschränkt, nur aus Buchstaben und Zahlen zu bestehen, was das Problem offensichtlicher macht.
03 Prinzipanalyse
Lassen Sie uns zunächst die oben genannten Probleme beiseite lassen und einen Blick darauf werfen, wie thinkphp Sitzungen speichert.
Das System definiert die Schnittstelle thinkcontractSessionHandlerInterface
Die Methode SessionHandlerInterface::write wird beim Lokalisieren von Sitzungsdaten ausgeführt und das System führt sie am Ende automatisch aus jede Anfrage umsetzen.
Sehen wir uns an, wie die thinksessiondriverFile-Klasse implementiert wird.
Generieren Sie zuerst den Dateinamen basierend auf $sessID über getFileName und schreiben Sie dann die Datei mit writeFile.
Folgen Sie getFileName und verketten Sie die eingehende $sessID direkt als Dateinamen. Da $sessID steuerbar ist, ist auch der Dateiname steuerbar.
04 Demonstration
An diesem Punkt ist der gesamte Schwachstellenprozess grundsätzlich klar. Die lokalen Demonstrationsergebnisse sind unten aufgeführt.
php Chinesische Website, eine große Anzahl kostenloser Thinkphp-Einführungs-Tutorials, willkommen zum Online-Lernen!
Das obige ist der detaillierte Inhalt vonDie Sicherheitslücke bei der Erstellung willkürlicher Dateien in thinkphp6 tritt erneut auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!