buuctf-pwn [NewStarCTF 2023 公开赛道]stack migration(64位栈迁移)题解(学习过程持续更新)

本人也是在自学过程,主要目的也是记录学习过程,有些地方做的不太好,都是按照自己理解进行讲解的(不专业),欢迎大家指出问题

checksec pwn 查看一下保护机制

可以看到这是一个64-bit的文件,NX保护开启

将文件拖入ida64,按F5将汇编代码转换成c语言代码,得到

可以看到存在read(0,&v3,96)栈溢出,96-0x50=16,所以仅能溢出到return address,考虑栈迁移。我们可以迁移到v2上去,并且printf里的%p也帮我们打印出来了v2的地址,v2的地址加8就是v3的地址

这个题我们需要两次利用栈迁移:第一次调用pust函数泄露read@got里存储的read函数的真实地址,从而得到system函数和字符串'/bin/sh'的地址;第二次构造system("/bin/sh"),获得shell

返回虚拟机

第一次发送:8个'a',利用%p获得地址

第二次发送:泄露read@got里存储的read函数的真实地址;其中buf_addr+8是payload的起始位置,

b'a'*8是因为ret后esp会自动加8,用于填充那八个字节的空余位置(垃圾数据);最后返回到sub_4011FB函数,而第二次构造做准备

然后接收read函数的真实地址,进而得到system函数和字符串'/bin/sh'的真实地址

第三次发送:再次重复第一次的步骤,获得buf_addr

第四次发送:构造system("/bin/sh");ret_addr用于栈对齐

完整exp

保存退出

python3 exp.py

cat flag

此题完

相关推荐
Escalating_xu9 小时前
【C 语言】深入理解指针(5):sizeof、strlen、数组名语义与指针笔试题全解析
java·c语言·开发语言
小雪崩9 小时前
嵌入式学习 day61-62:IMX6ULL驱动——系统移植
学习
Code_Solitude9 小时前
c语言:递归
java·c语言·算法
一隅论数智9 小时前
OWL(Web Ontology Language)介绍与使用举例(二)
大数据·经验分享·笔记·学习·自然语言处理·学习方法·政务
我命由我123459 小时前
Photoshop - Photoshop 使用内容识别填充移除对象
学习·职场和发展·产品运营·求职招聘·职场发展·学习方法·photoshop
万年咸鱼10 小时前
解决C语言的内存释放机制
java·c语言·python
梓雨枔10 小时前
JavaScript+快速学习,简单好用~
javascript·学习
老王爱玩车11 小时前
自定义类型:结构体
c语言·开发语言·学习
JWASX12 小时前
Java 转 go 学习 - GRPC(1)
学习·golang
鬼手点金12 小时前
opencode-全能开发者配置
java·linux·服务器·前端·javascript·学习·前向传播