N-PN White-Hat Project
[C] Une petite devinette - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Communauté (https://dev.n-pn.fr/forum/forumdisplay.php?fid=10)
+--- Forum : Le bistrot (https://dev.n-pn.fr/forum/forumdisplay.php?fid=17)
+--- Sujet : [C] Une petite devinette (/showthread.php?tid=2893)



[C] Une petite devinette - b0fh - 11-04-2013

Considérez le code suivant:

Code :
int positif[1000];
int negatif[1000];

...

int set(int key, int value) {
     int *table;

     if (key < 0) {
         key = -key;
         table = negatif;
     } else {
         table = positif;
     }

     if (key >= 1000)
          return ERROR;

     table[key] = value;
     return OK;

}

Trouvez un moyen de corrompre la mémoire en appelant la fonction set() !

Résolu par: Ark, OverDreams

Solution:
[spoiler]
T'y as cru, hein ? ha ha ha. Je la mettrai un peu plus tard Smile
[/spoiler]


RE: [C] Une petite devinette - gr4ph0s - 11-04-2013

Il faut réussir à montrer quoi exactement? ^^'


RE: [C] Une petite devinette - balis - 11-04-2013

XD me too some help no ?
Corrompre du genre segfault ?


RE: [C] Une petite devinette - ark - 12-04-2013

Corrompre == modifier de la mémoire a un endroit qui n'as pas été initialement prévu a cet effet.

Sympathique ce petit challenge Smile


RE: [C] Une petite devinette - oosfalte - 12-04-2013

Intéressant,
on doit écraser *table ou je me trompe ?


RE: [C] Une petite devinette - b0fh - 12-04-2013

Non, ce n'est pas en écrasant table (et encore moins *table Wink

Pour le résoudre, il faut aller assez bas niveau dans le fonctionnement du truc.


RE: [C] Une petite devinette - gr4ph0s - 12-04-2013

Mais tu veux qu'on parviennent à faire quoi? Car corrompre la mémoire c'est très vague j'ouvre sous ODBG, je supprime des trucs randoms et littéralement j'ai corrompus la mémoire.

Je ne demande pas ce qu'il faut regarder mais si tu veux un BoF ou tout autre truc Wink


RE: [C] Une petite devinette - b0fh - 12-04-2013

J'ai écrit "corrompre la mémoire en appelant la fonction set()".

On suppose donc qu'en tant qu'attaquant, tu peux déclencher un appel a la fonction set, avec les arguments qui te plaisent, et le but est de trouver des valeurs d'arguments pour lesquels la norme du C ne définit pas de comportement, et qui risque donc de causer une corruption quelconque.

C'est plus clair ?


RE: [C] Une petite devinette - OverDreams - 12-04-2013

Je te MP pour voir si j'ai bon même si je suis noob :')


RE: [C] Une petite devinette - gruik - 14-04-2013

alors ? personne a trouvé ?
indice : mini/maxi


RE: [C] Une petite devinette - Kiwazaru - 14-04-2013

[spoiler]Integer Overflow : 2147483648 -> key = -key : 2147483648 = -2147483648 -> Integer = -2147483647 -> 2147483648 donc débortement :> Merci j0rn[/spoiler]


RE: [C] Une petite devinette - OverDreams - 15-04-2013

[spoiler]
j'en sais pas beaucoup en C j'ai comme même essayer le challneg, le code avait l'air assez solide, pas de valeur allaient provoquer la corruption, mais comme il vérifie uniquement la limite supérieure, je savais que je devais en quelque sorte faire échouer inversion (key=-key fail)
Donc j'ai essayer de trouver la limite supérieure d'un int positive (oui, j'ai essayé beaucoup de truc et devient donc (0x7FFFFFFF), et google me l'a confirmer que c'était ça Tongue
Ensuite, j'ai essayé avec la valeur immédiate (0x80000000), Mais la clé inverti à échouer et j'ai eu une corruption
Bon veuillez m'excuser si je dis de la merde :')
[/spoiler]

EDIT Khaled : Merci de pas spoiler