![]() |
bypass is_numeric() - Version imprimable +- N-PN White-Hat Project (https://n-pn.fr/forum) +-- Forum : Questions (https://n-pn.fr/forum/forumdisplay.php?fid=11) +--- Forum : Hacking (https://n-pn.fr/forum/forumdisplay.php?fid=29) +--- Sujet : bypass is_numeric() (/showthread.php?tid=3556) |
bypass is_numeric() - MLT - 16-01-2014 Bonjour, Je me suis fait un code poreux à l'injection sql, j'ai rajouté la fonction is_numeric(). Voici le code: Code PHP : <?php D'après une discussion sur irc hier avec quelques membres, apparemment il serait possible de bypass la fonction is_numeric(). Donc j'ai essayé d'exploiter ma faille sql avec mon code protégé par is_numeric(). Mais là j e bloque je sais pas comment faire. Tout d'abord, j'ai tenté d'injecter un ' avec id=1 0x27 mais l'id est traduit par 49, la valeur décimale de 0x27 et non par '. Ma question est donc : Est-il possible de bypass ce code ? ![]() Pour info j'ai pris la bdd du site du zero , dispo dans le tuto php/sql. RE: bypass is_numeric() - Booster2ooo - 17-01-2014 Je vais contourner la question car je ne connais pas la réponse. Tu travailles ici avec PDO alors pourquoi ne pas utiliser les requêtes préparées, qui, il me semble, ne sont pas sujettes aux injections? RE: bypass is_numeric() - Hypnoze57 - 17-01-2014 is_numeric vérifie que la variable est bien du type numérique, pour convertir une variable en int on peut utilisé intval: Code : <?php Et pour répondre à ta question je n'ai jamais vu une méthode permettant de contourner ceci. RE: bypass is_numeric() - gruik - 17-01-2014 (17-01-2014, 13h49)Hypnoze57 a écrit : is_numeric vérifie que la variable est bien du type numérique yep, c'est même marqué directement dans la doc, suffit de regarder l'exemple, du coup c'est pas un bypass c'est juste savoir coder finalement RE: bypass is_numeric() - Hypnoze57 - 17-01-2014 (17-01-2014, 14h43)gruik a écrit : yep, c'est même marqué directement dans la doc, suffit de regarder l'exemple, du coup c'est pas un bypass c'est juste savoir coder finalement C'est même marqué directement dans son nom :p Je sors -->[] RE: bypass is_numeric() - MLT - 17-01-2014 je sais bien à quoi sert is_numeric() mais 'or 1=1 -- = 0x276f7220313d31202d2d et c'est bien une valeur numérique ![]() Si on injecte ceci : fichier.php?id=0x276f7220313d31202d2d, sa contourne bien la fonction mais d'après mes tests, derrière ça à pas l'air de poutrer la requête sql comme je le disais dans mon premier post, par exemple si on prend le 'simple quote' ' = 27 en hexa et 39 en décimal si on injecte 0x27 , c'est traduit en 39 et non pas en caractère ' RE: bypass is_numeric() - Hypnoze57 - 18-01-2014 edit (reformuler): 0x276f7220313d31202d2d = de l'hexa, le type numéric accepte l'hexa mais je ne pense pas qu'sql va le decoder pour l'executer mais plutot l'executer tel qu'elle. RE: bypass is_numeric() - gruik - 18-01-2014 (17-01-2014, 19h56)Hypnoze57 a écrit : C'est même marqué directement dans son nom :p Code PYTHON :
python a écrit :The method isnumeric() checks whether the string consists of only numeric characters. php a écrit :Détermine si la variable donnée est de type numérique (...) Les notations hexadécimale (...), binaire (...), octale (...) sont également autorisées faut se méfier du nom et se fier à la doc ![]() RE: bypass is_numeric() - MLT - 18-01-2014 D'après mes recherches, on peut pas contourner is_numeric() en php. c'est isnumeric() en sql que l'on peut contourner. http://classicasp.aspfaq.com/general/what-is-wrong-with-isnumeric.html RE: bypass is_numeric() - gruik - 18-01-2014 (18-01-2014, 13h44)MLT a écrit : c'est isnumeric() en sql que l'on peut contourner. d'après ce que je lis la fonction n'est dispo qu'en T-SQL et donc à priori uniquement sous Microsoft SQL Server, ça me semblait important de le préciser... |