hacktricks/src/pentesting-web/file-inclusion/lfi2rce-via-temp-file-uploads.md

33 lines
2.5 KiB
Markdown

{{#include ../../banners/hacktricks-training.md}}
**Sprawdź pełne szczegóły tej techniki w [https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf](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 wykonaniu PHP automatycznie usuwa wszelkie pozostałe pliki tymczasowe.
> [!NOTE]
> **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 systemach 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żywania 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 w 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 odniesionej dokumentacji.
{{#include ../../banners/hacktricks-training.md}}