码迷,mamicode.com
首页 > 其他好文 > 详细

缓存区溢出的基本原理

时间:2015-02-04 14:17:10      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

缓存区溢出是由于当被被溢出程序/系统调用类似于read()、sprintf()\strcpy()等函数时向程序的内存空间中写入字符串,一般程序会将其放入堆或栈数据结构中 。若其对写入数据大小没有严格限制,则可能引起数据覆盖函数调用时压栈的esp栈顶指针及eip返回值,通过精心设计的写入数据,可以控制其返回值从而达到夺取控制权的效果。

由于我们的程序是以字符串的形式写入内存,所以 应避免空字符00的出现(函数会将其识别为结束字符串‘\0’,从而将我们构造的shellcode从中间截断。)但有时我们的shellcode需要使用字符串,就需要使用空字符作为字符串的结尾。可用的方案之一为不直接储存空字符,而是在夺取控制权之后通过汇编语句创造空字符,给字符串加上一个结尾。例如

Xor eax,eax

Mov  [指向结尾的指针],al

技术分享

缓存区溢出的基本原理

标签:

原文地址:http://www.cnblogs.com/freak/p/4272150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!