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

此题完

相关推荐
lhh_qrsly2 小时前
HTTP / HTTPS / MQTT / MQTTs(嵌入式学习版)
学习·http·https
xier_ran20 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
连山齐名20 小时前
ai应用开发的学习笔记
服务器·笔记·学习
爱读书的小胖20 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
xier_ran20 小时前
【infra之路】AI 编译器学习笔记(十四):为什么要 tiling,以及矩阵计算单元的“固定“
人工智能·笔记·学习
燕落南枝20 小时前
HTML 学习:辅助标签 label 与字符实体
前端·学习·html
Code_Solitude21 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
hackchen21 小时前
LangChain 学习第 3 课 - 输出解析器(Output Parser)
数据库·学习·langchain
醒醒11121 小时前
从微信小程序到全端:一个安全扫描器的演进之路(v0.5.0 → v0.6.0)
前端·安全
鸽鸽程序猿21 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言