buuctf-pwn PWN2(整数溢出)题解(学习过程持续更新)

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

此处我将文件命名为pwn

checksec pwn 查看一下保护机制

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

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

可以看到然我我们输入一个值nbytes,如果有符号整型nbytes<=10就可以执行read(0,&buf,(unsigned int)nbytes)。所以我们需要(signed int)nbytes小于等于10,同时(unsigned int)nbytes足够大,才可以发生栈溢出,覆盖返回地址。

signed int范围:2**31~2**31-1

unsigned int范围:0~2**32-1

我们如果让nbytes=2**31,那么(signed int)nbytes就会等于-2**31,(unsigned int)nbytes就会等于2**31,正好满足我们的要求

返回虚拟机

ROPgadget --binary pwn --only "pop|ret"

得到ret_addr = 0x400599

nano exp.py开始写攻击脚本

第一次发送2**31,整数溢出

payload:填充0x10+8的垃圾数据至return address;ret_addr用于栈对齐;0x400726为backdoor函数的地址,用于覆盖返回地址,获得shell

保存退出

python3 exp.py

cat flag

此题完

相关推荐
旖旎夜光10 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
凉、介10 小时前
深入理解 ARM SCP Firmware 的 Event 与 Notification 机制
学习·scp·嵌入式·arm
hasty10 小时前
返回一个文件,为何越过整个目录?Khoj 静态资源路由的安全边界
数据库·安全
minglie110 小时前
几何变换群矩阵表示与埃尔朗根纲领
学习
dadaobusi10 小时前
学习: ARM SMMU stream id
arm开发·学习
心中有你021411 小时前
C语言 二叉搜索树(BST)超详细完整实现(插入+查找+删除+三种遍历+内存释放)
c语言
神仙别闹11 小时前
基于C语言实现 TINY+ 编译器
c语言·开发语言·数据库
FelixZhang02811 小时前
量化求真10|回测通过以后,策略就能上场吗?
人工智能·python·深度学习·学习·机器学习·金融·lstm
Vcaker11 小时前
Linux学习33-HPA动态扩缩容及k8s调度策略
linux·运维·学习
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++内存模型和名称空间 — 详细知识点总结(9)
开发语言·c++·学习