Défi sécurité. - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Défi sécurité. (/showthread.php?tid=2359) |
Défi sécurité. - Amrac - 04-02-2008 Salut, Histoire de placer le contexte, je suis webmaster du jeu Fourmizzz.fr, j'ai une communauté de 11 988 joueurs dont 3 260 actifs et je dois dire qu'ils m'en font parfois voir des vertes et des pas mures au niveau sécurité. J'aimerais vous faire partager mon expérience (douloureuse) de ce week-end à travers un petit défi. Je vais donc vous présenter un petit bout de code qui permet d'annuler une attaque si celle-ci a était lancé il y a moins de deux minutes. Dans ce petit code a priori inoffensif se cache une faille majeur, je vous met donc au défi de la trouver. J'ai un peu sur-commenté chaque ligne histoire de vous simplifiez la compréhension du code. Code PHP :
Si vous pensez avoir trouvé la solution, je vous invite a me l'envoyer par MP afin de ne pas la dévoiler aux autres (ca casserais leur plaisir de chercher). Si vous avez besoin d'information complémentaire sur le script, n'hésitez pas. J'ai pas mal amputé le script pour le simplifier comme je pouvais. RE: Défi sécurité. - NicoMSEvent - 04-02-2008 je pense avoir une piste ^^ RE: Défi sécurité. - Plume - 04-02-2008 Une accolade en trop à la fin ? iffle: RE: Défi sécurité. - orditeck - 04-02-2008 Je t'envoi un MP RE: Défi sécurité. - Plume - 04-02-2008 En même temps, si j'ai trouvé, ça va. C'était assez simple Mais c'est sympa comme idée RE: Défi sécurité. - X-ZoD - 04-02-2008 le get ? -_- RE: Défi sécurité. - Amrac - 04-02-2008 Je suis étonné de la participation, je pensais que le sujet allé coulé vite fait dans les oubliettes LexLxUs a écrit :Une accolade en trop à la fin ? iffle: J'ai oublié de l'enlever, merci ^^ Je vous fait passer les MPs qui n'ont pas aboutie, et le complément d'information qui va avec: NicoMSEvent a écrit :tu as eu une injection de SQL dans la variable : $_GET['annuler'] ? Kéké a écrit :Règle numéro 1 en PHP : ne jamais utiliser GET. uriak a écrit :pas certain, mais étant donné la configuration des fonctions et leur point d'entrées, je soupçonne de l'injection SQL dans la variable $_GET['annuler'] orditeck a écrit :Déjà, comme dis Lex, y'a une accolade de trop à la fin ce qui résulte à une erreur PHP. Pour l'injection SQL, vous avez raison de penser à cela, c'est de ma faute car je ne vous est pas fournit suffisament d'informations. J'ai le magic_quote d'activé, donc l'injection n'est ici pas possible. De plus, j'utilise une couche au dessus de mysql_query que j'ai retiré pour vous simplifier les choses. Pour chaque requete, si il y a une erreur SQL elle n'est pas affiché à l'utilisateur (il ne connait donc rien de la structure de la base de données). De plus, un message privé m'est envoyé avec l'IP, l'ID, l'heure, toutes les variables en GET/POST, et le nom du script. De la sorte, ceux qui voudraient faire des tentatives n'ont aucun droit à l'erreur. Mais vous avez eu raison de soupconner ce point avec les informations que vous aviez NicoMSEvent a écrit :autre point que je vois, c'est : Armee.php?annuler='.$donnees['ID']Si l'attaque à déjà était annulé, et que tu ré exécute le script plus tard, la requete SELECT * from attaque WHERE IDAttaquant='$ID' AND ID='".$_GET['annuler']."' ne selectionnera rien puisque l'attaque n'existeras plus, le script va ajouter 0 armée. Il y a de l'idée aussi. LexLxUs a écrit :Bonjour 2Dans la requete qui selectionne l'attaque, il y a deux conditions: ID='".$_GET['annuler']."' pour selectionner l'attaque du GET, et IDAttaquant='$ID', $ID correspondant a l'ID du joueur qui à lancé l'attaque et qui exécute le script. Si un joueur met dans $_GET['annuler'] l'ID d'une attaque qui ne lui appartient pas, la seconde condition ne sera pas vérifier, il n'y aurat donc aucune attaque de selectionné. Je précise accesoirement que le champ ID de attaque est en auto-incremente (il est donc unique). Edit: Je me suis un peu emmêlé les pinceaux avec les quotes RE: Défi sécurité. - keke - 04-02-2008 Donc si je comprends bien ton message, il faut qu'on creuse encore un peu ? Je continue. kéké. RE: Défi sécurité. - Amrac - 04-02-2008 keke a écrit :Donc si je comprends bien ton message, il faut qu'on creuse encore un peu ?Oui ^^ NicoMSEvent a écrit :si tu de délogue, le $ID n'est plus initialisé... il ne suffirait pas de rajouter a n'importe quelle requete un parametre en GET &ID=xx pour usurper l'identité de n'importe quel joueur?Le script n'est accessible que si on est connecté. (Il y a un système de session qui s'en occupe) Il ne s'agit pas d'un problème de session. Je vous laisse un peu chercher, et dans quelques heures je vous donnerais quelques indices pour vous mettre sur la piste. RE: Défi sécurité. - pascal - 04-02-2008 petite question de configuration : register_globals vaut On ou Off ? A+ Pascal |