BUUCTF warmup_csaw_2016

本文详细介绍了如何通过分析64位二进制文件,利用gets函数的漏洞进行缓冲区溢出攻击,覆盖返回地址来执行特定命令。通过IDA逆向工程,发现sprintf函数使用%p输出内存地址,然后通过填充rbp寄存器的值,成功触发了catflag.txt命令,从而获取到flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BUUCTF  warmup_csaw_2016

 

下载文件,把它拖入虚拟机中,checksec一下

 

这是一个64位的文件,并且没有开启任何的保护

我们先运行一下试试

发现它给出了一个地址,我们先记下,可能会用到

放入64位IDA中查看一下他的代码

伪C代码↓

 

汇编代码↓

 

发现了一个函数sprintf,并且用%p的方式来输出,也就是输出地址

下面是我搜索到的关于 %p 的知识

 

我们双击40060D看一下

 

 

再回过头来看代码

众所周知gets函数是一个危险函数,所以我们要以它为pwn掉的点

gets接受v5变量传入的信息,而v5我们可以看到定义了40个字节,再把40060D的地址填充到gets函数分配的地址中就可以达到我们的目的

由此可见,我们可以利用覆盖返回地址来执行cat flag.txt这条命令

有了思路我们就开始编写脚本

 

运行一下试试

不正确,说明我们在填充字节的时候出错了

重新回过头看一下代码

 

发现我们忘记填充rbp了

32位的文件需要填充4个字节

64位的文件需要填充8个字节

重新修改脚本

 

运行脚本

 

成功拿到 flag !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值