Ich versuche, mich durch eine Capture-the-Flag-Live-VM zu kämpfen und beim Versuch, gdb zu verwenden, um einen auf dem Stack übergebenen Wert zu ändern (Grafik) gedrückt):GDB: Zeichenkette im Speicher des Stacks ändern
system("date");
Um
system("ash");
Bisher haben meine gdb Bemühungen wie folgt:
Stapel
Die Adresse ich interessiert bin, ist das letzte Element auf dem Stapel (first in dem Stapel Liste unten)
(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)
Versuch, Speicher 1
zu ändern(gdb) set {const char [4] *}0x080485ff = "ash "
(gdb) x/s 0x080485ff
0x80485ff: "\b`\354\b"
(gdb)
Wie Sie sehen können , Ich mangle den Zeiger.
Versuch Speicher 2
(gdb) set *((const char *)0x080485ff) = "ash "
(gdb) x/s 0x080485ff
0x80485ff: "\bate"
(gdb)
Mehr Mangeln zu ändern - etwas mit Unrecht zu tun dereferencing?
Versuch zu ändern 3-Speicher
(gdb) set {int}0x080485ff = 68736100
(gdb) x/s 0x080485ff
0x80485ff: "d\324\030\004"
(gdb)
Der Versuch, stattdessen die ASCII-Werte zu verwenden - nicht funktioniert wie geplant.
Jede Hilfe willkommen - jetzt ...
Dank
sc wurde mein (Glatze) Kopf für eine Weile zu kratzen.
Vielen Dank, mein Herr! Das war in der Tat, was ich tun musste - und Ihre Erklärungen wurden sehr geschätzt. In Bezug auf das Hex konnte ich nicht einfach annehmen, dass ein rvalue mit 0x beginnen könnte. Do. Danke noch einmal. – swisscheese