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 Aus
steht. Wenn session.upload_progress.enabled
auf An
steht und Sie die PHP_SESSION_UPLOAD_PROGRESS
in den multipart POST-Daten bereitstellen, wird PHP die Sitzung für Sie aktivieren.
Beachten Sie, dass Sie mit PHP_SESSION_UPLOAD_PROGRESS
Daten innerhalb der Sitzung kontrollieren können. Wenn Sie Ihre Sitzungsdatei einbinden, können Sie einen von Ihnen kontrollierten Teil einfügen (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. Dies führt zu einem Race Condition.
Das CTF
Im ursprünglichen CTF, in dem diese Technik kommentiert wurde, reichte es nicht aus, den Race Condition auszunutzen, sondern der geladene Inhalt musste auch mit der Zeichenfolge @<?php
beginnen.
Aufgrund der Standardeinstellung von session.upload_progress.prefix
wird unsere SESSION-Datei mit einem lästigen Präfix upload_progress_
beginnen, wie z.B.: upload_progress_controlledcontentbyattacker
Der Trick, um das anfängliche Präfix zu entfernen, bestand darin, das Nutzlast 3 Mal in Base64 zu codieren und dann über die Filter convert.base64-decode
zu decodieren. Dies liegt daran, dass beim Base64-Decodieren PHP die seltsamen Zeichen entfernen wird, sodass nach 3 Mal nur die vom Angreifer gesendete Nutzlast übrig bleibt (und dann kann der Angreifer den anfänglichen Teil kontrollieren).
Weitere Informationen im ursprünglichen Write-up 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 weiteres Write-up unter https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
Last updated