hacktricks/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md
2024-02-11 01:46:25 +00:00

4.8 KiB

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.

{% hint style="info" %} 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. {% endhint %}

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: