溢出覆盖变量

文章发布时间:

最后更新时间:

文章总字数:
462

预计阅读时间:
1 分钟

其实这个知识点应该算是栈溢出后面就可以讲的了 顺序没把握好 不过还好这篇的例题有点干货 就不丢到基础知识扩展那个专题了 在这面说吧

我们已经学习了基础的栈溢出对吧 总归就是覆盖栈上的高地址内的数据 通常我们都是用一些没有意义的垃圾数据去覆盖他

但是有些题目 就可能会故意刁难我们

比如下面这题

1

是吧 他都把var[13]赋值为了0 结果要var[13]>0并且=17才能达到我们系统调用的目的

这怎么整?

我们唯一的输入点就在第十行 其中肯定有漏洞

%s 读入字符串数据 注意这里的是%s 我们刚开始提到的干货就是这个

ps:这里我也理解不了 感兴趣的可以自己看大佬博客:

pwn中str()与p64() - ATKevin - 博客园 (cnblogs.com)

不然就是记个结论 %s就得用p32/p64 传输数据

也就是说我们在覆盖var[13]时 需要注意不能用b””或者是str()

说回题目

scanf没有对输入的字节长度进行限制 存在了栈溢出漏洞

我们只需要用垃圾数据填充var数组的前13个数据 然后用17填充var[13]

当然 这里还得注意一下

char类型的数组的每个值都是一个字节长度的 而这题并不是char类型的数组 所以我们应该用一个字长去覆盖一个数组元素

所以这里我们的payload应该写成

1
payload = cyclic(13*4)+p32(17)

当然也可以写成

1
payload = p32(1)*13+p32(17)

这样我们就成功覆盖了var[13]的值为17了