LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
Grundlegende Informationen
Wenn Sie eine Local File Inclusion gefunden haben, auch wenn Sie keine Sitzung haben und session.auto_start
auf Off
steht. Wenn session.upload_progress.enabled
auf On
gesetzt ist und Sie die PHP_SESSION_UPLOAD_PROGRESS
in den multipart POST-Daten angeben, wird PHP die Sitzung für Sie aktivieren.
Hinweis: Mit PHP_SESSION_UPLOAD_PROGRESS
können Sie Daten innerhalb der Sitzung kontrollieren. Wenn Sie Ihre Sitzungsdatei einbinden, können Sie einen von Ihnen kontrollierten Teil einbinden (zum Beispiel einen PHP-Shellcode).
Obwohl die meisten Tutorials im Internet empfehlen, session.upload_progress.cleanup
für Debugging-Zwecke auf Off
zu setzen, ist das Standardverhalten von session.upload_progress.cleanup
in PHP immer noch On
. Das bedeutet, dass Ihr Upload-Fortschritt in der Sitzung so schnell wie möglich bereinigt wird. Es handelt sich also um eine Race Condition.
Der CTF
In dem ursprünglichen CTF, in dem diese Technik kommentiert wird, reichte es nicht aus, die Race Condition auszunutzen, sondern der geladene Inhalt musste auch mit der Zeichenkette @<?php
beginnen.
Aufgrund der Standardeinstellung von session.upload_progress.prefix
wird unsere SESSION-Datei mit einem lästigen Präfix upload_progress_
beginnen. Zum Beispiel: upload_progress_controlledcontentbyattacker
Der Trick, um das anfängliche Präfix zu entfernen, bestand darin, das Nutzlast 3 Mal base64 zu kodieren und dann über die Filter convert.base64-decode
zu dekodieren. Dies liegt daran, dass beim base64-Decodieren PHP die seltsamen Zeichen entfernt. Nach 3 Mal werden nur noch die vom Angreifer gesendeten Nutzlasten übrig bleiben (und dann kann der Angreifer den anfänglichen Teil kontrollieren).
Weitere Informationen finden Sie im ursprünglichen Writeup https://blog.orange.tw/2018/10/ und im endgültigen Exploit https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py Ein weiterer Writeup unter https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
Last updated