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

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

时间:2024/10/30作者:未知来源:盾怪网教程人气:

[摘要](内存低址) 继续执行下条指令: ret (gdb) si 0x8048443 in main () (gdb) i reg eax 0x10 16 ecx 0x400 1024 edx 0x401...
 
(内存低址) 

继续执行下条指令: ret 
(gdb) si 
0x8048443 in main () 
(gdb) i reg 
eax 0x10 16 
ecx 0x400 1024 
edx 0x4010a980 1074833792 
ebx 0x4010c1ec 1074840044 
esp 0xbffff6b4 -1073744204 
ebp 0xbffff6b8 -1073744200 
esi 0x4000ae60 1073786464 
edi 0xbffff704 -1073744124 
eip 0x8048443 134513731 
eflags 0x396 918 
(以下省略) 
... 

可以看出, 从栈中弹出0x8048443(vulFunc函数调用的返回地址)给了eip. 
至此vulFunc函数调用完毕, 返回到main函数继续执行. 

值得注意的是: 如果象上面所说的, 我们输入的字串长度为二十个'A'--刚好复盖完0xbffff6b0 
所指的单元, 那么此时从栈中弹出给eip的内容将是0x41414141, 而不是0x8048443, 程序 
将跳到0x41414141去执行那里的指令, 由于0x41414141对于当前进程来说是不可访问的, 
所以导致段出错(Segmentation fault), 进程停止执行. 

这是我们的第三个焦点. 

如果我们能计算好位移(offset), 用我们准备好的代码的入口地址来覆盖0xbffff6b0所 
指的单元, 那么从栈中弹出给eip的内容就是我们的代码的入口地址, 程序将跳到我们的 
代码去继续执行. 

分析到这里, 我们已经清楚了C语言函数调用的机制了. main函数的后续指令对于我们的 
分析已无关紧要. 但是为了保持文章的完整, 我们继续再往下看看. 

此时栈的情况: 
(gdb) x/10x $esp 
0xbffff6b4: 0xbffff856 0xbffff6d8 0x400349cb 0x00000002 
0xbffff6c4: 0xbffff704 0xbffff710 0x40013868 0x00000002 
0xbffff6d4: 0x08048350 0x00000000 

进程在内存中的相关影像: 

(内存高址) 

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




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

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

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