security - 跳转到函数内部的地址
问题描述
在尝试解决过去 ctf 事件的挑战时,我遇到了一个独特的问题,需要我执行以下操作:
- 使用易受攻击的方法“gets()”将 vuln 函数的返回地址溢出到另一个函数,并将其上方的堆栈单元溢出到另一个给出标志以创建 rop 链的函数。
- 溢出它需要这样一种方式,即第二种方法中的全局布尔变量将能够传递以下布尔条件:if(a && !a){; 然后安全地进行到最后一个函数
这显然是不可能的,任何布尔值都不应该同时为真和假,但是如果您正在查看它的编译程序集,它将它分为两个不同的条件,一个检查其是否为真,一个检查其是否为假,那么唯一的选择是在考虑到布尔值的默认值为 false 的情况下跳入两者之间。
溢出到中间地址的结果是程序立即终止,同时考虑到在第二个方法的中间着陆后需要跳转到另一个方法的事实,看起来中间跳转正在离开和 ret 功能受到干扰。
我的问题是:
是否可以跳到函数的中间而不干扰函数的“折叠”并出错,如果不是为什么?如果是,需要做什么?
尊重,革命
顺便说一句:aslr 已激活,程序是用 c 编写的,操作系统是 ubuntu 32 位,挑战来自 pico ctf 2019 这个问题是一个普遍问题,是从活动中的挑战中获得灵感的,所以写起来不是在这种情况下回答。
解决方案
推荐阅读
- python - Django:有没有办法用“du”非正式地称呼?
- java - StringConcatFactory 中的策略
- javascript - Return 似乎没有在等待 javascript
- python - 命令行参数后跟 argparse 选项
- android-studio - 与 Android Studio 安装相关的问题
- javascript - Boostrap modal 的变化改变了不同的作用域变量
- html - 如何在不影响以下 div 位置的情况下添加图像
- python-3.x - 多次打印到文件
- ssh - 权限被拒绝(公钥)
- javascript - 我在文件管理器中用于启动节点 js 的正确文件路径是什么?