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,当然代价是使系统运行效率下降。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 buildozer打包kivy app失败
- ¥30 在vs2022里运行python代码
- ¥15 不同尺寸货物如何寻找合适的包装箱型谱
- ¥15 求解 yolo算法问题
- ¥15 虚拟机打包apk出现错误
- ¥15 用visual studi code完成html页面
- ¥15 聚类分析或者python进行数据分析
- ¥15 三菱伺服电机按启动按钮有使能但不动作
- ¥15 js,页面2返回页面1时定位进入的设备
- ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复