赛题链接
https://github.com/eternalsakura/ctf_pwn/tree/master/0ctf2018/babystack
前置技能
ret2dl in x86
没有能用来leak的漏洞。
如下面的代码,除了明显的栈溢出,没有可以用来leak内存布局,bypass aslr的函数。
1 | #include <stdio.h> |
本来想写一下原理的,不过其他资料已经讲得非常好了,实在没什么可补充的(其实是我还不怎么懂)。
https://www.slideshare.net/AngelBoy1/re2dlresolve
http://www.inforsec.org/wp/wp-content/uploads/2016/01/sec15-paper-di-frederico.pdf
http://skysider.com/?p=416
学习过程中最好找个程序,然后对着_dl_runtime_resolve源码服用,效果更佳,然后再看图就思路清晰了。
分析
alarm用keypatch先nop掉
可以看出有很明显的栈溢出漏洞,但是只有一个read,没有可以用来leak的函数,所以用ret2dl的解法
利用
利用思路
- 通过栈溢出来调用read函数在bss段写我们需要的结构和/bin/sh
- 然后使用dl_resolve_call去调用system,得到shell。
getshell
1 | #coding:utf-8 |
其他
ret2dl方法是hook师傅教我的,我也没全看懂,只是理解了基本思路后,整个过程用roputils工具来实现的,工具我放在了我的github上。
依然不懂怎么手工构造,而且程序再换成64位也就不会,还要学习一下。