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 !