LFI2RCE Via temp file uploads
Sprawdź pełne szczegóły tej techniki na stronie https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
Przesyłanie plików w PHP
Gdy silnik PHP otrzymuje żądanie POST zawierające pliki sformatowane zgodnie z RFC 1867, generuje tymczasowe pliki do przechowywania przesłanych danych. Te pliki są kluczowe dla obsługi przesyłania plików w skryptach PHP. Funkcję move_uploaded_file
należy użyć do przeniesienia tych tymczasowych plików do żądanego miejsca, jeśli potrzebne jest trwałe przechowywanie poza wykonaniem skryptu. Po wykonaniu PHP automatycznie usuwa pozostałe tymczasowe pliki.
Ostrzeżenie dotyczące bezpieczeństwa: Atakujący, świadomi lokalizacji tymczasowych plików, mogą wykorzystać podatność na lokalne włączenie pliku (LFI), aby wykonać kod, uzyskując dostęp do pliku podczas przesyłania.
Wyzwaniem dla nieautoryzowanego dostępu jest przewidzenie nazwy tymczasowego pliku, która jest celowo losowa.
Wykorzystanie w systemach Windows
W systemie Windows PHP generuje nazwy tymczasowych plików za pomocą funkcji GetTempFileName
, co daje wzór <ścieżka>\<pre><uuuu>.TMP
. Warto zauważyć:
Domyślna ścieżka to zazwyczaj
C:\Windows\Temp
.Prefiks to zazwyczaj "php".
<uuuu>
reprezentuje unikalną wartość szesnastkową. Istotne jest, że ze względu na ograniczenia funkcji, używane są tylko niższe 16 bitów, co pozwala na maksymalnie 65 535 unikalnych nazw przy stałej ścieżce i prefiksie, co umożliwia przeprowadzenie ataku brute force.
Ponadto, proces wykorzystania jest uproszczony w systemach Windows. Specyfika funkcji FindFirstFile
pozwala na użycie symboli wieloznacznych w ścieżkach lokalnego włączenia pliku (LFI). Pozwala to na stworzenie ścieżki dołączenia, takiej jak poniższa, w celu zlokalizowania tymczasowego pliku:
W pewnych sytuacjach może być konieczne użycie bardziej szczegółowej maski (np. php1<<
lub phpA<<
). Można systematycznie wypróbować te maski, aby odkryć wysłany tymczasowy plik.
Wykorzystanie w systemach GNU/Linux
W systemach GNU/Linux losowość w nazewnictwie tymczasowych plików jest solidna, co sprawia, że nazwy nie są przewidywalne ani podatne na ataki brute force. Szczegółowe informacje można znaleźć w dokumentacji odnośnej do tego tematu.
Last updated