360教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

编写自己的缓冲区溢出运用程序

时间:2024/6/12作者:未知来源:360教程人气:

[摘要](内存低址) 单步执行 (gdb) si 0x8048400 in vulFunc () 好, 现在进入vulFunc函数了. (gdb) i reg eax 0xbffff708 -1073744...
 
(内存低址) 

单步执行 
(gdb) si 
0x8048400 in vulFunc () 

好, 现在进入vulFunc函数了. 
(gdb) i reg 
eax 0xbffff708 -1073744120 
ecx 0x804842c 134513708 
edx 0xbffff856 -1073743786 
ebx 0x4010c1ec 1074840044 
esp 0xbffff6b0 -1073744208 
ebp 0xbffff6b8 -1073744200 
esi 0x4000ae60 1073786464 
edi 0xbffff704 -1073744124 
eip 0x8048400 134513664 
eflags 0x382 898 
(以下省略) 
... 

这时esp已经变为0xbffff6b0, 和以前的值0xbffff6b4比较相差四个字节. 
我们来看看到底压了什么东西入栈. 
(gdb) x/11x $esp 
0xbffff6b0: 0x08048443 0xbffff856 0xbffff6d8 0x400349cb 
0xbffff6c0: 0x00000002 0xbffff704 0xbffff710 0x40013868 
0xbffff6d0: 0x00000002 0x08048350 0x00000000 

原来是main函数里调用vulFunc函数的指令的后续指令的地址--即vulFunc函数的返回地址. 
这是我们的第一个焦点. 

... 
0x804843e <main+18>: call 0x8048400 <vulFunc> 
0x8048443 <main+23>: add $0x4,%esp 
... 

我们接着分析vulFunc函数. 
0x8048400 <vulFunc>: push %ebp 
0x8048401 <vulFunc+1>: mov %esp,%ebp 
0x8048403 <vulFunc+3>: sub $0xc,%esp ; esp等于esp-12, 栈帧大小增加12个字节. 

前面两条指令的功能和main函数的一样, 用来保存调用函数栈帧的栈底ebp和设置被调用函 
数栈帧栈底. 
即: 保存调用函数的栈帧栈底, 调用函数栈帧的栈顶变为被调用函数的栈底. 可以看出当前 
(被调用函数)的栈帧为空时, ebp和esp的值相等. 


第三条指令在栈帧中分配了0xc(十二)个字节的内存空间, 注意到里面的内容是垃圾. 
(gdb) si 
0x8048401 in vulFunc () 
(gdb) si 
0x8048403 in vulFunc () 
(gdb) si 
0x8048406 in vulFunc () 

(gdb) x/15x $esp 
0xbffff6a0: 0x4000ae60 0xbffff704 0xbffff6b8 0xbffff6b8 
0xbffff6b0: 0x08048443 0xbffff856 0xbffff6d8 0x400349cb 
0xbffff6c0: 0x00000002 0xbffff704 0xbffff710 0x40013868 
0xbffff6d0: 0x00000002 0x08048350 0x00000000 

此时进程在内存中相关的影像为: 
(内存高址) 

关键词:编写自己的缓冲区溢出运用程序




Copyright © 2012-2018 360教程(http://www.360sd.cn) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版