读书笔记2:0day安全:软件漏洞分析技术

实验修改函数返回地址
经过上个笔记的学习,我们了解了调用verify_password(char * password)时栈的情况:(注不了解函数调用方式的建议先找文章了解关键字:call的调用方式)
在这里插入图片描述
我们都知道,执行完verify_password(char * password)是call指令调用是还会把它的下条指令地址入栈,用于调用完之后返回上层函数继续执行程序指令:
其实大致方法还是跟修改临近变量的方法一样的…就是把我们修改入栈时的返回地址,从而实现控制跳转…
源码还是同一份这里就不贴出来了
我们可以传入password为AAAAAAAA(这里覆改buffer)BBBB(这里覆盖authenticated)CCCC(这里覆盖入栈的EBP)(最后这里是我们的返回地址,注意小尾存放(高维数据存放再高位地址中))这里是我们的要修改的返回地址地址
实验开始:
我们记下跳出成功通过验证的指令的地址:0x00401106小威存放则需要我们放入:06114000
在这里插入图片描述
因此,我们可以构造password = AAAAAAAABBBBCCCC06114000
在这里插入图片描述
这里之所以跟我们预期不同,是因为我们输入的时候系统读取的转成ASCII码了该地址系统取指令出错了,因此发生了程序崩溃,我们需要的是十六进制的才能跳过去,怎么操作,我们下篇笔记见吧,哈哈

猜你喜欢

转载自blog.csdn.net/weixin_43084928/article/details/88596915