LFI2RCE Via temp file uploads

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

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:

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

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.

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated