PHP yra bene populiariausia programavimo kalba WEB sferoje, taip pat ji bene populiariausia ir hakerių scenoje, dėl smarkiai paplitusių, išskirtinai PHP būdingų pažeidžiamumų. Turbūt daugeliui teko susidurti arba bent girdėti apie nutolusio failo įterpimo (remote file include) ataką PHP WEB aplikacijose. Galimybė vykdyti nutolusį PHP kodą buvo ir yra naudojama kone tik įsilaužėlių, todėl naujausiose PHP interpretatoriaus versijose gamintojai nusprendė pagal nutylėjimą išjungti konfigūracinio failo opciją, atsakingą už galimybę vykdyti nutolusį PHP kodą. Tačiau egzistuoja būdai, kaip pasinaudojant lokalaus failo įterpimo pažeidžiamumais, galima vykdyti norimą PHP kodą atakuojamoje sistemoje.
Turbūt pats populiariausias būdas pasinaudojant lokalaus failo įterpimo pažeidžiamumu vykdyti norimą PHP kodą yra taip vadinamas registracijos žurnalų nuodijimas: įsilaužėlis gali patalpinti norimą vykdyti kodą užklausų registravimo žurnaluose, pasinaudodamas tiek failų pavadinimais, tiek suklastodamas HTTP antraštės „User Agent“ laukelį. Kitas žingsnis, kurį turi padaryti įsilaužėlis - tai „sušerti“ užnuodytą registracijos žurnalo failą pažeidžiamam skriptui, o kad tai padarytų, jam reikia žinoti kelią iki registracijos žurnalo failo. Nors kartais naudojami standartiniai keliai, tačiau įvertinant lanksčias Apache web serverio konfigūracines galimybes ir administratorių kūrybiškumą, tokios situacijos tikimybė žymiai sumažėja. Todėl įsilaužėlis gali pasitelkti Linux operacinės sistemos privalumais. Konkrečiai kalbėsime apie „/proc“ failinę sistemą, kurioje saugoma įvairiausia informacija apie sistemoje veikiančius procesus. „/proc“ struktūroje yra speciali direktorija „/proc/self“, kuri yra simbolinė nuoroda į saugomą informaciją apie esamą procesą. Šiuo atveju mus labiausiai domina direktyva „/proc/self/fd“ kurioje saugoma su esamuoju procesu susieti failų deskriptoriai. Šie failų deskriptoriai mums suteikia tiesioginį priėjimą prie failų su kuriais dirba WEB serverio procesas - todėl atspėjus tinkamą failų deskriptorių mes turime galimybę skaityti Apache registravimo žurnalus.

Atspėjus tinkamą failo deskriptoriaus numerį belieka įterpti norimą vykdyti PHP kodą į užklausą. Kaip minėjau, tai patogiausia atlikti pasitelkiant HTTP antraštės „User agent“ laukelį. Įterpiame:
<? system($_GET[cmd]); ?>


„Užnuodijus“ sesijos informaciją norimu PHP kodu belieka pateikti sesijos failą pažiedžiamam skriptui. Mūsų atveju testinėje sistemoje sesijų failai buvo saugomi direktorijoje „/var/lib/php/session/“ ir į sesiją įterpėme kodą: <? system($_GET[v]); ?>

Kartu su sesijos failo informacija matome ir mūsų įvykdytos komandos rezultatą . Šis būdas su sesijomis turi vieną privalumą prieš aprašytą aukščiau: naudodamiesi šiuo metodu, galime apeiti „open_basedir“ apribojimus, nes dažniausiai būna leidžiama prieiti prie laikinųjų failų direktorijos, o prie „/proc“ ne. Išnaudojant lokalaus failo įterpimo pažeidžiamumus ir pasitelkus vaizduotę galima rasti ne vieną būdą kaip žinomoje vietoje serveryje patalpinti norimą vykdyti kodą, ir tam gali pasitarnauti ne tik tiesiogiai su tuo susijęs WEB servisas, bet ir kiti serveryje veikiantys procesai.
Komentarai
pirmiausia nėra nė vienos svetainės lietuvos padangėse (kalbu bent šiek tiek solidesnes ir nekalbu apie užsienio porn ir panašaus turinio saitus) kur būtų egzistuojanti include klaida. visose bent kiek pažangesnėse turinio valdymo sistemose tokio modulių valdymo principo atsisakyta.
antra, taip pat praktiskai visų hostingo kompanijų (nekalbu apie pavienius atvejus su išlikusiom senom įdom) serverių nustatymai draudžia ”išlipti” iš už ”DOCUMENT_ROOT” ribų ar vykdyti sistemines komandas.
čia kalbu iš asmeninės patirties, nuolat tenka susidurt su ivairiom svetainėm, turinio valdymo sistemom, serveriais ir hostingais.
dabar daugumoje serveriu safemode’as ijungtas ir kukuoji...
is esmes dazniausiai likusios skyles tai sql injekciju galimybe :) visgi pramoga pazaisti :D
Tadai, LFI isnaudojamas seniai, cia galbut tik idomiai suzaidzia su /proc/self, o daugiau viskas saugumu uzhsimantiems yra zinoma.
http://itbloggen.se/cs/blogs/secteam/archive/2009/01/26/alternative-ways-to-exploit-PHP-remote-file-include-vulnerabilities.aspx
http://vollit
.lt/titulinis.php?uzklausa=../../../etc/passwd
o nesugalvojau.. :))
