qq_33769290 2016-03-10 16:03 采纳率: 25%
浏览 1750
已采纳

关于一个简单的堆栈例子

我在读一本入侵检测技术的书,看到一个简单的堆栈溢出示例,看不懂,请各位大神解释一下是什么意思图片说明图片说明

  • 写回答

3条回答 默认 最新

  • zuishikonghuan 2016-03-11 00:08
    关注

    简单说就是通过程序编写的不严格,使局部变量溢出从而覆盖掉堆栈上的返回值。调用一个函数时,以__stdcall为例,先把参数入栈,然后时返回地址入栈, CPU执行现场跳转到函数中 ,然后是ebp寄存器入栈,随后局部变量和寄存器入栈,不同的编译器可能会有所差别,比如微软CL编译器在处理Debug和Release时是有一些区别的,但大致是相同的,溢出攻击,简单说就是溢出覆盖掉了返回值,这样就可以在函数返回时跳转到hacker指定的一个地址,如果hacker事先发送精心设计好的数据,就可以在远程计算机上执行他想执行的代码,然后反弹一个shell给hacker,hacker就可以在目标主机上上传和执行程序,如果溢出的程序没有权限,hacker还可以利用本地提权漏洞提权得到管理员/root权限,随后以这台主机为跳板,渗透网络中的其他主机!

    后话:人类为了抑制溢出攻击,具有划时代意义的成果有:DEP(数据执行保护)、ALSR(地址空间分布随机化)等。简单说DEP通过将指定虚拟内存页面设置为“不可执行”,当然需要硬件支持,所有和Intel x86和amd x86_64兼容的CPU均支持,当CPU执行不可执行页面的代码时,就会出现虚拟内存违规访问,从而程序崩溃退出,在部分Windows系统上,操作系统还会在右下角弹出一个气泡“数据执行保护已终止XXX程序”。绕过DEP在没有ALSR的系统上(比如XP)还是比较简单的,溢出覆盖返回值为VirtualProtect,修改指定内存页面的访问规则即可。ALSR简单说就是将程序载入内存时不载入程序要求载入的地方,而是随机载入(当然操作系统必须遍历程序代码,然后对导入的函数、数据、以及自己的函数调用进行“重定向”),这样函数地址什么的全是随机的了,hacker溢出后就不知道往哪个地址调用VirtualProtect了,非常棘手,360为何对自己的XP甲盾如此有信心?因为XP甲盾通过驱动拦截可执行模块载入并修改了基地址,相当于在XP上实现了ALSR,当然代价是使系统运行效率下降。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信