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

此题完

相关推荐
山东科恩光电1 小时前
折弯机保护装置提升操作安全与效率的关键创新
安全
2601_962364971 小时前
不止指纹和人脸:Windows Hello如何重塑PC生物识别安全?
windows·安全·电脑
ι:2 小时前
单相桥式全控整流仿真从零复现教学
windows·学习·matlab·simulink
传奇开心果编程2 小时前
【Rust入门练中学】 第3课:数据类型
开发语言·学习·rust
humors2212 小时前
今年我正在看、看完和还没看的书单(不定期更新)
学习·阅读·读书·书单·书籍
泡泡鱼(敲代码中)3 小时前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee
其实防守也摸鱼3 小时前
Codex 下载与本地部署实战:从安装到运行全指南
android·大数据·运维·安全·自动化
爱吃苹果的日记本3 小时前
数据结构第五课
数据结构·学习
jimmyleeee4 小时前
大模型安全之十九:从黑箱到透明:Observability 与 AI Evaluation Tool 完全指南
人工智能·安全