第六周 缓冲区溢出章节
bang问题:
- 每次输入的id将影响getbuf中的堆栈位置,用-u 12的ebp和-u 123的ebp位置就不一样。
- 注意汇编代码中不能出现a0(代表换行符),如果地址有a0就将它随便改改就行了(a0改为a8-0x8)。
- 注意gdb如果不能重定向,可能是因为你修改了gdbinit:https://stackoverflow.com/questions/78832654/why-my-gdb-cant-read-the-file-by-stdin-very-weird?noredirect=1#comment138988527_78832654
rumble问题:
仔细分析汇编和栈的调用,这道题挺难的!【搞了我3个小时,真的别只用gdb,用ida静态结合gdb动态才是正解。】
- 用ida标一标,其中的write_here是为了随机地址防止你直接push的。write_here存储的字符串是你大写的cookie值,比如我-u 1234的cookie是0x6eecf91d,那么这里就是"6EECF91D"。
- 然后注意的是memcmp比较的是地址,所以你getbuf中应该push一个地址。
- 缓冲区的输入应该长成这样,注意到我的"6EECF91D"的十六进制是0x43454536 0x44313946【注意要颠倒过来】。
- 然后push %esp表示当前地址。
- 注意到栈帧中第一个参数是$ebp+8,所以你要压入一个“返回地址”,我这里压的是0x11111111占位。