LFI2RCE Via temp file uploads

Wsparcie HackTricks

Sprawdź pełne szczegóły tej techniki w https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

Przesyłanie plików PHP

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 zakończeniu wykonania 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:

http://site/vuln.php?inc=c:\windows\temp\php<<

W niektórych 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.

Last updated