- 论坛徽章:
- 0
|
【好玩】缓冲区溢出攻击实验
说明一下修改的地方吧,如下,注意我的机子是小端法表示的:
1)d8ef2200:用小端法就是0x22efd8,这个是test栈帧的ebp的值,在调用getbuf的时候压入栈中保存,这里要原封不动的写出来。
2)86114000:先看看test函数的反汇编代码吧,如下:
- 00000115 <_test>;:
- 115: 55 push %ebp
- 116: 89 e5 mov %esp,%ebp
- 118: 83 ec 18 sub $0x18,%esp
- 11b: c7 04 24 ee 00 00 00 movl $0xee,(%esp)
- 122: e8 00 00 00 00 call 127 <_test+0x12>;
- 127: e8 aa ff ff ff call d6 <_getbuf>;
- 12c: 89 45 fc mov %eax,0xfffffffc(%ebp) ;从getbuf函数中返回就执行这个指令。
- 12f: 8b 45 fc mov 0xfffffffc(%ebp),%eax
- 132: 89 44 24 04 mov %eax,0x4(%esp)
- 136: c7 04 24 ff 00 00 00 movl $0xff,(%esp)
- 13d: e8 00 00 00 00 call 142 <_test+0x2d>;
- 142: c9 leave
- 143: c3 ret
复制代码
12c中的指令mov %eax,0xfffffffc(%ebp) 是从getbuf函数中返回的时候就要执行的指令,指令长度为3个字节,因为指令的编码是89 45 fc,我们的改动必须跳过这个指令。
因此我们求出ebp+4的内容,这个内容就是这个指令的执行地址,把这个地址加3就是下一个指令即
- 12f: 8b 45 fc mov 0xfffffffc(%ebp),%eax
复制代码
的地址。
因此,86114000用小端法表示就是0x401186就是下一条指令的地址。
3)efbeadde:向局部变量val写入我们要修改的值。 |
|