Bonjour je vais poster un petit tutoriel sur un méthode LFI très sympa, mais surtout très facile.
Nous parlons ici des wrappers.
Explication de cette faille :
PHP dispose de nombreux protocoles natifs, pour différents styles d’URL, à utiliser avec des fonctions de fichiers telles que fopen() et copy()
Pour avoir plus d'information je vous invite à lire le document PHP suivant :
http://php.net/manual/fr/wrappers.php.php
Donc, en résumé, le problème depuis PHP 5.0 est que certaines fonctions [...], et ici pour cette faille ce qui nous intéresse sont les flux d’entrée et de sortie.
En exemple, php://filter permet d’appliquer un filtre aux données qui transitent dans le flux d’entrée et de sortie. On peut illustrer cela avec la fonction readfile() au lieu de récupérer les données d’un fichier en clair, vous pouvez récupérer les données encodées en base64, en rot13, ou encore (dé)compresser en bzip2 le fichier.
Mais aussi, par exemple, si vous lancez un fopen() sur php://output dans votre script PHP, toutes les données que vous écrirez serons écrites dans la STDOUT ; il s’agit donc d’un équivalent aux fonctions echo ou print.
Exploitation :
Cherchons la vulnérabilité:
Donc en cherchant un peu dans les différentes pages de ce site cible, je remarque une chose qui me permet de penser qu'il est vulnérable au LFI wrapprers : les pages incluent des fichiers à l'extension .php
Donc je vais tester et voir si elle peut être vulnérable, avec un retour en arrière de répertoire, via un simple ../ à la place du page.php
Voilà, cette erreur me signifie qu'elle peut être vulnérable. De là, nous allons voir si l'on peut afficher le fichier /etc/passwd en modifiant notre URL en conséquence.
Voilà, cela confirme la présence d'une faille de type LFI.
Je pourrais tenter de faire une injection via le proc/self/environ ou bien via le /proc/self/fd ou du LFI log poisoning, mais cela fera l'objet d'un autre tutoriel.
L'exploitation :
Cette méthode est très facile à réaliser.
Nous allons utiliser php://filter pour lire les fichiers (Source) cryptés en BASE-64.
C'est utile quand nous voulons récupérer des informations MySQL ou pour tester n'importe quelle vulnérabilité mais le fichier doit obligatoirement être en .php
Nous aurons besoin d'un site (ou d'un soft) pour décrypter du BASE64 :
http://crypo.in.ua/tools/eng_base64d.php
Commençons :
Disons que je veux lire la page index.php, je vais modifier mon injection comme suit :
http://www.site.fr/index.php?page=ph...index.php&id=3
Et on va obtenir un code BASE64 sur la page :
Si on décode ce code en BASE64, ont obtient ceci :
On y voit 2 inclusions de fichier PHP :
cOnfig.php
connect_database.php
Je vais modifier l'URL pour inclure non plus index.php mais c0nfig.php
On décode ces informations :
On a récupéré les identifiants de connexion MySQL.
Maintenant que faire avec ça?
Eh bien je vais me connecter à leur base de données et la dump :
Lien informatif : https://dev.mysql.com/doc/refman/5.0/en/connecting.html
Donc les informations sont :
$dbhost = 'masqué les amis';
$dbuser = 'wse82094';
$dbpass = '4qa95hb235';
$dbname = 'wse82094';
Donc selon le protocole de connexion, nous allons faire :
mysql -h dbhost(masqué ici) -u wse82094 -p (puis entrée, puis mettre le password)
Pour voir les bases de données, nous allons utiliser SHOW DATABASES;
Je ne vais pas passer toutes les commandes MySQL, tel que USE nom_database, ou SHOW db_name, etc. À vous d'apprendre à vous en servir.
Maintenant je quitte avec exit
On a vu les Db suivantes :
Je vais juste dumper la premier DB : wse82094
Comment ? voici un petit lien utile :
http://hawkcreation.com/exporter-en-...vec-mysqldump/
Donc maintenant c'est easy
On va utiliser mysqldump :
mysqldump -h dbhost(masqué ici) -u wse82094 -p wse82094 > dump.sql
Note : wse82094 est le nom de la database que je dump.
Voilà c'est fini, j'espère que ce tutoriel vous a plu.
J'ai voulu poster un de mes vieux tutoriels, en espèrant voir d'autre membres suivre un peu, ce qui est le but d'un forum... le partage.
Nous parlons ici des wrappers.
Explication de cette faille :
PHP dispose de nombreux protocoles natifs, pour différents styles d’URL, à utiliser avec des fonctions de fichiers telles que fopen() et copy()
Pour avoir plus d'information je vous invite à lire le document PHP suivant :
http://php.net/manual/fr/wrappers.php.php
Donc, en résumé, le problème depuis PHP 5.0 est que certaines fonctions [...], et ici pour cette faille ce qui nous intéresse sont les flux d’entrée et de sortie.
En exemple, php://filter permet d’appliquer un filtre aux données qui transitent dans le flux d’entrée et de sortie. On peut illustrer cela avec la fonction readfile() au lieu de récupérer les données d’un fichier en clair, vous pouvez récupérer les données encodées en base64, en rot13, ou encore (dé)compresser en bzip2 le fichier.
Mais aussi, par exemple, si vous lancez un fopen() sur php://output dans votre script PHP, toutes les données que vous écrirez serons écrites dans la STDOUT ; il s’agit donc d’un équivalent aux fonctions echo ou print.
Exploitation :
Cherchons la vulnérabilité:
Donc en cherchant un peu dans les différentes pages de ce site cible, je remarque une chose qui me permet de penser qu'il est vulnérable au LFI wrapprers : les pages incluent des fichiers à l'extension .php
Donc je vais tester et voir si elle peut être vulnérable, avec un retour en arrière de répertoire, via un simple ../ à la place du page.php
Voilà, cette erreur me signifie qu'elle peut être vulnérable. De là, nous allons voir si l'on peut afficher le fichier /etc/passwd en modifiant notre URL en conséquence.
Voilà, cela confirme la présence d'une faille de type LFI.
Je pourrais tenter de faire une injection via le proc/self/environ ou bien via le /proc/self/fd ou du LFI log poisoning, mais cela fera l'objet d'un autre tutoriel.
L'exploitation :
Cette méthode est très facile à réaliser.
Nous allons utiliser php://filter pour lire les fichiers (Source) cryptés en BASE-64.
C'est utile quand nous voulons récupérer des informations MySQL ou pour tester n'importe quelle vulnérabilité mais le fichier doit obligatoirement être en .php
Nous aurons besoin d'un site (ou d'un soft) pour décrypter du BASE64 :
http://crypo.in.ua/tools/eng_base64d.php
Commençons :
Disons que je veux lire la page index.php, je vais modifier mon injection comme suit :
http://www.site.fr/index.php?page=ph...index.php&id=3
Et on va obtenir un code BASE64 sur la page :
Si on décode ce code en BASE64, ont obtient ceci :
On y voit 2 inclusions de fichier PHP :
cOnfig.php
connect_database.php
Je vais modifier l'URL pour inclure non plus index.php mais c0nfig.php
On décode ces informations :
On a récupéré les identifiants de connexion MySQL.
Maintenant que faire avec ça?
Eh bien je vais me connecter à leur base de données et la dump :
Lien informatif : https://dev.mysql.com/doc/refman/5.0/en/connecting.html
Donc les informations sont :
$dbhost = 'masqué les amis';
$dbuser = 'wse82094';
$dbpass = '4qa95hb235';
$dbname = 'wse82094';
Donc selon le protocole de connexion, nous allons faire :
mysql -h dbhost(masqué ici) -u wse82094 -p (puis entrée, puis mettre le password)
Pour voir les bases de données, nous allons utiliser SHOW DATABASES;
Je ne vais pas passer toutes les commandes MySQL, tel que USE nom_database, ou SHOW db_name, etc. À vous d'apprendre à vous en servir.
Maintenant je quitte avec exit
On a vu les Db suivantes :
- wse82094
- wse82094_1
Je vais juste dumper la premier DB : wse82094
Comment ? voici un petit lien utile :
http://hawkcreation.com/exporter-en-...vec-mysqldump/
Donc maintenant c'est easy
On va utiliser mysqldump :
mysqldump -h dbhost(masqué ici) -u wse82094 -p wse82094 > dump.sql
Note : wse82094 est le nom de la database que je dump.
Voilà c'est fini, j'espère que ce tutoriel vous a plu.
J'ai voulu poster un de mes vieux tutoriels, en espèrant voir d'autre membres suivre un peu, ce qui est le but d'un forum... le partage.
Commentaire