栈基础学习
栈溢出实战讲解
1 |
|
这是一个简单的pwn栈题,我们用vc6++来调试一下他
我们在main函数scanf 里输入了9个1
接着进入verify_password函数,注意栈变化
注意看上面这个图的红框 是authenticated的值,我们返回的就是这个值
这里strcpy函数给他覆盖了
上图红框为传入的参数,12ff3c的位置就是password的地址
黑框为返回地址,main函数的地址
绿框为 main函数的栈底也就是此时栈的栈底(为什么传入调用方栈底,是因为要用栈底来寻址,如果访问参数 是以这个位置为加法访问的 如果访问局部变量 是以这个位置为减法访问的)
蓝框为局部变量authenticated,但此时返回值被我们输入的1给覆盖了
本来的FF FF FF FF 变成了31 00 FF FF 所以此时如果我们再写长一点去覆盖黑框的返回地址呢? 是不是已经控制了 程序流,我们试一试
正常来看我们输出的是incorrect password! 我们尝试让他输出Congratulation! You have passed theverification!,就覆盖返回地址为00401100
成功控制
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1204342476@qq.com