Php hacking: Local File Inclusion
Local file inclusion er en annen metode php applikasjoner kan hackes med. Det er en av de mest utbredte sårbarhetene som fins på internett.
Rundt om på internett ser man lenker sånn som det her:
http://yay.com/index.php?side=kontakt.php
Det som skjer her, er en inkludering. Veldig ofte har man en mappe på nettstedet som heter f.eks. “includes”. Inni den mappen pakker man masse filer:
kontakt.php
om.php
login.php
info.php
Det som da skjer, når brukeren går til:
index.php?page=login.php
Er at login.php blir inkludert i php. Det er en slags klipp og lim sak i php, så slipper man å endre designet på alle filer, hver gang man skal oppdatere designet. Eller endre på struktur/lenker og slikt.
All php kode som ligger i login.php, blir derfor lagt inn i index.php.
Her er et eksempel på et inkluderingsscript:
$page = $_GET['page'];
include("includes/$page");
Som du ser her, legges “includes” til i starten. Dette medfører at bare filer som ligger på nettstedet kan inkluderes. Dette er forskjellen på local file inclusion. og remote file inclusion.
LES OGSÅ: Php hacking: Remote file inclusion
Ta inkluderingsscriptet ovenfor. La oss si en ondsinne hacker navigerer til denne lenken:
http://yay.com/index.php?page=../robots.txt
../ betyr “gå en mappe opp”. Scriptet går derfra vekk fra includes mappen, opp et hakk og includerer robots.txt.
Om du ikke vet hva robots.txt gjør, så er det en fil som forteller søkemotorroboter hvilke mapper og filer som ikke skal indekseres i deres søkemotor.
Dersom det er snakk om en linux server her, har du sikkert hørt om filen /etc/passwd. Det er en fil som inneholder kontoinformasjonen til alle brukerne på serveren. Den inneholder ikke passord, men ting som brukernavn, id, hvilket type shell de har osv.
La oss si den ondsinnede brukeren navigerer til denne lenken:
http://yay.com/index.php?page=../../../../../../../etc/passwd
Da vil /etc/passwd filen bli inkludert, og en local file inclusion har blitt gjort. Angriperen har fått tilgang til noe han ikke skal ha.
Kan dette føre kode injeksjon?
Ja. Dersom angriperen får lastet opp kode på serveren, vil kode kunne bli kjørt. Om f.eks. nettstedet tillater opplastning av bilder, kan et bilde inneholde php kode. Og da er det bare å inkludere bildet, og hackeren kan kjøre hvilken som helst php kode han vil.
En annen måte er å legge inn php kode i en loggfil på systemet, for deretter å inkludere loggfilen.
Løsningen
Løsningen er å ikke tillate forover slash i $_GET['page'].
Eksempel på hvordan dette kan gjøres:
if (!eregi("^((.*)/)", $filename)) {
// inkluder trygt her
}
Er ditt nettsted sårbart?



































Å ikke tillate forover slash er ikke nødvendigvis godt nok.
Mange har config-filer i samme mappe som php-scriptet, gjerne i .cfg/.ini/(.inc?) som inkluderes som ren tekst.
Det beste er en switch case eller sjekke mot en array med tillatte nøkkelord.
Denner er nok ikke sikker nok
hva om man bruker om du ikke har inkuderende script i egen mappe? Dette vil gi et sikkerhetshull, da du kan skrive bare “/” i unix, eller “C:/” på windows os.
Skriver du C:/ u urlen har du tilgang til å se alle filene på c.
Dessuden er eregi() funksjonen i php utdatert, og erstattes med den allerede eksisterende preg_match()
Bruk denne koden heller, den er mye sikrere, og ikke minste støttet av php i fremtiden.
preg_match(“/^([a-zA-Z]{1}\:)|[.]|^(\/)/”,$filename)
denne vil gi utslag om filbanen begynner med boktav: (C:, D: osv.), eller har “./” i seg, ellerbegynner med “/”
- jk
ops, sånn blir det vell :’)
det skal vær låv å gå opp i mapper med punktum i seg, om det måtte være ønsket.
preg_match(“/^([a-zA-Z]{1}\:)|[.*]\/|^(\/)/”, $filename);