首页 > 其他分享 >关于pwn题的栈平衡中ret的作用

关于pwn题的栈平衡中ret的作用

时间:2024-04-06 23:56:07浏览次数:21  
标签:字节 system ret 地址 pwn 平衡 rsp 函数

以nssctf里的where_is_my_shell为例

题目提供了一个system函数,和一个buf数组。数组的栈空间如图所示,这里不讨论怎么解题,只说明payload里的ret的作用。
假设没有ret,栈溢出到ret的时候内容如下:
第一个八字节:

(图示位置)存储 pop rdi;ret;的地址
它下面的八个字节存储要pop的参数。再下面八个字节存储system函数的地址。
这个时候我们可以知道一共存了三个八字节,第一个八字节的地址以8为起始,第二个以10为起始,第三个自然就是18为起始。问题就出在这里,
调用system函数的时候,它里面有一个函数要求system的rsp是16字节对齐的。即rsp指向system函数并执行时,system在栈中的地址必须是以0结尾的。
而此时是以8为结尾的。所以会产生错误。
此时在原本函数ret的位置再加一个ret就可以解决问题。原理如下:
根据汇编知识可知ret指令相当于把rsp所指向的栈中存储的地址赋给rip执行,然后使rsp+8(即使rsp指向栈中下一个位置).所以在所起作用的三个八字节前面加上一个ret(占八个字节)会使得这三个八字节的起始位置都往后顺延八个字节。所以此时system函数的起始地址就是以0结尾,满足16字节对齐要求。而由于ret的特殊性,在所执行操作前加上一个ret不会影响执行。
加一个ret后的操作如下:
原本函数的ret将我找到的ret地址赋给rip然后使rsp指向pop rdi;ret;的地址。然后rip执行ret指令,即把pop rdi;ret;的地址赋给rip然后执行后续操作。
所以加上ret后不会影响payload的执行,只会使payload里其它操作的地址往后顺延八个字节。

标签:字节,system,ret,地址,pwn,平衡,rsp,函数
From: https://www.cnblogs.com/loserw/p/18118156

相关文章

  • 红黑树的平衡之道:深入解析右旋操作的原理与实践
    红黑树的平衡之道:深入解析右旋操作的原理与实践一、红黑树旋转的背景二、右旋(RIGHT-ROTATE)的原理三、右旋(RIGHT-ROTATE)的算法步骤四、右旋(RIGHT-ROTATE)的伪代码五、右旋(RIGHT-ROTATE)的C代码实现五、结论红黑树作为一种高效的平衡搜索树,其插入和删除操作的时间复杂度......
  • 17天【代码随想录算法训练营34期】第六章 二叉树part04(● 110.平衡二叉树 ● 257.
    110.平衡二叉树#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:defgetDepth(self,root):......
  • 劫持TLS绕过canary pwn89
    劫持TLS绕过canarypwn88首先了解一下这个东西的前提条件和原理前提:溢出字节够大,通常至少一个page(4K)创建一个线程,在线程内栈溢出原理:在开启canary的情况下,当程序在创建线程的时候,会创建一个TLS(ThreadLocalStorage),这个TLS会存储canary的值,而TLS会保存在stack高地址......
  • pwn知识——unlink(smallbins)
    是我的错觉么,总觉得unlink比UAF好懂好多...也有可能是我觉得做题模板比较好理解一点,真要深入的话我感觉一个头会比两个大emmmm原理及其条件原理unlink顾名思义,脱链,把一个空闲的chunk从unsortedbin里取出来,与物理相邻的chunk合成一个一个大堆块(分“前合”,“后合”’)。这里用图......
  • 数据结构:二叉搜索树、平衡二叉树(AVL树)、红黑树、B树、B+树
    个人理解浅谈数据结构,应对八股文面试目录前言一、二叉搜索树(二叉排序树、二叉查找树、AVL树)(1)二叉树的特点:(2)二叉树的优缺点二、平衡二叉树(高度平衡树,最早的自平衡二叉树)(1)平衡二叉树的特点:(2)平衡二叉树的优缺点三、红黑树(1)红黑树的特点(2)红黑树的优缺点四、红黑树......
  • @Retention(RetentionPolicy.RUNTIME)
    注解按生命周期来划分可分为3类:1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,j......
  • 花式栈溢出 CTFshowpwn88
    花式栈溢出在这之前确实对这方面了解很少,一般这种花式栈溢出不仅仅要求你能发现漏洞,最主要的是你要有随机应变的能力这个题是一个64位的题目看一下保护canary和nx保护都开了,我们用ida打开看一下那么程序主要是要你给一个地址和一个值,他会把你给的值放入你给的地址里面,然后......
  • Vue3 + TypeScript + Vite 初始项目搭建(ESLint、Prettier、Sass、Stylelint、husky、p
    仓库地址仓库地址:https://gitee.com/tongchaowei/vue-ts-vite-template项目源码下载:https://gitee.com/tongchaowei/vue-ts-vite-template/releases全局安装pnpm包管理工具执行如下命令在系统全局安装pnpm包管理工具:npmipnpm-g使用Vite脚手架创建Vue3......
  • 安装Pygame过程中提示错误WARNING: Retrying…ERROR: Exception: Traceback…WARNING:
    安装Pygame过程中提示错误WARNING:Retrying…ERROR:Exception:Traceback…WARNING:Youareusingpipversion解决方案前言Pygame错误错误分析解决方案错误分析结论更新pip安装Pygame前言输入Pygame安装命令pipinstallpygame安装Pygame出错提......
  • TreeSet自定义对象compareTo(Object o)方法
    java小白,最近学到TreeSet,我们都知道在存储自定义对象时,需要使用Comparable或使用Comparator存储。刚刚碰到这样一段代码。publicclassPersonimplementsComparable{intage;Stringname;Person(intage,Stringname){this.age=age;th......