前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >栈溢出学习笔记

栈溢出学习笔记

作者头像
信安之路
发布2018-08-08 15:17:07
6020
发布2018-08-08 15:17:07
举报
文章被收录于专栏:信安之路信安之路

题目链接如下:

https://pan.baidu.com/s/1mhVvanY 密码: bwsn

一是做个总结,二是做个备份。说来惭愧,思路都是 7o8v 师傅给的。特别感谢 7o8v 师傅的帮助。

题外:复现蒸米师傅 《一步一步学 rop》 复现失败,猜测是栈的问题,我是调用 start 恢复栈的做法。

这是我看到更为详尽的分析

http://www.purpleroc.com/md/2016-02-25@Thinking-About-Level2.html

0x01 pwn1

这题是 7o8v 师傅丢给我的。特别的就是这题是静态链接。所以,got 覆写就 gg 了。因为有源码就直接 checksec 一下,堆栈可执行。

我就想 retjmp esp 这条指令上,然后在 ret 之后放置 shellcode。结果,不够长,gg

7o8v 师傅告诉我的思路 ( frame faking ),retjmp esp 指令上,这样就跳到栈上,再在栈上布置合适的 sub esp,再 jmp esp

我失败的思路是在寄存器上找合适或相近的数据,再修改一下寄存器,用 jmp 寄存器。然后没有合适的 gadget

后面我就想通过 retprintf 泄露出栈地址,再 retmian。这样就可以计算出栈地址。

因为输入长度限制,跪了,exp 如下:

0x02 pwn2

这题还是 7o8v 师傅丢给我的。首先用 ida 打开,发现有两个洞

惯例 checksec 一下,发现只开了 NX,其实在 function 函数手动设置了 canary

格式化字符串来做

栈上保留了 read+35 的地址,我们只要 %p 就可以得到 read 函数的地址,进而算出 system 的地址。

这道题目的格式化字符串不是放在栈上而是放在 .bss 段中。

大佬告诉我要用一个跳板,栈上有指针什么是指向栈上的,我第一想到的就是 ebp ,反正不是打远程机。

其实两个两个字节写入比较好。好吧,是因为懒。然后我就修改 mainebp 使其指向 puts 函数的 got 表。使用 %n 修改 got 表使其指向 system 函数。这样下次跳用 puts("/bin/sh") 就变成了 system("/bin/sh")

exp 如下:

栈溢出

这种做法是 7o8v 师傅告诉我的,真的是刷新了我对栈溢出的看法。

首先爆破出 canary 的值。然后使用 '\x00' 使 login Success。

然后进入 leavemsg 输入一个 'a',而这个 'a' 刚好覆盖了上面 payload 开头的 '\x00', 实现了任意长度的 strcpy

覆盖了 function 的返回地址。最后 sendline('0') 引爆这个炸弹。

exp如下:

0x03 总结

1、 对知识点的理解不够深刻,花了一个月的时间尝试溢出 scanf("%d"),尝试使用格式化字符串漏洞修改 eip [笑哭]

2、 从 7o8v 师傅的 exp 中了解到栈溢出并不是只在输入发生的

3、 台上一分钟,台下十年功

0x04 参考资料

http://bobao.360.cn/learning/detail/3654.html

https://bbs.pediy.com/thread-213067.htm

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 pwn1
  • 0x02 pwn2
  • 0x03 总结
  • 0x04 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档