修改邻接变量-0day漏洞利用原理(6)

大多数情况下,局部变量在栈中的分布是相邻的,但也有可能出于编译优化等需要而有所例外。具体情况我们需要在动态调试中具体对待,这里出于讲述基本原理的目的,可以暂时认为局部变量在栈中是紧挨在一起的。

提供理论基础  下一篇利用:非法的超长密码去修改 bufer 的邻接变量 authenticated 从而绕过密码验证程序  

修改邻接变量的原理

通过上一篇:函数调用约定与相关指令-0day漏洞利用原理(5)_luozhonghua2000的博客-CSDN博客,我们已经知道了函数调用的细节和栈中数据的分布情况。如图5 所示,函数的局部变量在栈中一个挨着一个排列。如果这些局部变量中有数组之类的缓冲区,并且程序中存在数组越界的缺陷,那么越界的数组元素就有可能破坏栈中相邻变量的值,甚至破坏栈帧中所保存的 EBP 值、返回地址等重要数据。

我们将用一个非常简单的例子来说明破坏栈内局部变量对程序的安全性有何种影响。

#include <stdio.h>
#define PASSWORD "1234567"
int verify_password (c

猜你喜欢

转载自blog.csdn.net/luozhonghua2014/article/details/131029832