LFI2RCE Via temp file uploads
Last updated
Last updated
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Sprawdź pełne szczegóły tej techniki w https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
Gdy silnik PHP otrzymuje żądanie POST zawierające pliki sformatowane zgodnie z RFC 1867, generuje pliki tymczasowe do przechowywania przesłanych danych. Pliki te są kluczowe dla obsługi przesyłania plików w skryptach PHP. Funkcja move_uploaded_file
musi być użyta do przeniesienia tych plików tymczasowych do pożądanej lokalizacji, jeśli potrzebne jest trwałe przechowywanie poza wykonaniem skryptu. Po wykonaniu PHP automatycznie usuwa wszelkie pozostałe pliki tymczasowe.
Alert bezpieczeństwa: Atakujący, świadomi lokalizacji plików tymczasowych, mogą wykorzystać lukę w Local File Inclusion, aby wykonać kod, uzyskując dostęp do pliku podczas przesyłania.
Wyzwanie związane z nieautoryzowanym dostępem polega na przewidywaniu nazwy pliku tymczasowego, która jest celowo losowa.
Wykorzystanie na systemach Windows
Na Windows PHP generuje nazwy plików tymczasowych za pomocą funkcji GetTempFileName
, co skutkuje wzorem takim jak <path>\<pre><uuuu>.TMP
. Warto zauważyć:
Domyślna ścieżka to zazwyczaj C:\Windows\Temp
.
Prefiks to zazwyczaj "php".
<uuuu>
reprezentuje unikalną wartość szesnastkową. Kluczowe jest to, że z powodu ograniczenia funkcji, używane są tylko dolne 16 bitów, co pozwala na maksymalnie 65,535 unikalnych nazw przy stałej ścieżce i prefiksie, co czyni brute force wykonalnym.
Ponadto proces wykorzystania jest uproszczony na systemach Windows. Ciekawostką w funkcji FindFirstFile
jest możliwość użycia symboli wieloznacznych w ścieżkach Local File Inclusion (LFI). Umożliwia to skonstruowanie ścieżki do dołączenia, takiej jak poniższa, aby zlokalizować plik tymczasowy:
W pewnych sytuacjach może być wymagana bardziej specyficzna maska (jak php1<<
lub phpA<<
). Można systematycznie próbować tych masek, aby odkryć przesłany plik tymczasowy.
Eksploatacja na systemach GNU/Linux
W systemach GNU/Linux losowość w nazewnictwie plików tymczasowych jest solidna, co sprawia, że nazwy są ani przewidywalne, ani podatne na ataki brute force. Dalsze szczegóły można znaleźć w odwołanej dokumentacji.