je tente de me frayer un chemin à travers une capture-the-Flag Live VM, et se retrouver en essayant d'utiliser gdb pour modifier une valeur passée sur la pile (dernier élément à être poussé):GDB: Changement chaîne en mémoire sur la pile
system("date");
Pour
system("ash");
jusqu'à présent, mes efforts ont été gdb comme suit:
pile
L'adresse que je suis intéressé par le dernier élément de la pile (premier dans la liste de pile ci-dessous)
(gdb) p $esp
$1 = (void *) 0xbf902690
(gdb) x/32w 0xbf902690
0xbf902690: 0x080485ff 0x0000044c 0xb7783ff4 0xbf9026b8
0xbf9026a0: 0xb76a8fa9 0xb7797356 0x08048529 0x0000044c
0xbf9026b0: 0x08048520 0x08048410 0xbf902728 0xb7695cf7
0xbf9026c0: 0x00000001 0xbf902754 0xbf90275c 0xbf9026e4
....
(gdb) x/s 0x080485ff
0x80485ff: "date"
(gdb) x/s *0x080485ff
0x65746164: <Address 0x65746164 out of bounds>
(gdb)
tentative de changer la mémoire 1
(gdb) set {const char [4] *}0x080485ff = "ash "
(gdb) x/s 0x080485ff
0x80485ff: "\b`\354\b"
(gdb)
Comme vous pouvez le voir , Je mangle le pointeur.
tentative de changer la mémoire 2
(gdb) set *((const char *)0x080485ff) = "ash "
(gdb) x/s 0x080485ff
0x80485ff: "\bate"
(gdb)
Plus mangling - quelque chose à voir avec déréférencement tort?
tentative de changer la mémoire 3
(gdb) set {int}0x080485ff = 68736100
(gdb) x/s 0x080485ff
0x80485ff: "d\324\030\004"
(gdb)
Essayer d'utiliser les valeurs ASCII au lieu - ne fonctionne pas comme prévu.
Toute aide appréciée - été gratter (chauve) la tête pendant un certain temps maintenant ...
Merci
sc.
Merci beaucoup monsieur! C'était en effet ce que j'avais besoin de faire - et vos explications étaient très appréciées. En ce qui concerne l'hexagone, j'avais omis de supposer simplement qu'un rvalue pouvait commencer par 0x. Doh. Merci encore. – swisscheese