缓冲区溢出攻击
上一篇 /
下一篇 2013-07-26 00:27:47
/ 个人分类:安全性测试
void foo(char* input) { char buf[100]; strcpy(buf, input); }
栈的顺序: X86 EBP Stack Frame Highest address Arguments Return address Previous EBP Saved rigisters local storageLowest address |
在C语言中,当调用一个函数的时候,在汇编或者机器码的level是如何实现的呢?假设调上边的函数foo的时候,程序的stack将会是下边图表的样子。首先,输入参数会放到栈中去,然后是这个函数执行完的下一个指令的地址,也就是return address, 然后是EBP,再然后就是这个函数的本地变量的内存空间。比如这个函数申请了100个字节的空间。当BO发生的时候,数据就会覆盖掉buf之后的内存,关键的部分是return address可以被覆盖。那么黑客就可以把return address的值修改成这个buf的一个地址,比如起始地址buf[0]的地址,而这个buf里边填入黑客自己的代码。这样当这个函数退出的时候,程序会执行return address所指定的代码,也就是黑客的代码了
相关阅读:
- 如何进行验证测试(上) (fishy, 2010-1-05)
- 如何进行验证测试(下) (fishy, 2010-1-05)
- 软件安全性测试小结 (fishy, 2010-4-13)
- 关于安全性测试需求如何提取的一点想法 (zhang_hanshi, 2010-12-13)
- [转]系统的安全性测试 (ChinaTNT, 2010-12-14)
- 安全性测试的方法--【转】 (chabao110, 2011-12-17)
- 获取jsessionid后如何利用 (candyzc, 2012-8-06)
- PrepareStatement与Statement的区别 (yubiao584521, 2013-3-06)
- 登录页面-安全性测试 (yubiao584521, 2013-3-07)
- 手机应用软件安全性测试 (xin_晴, 2013-5-08)
收藏
举报
TAG:
安全性测试