pwn学习之——花式栈溢出

第一步看看保护措施,确定方略,再看看ida里面有用信息:


pwn学习之——花式栈溢出_第1张图片
image.png

pwn学习之——花式栈溢出_第2张图片
image.png

看到是栈的溢出漏洞,但是发现栈空间不够写指令,又发现题目创建了个堆给你,应该可以好好利用这个堆实现我们想要的功能,正常来说,当栈的空间不够用时是写入bss段的,这里正好可以用,就先用吧,接下来找有用信息:


pwn学习之——花式栈溢出_第3张图片
image.png

看来没有system和/bin/sh,有些迷,看到还有一个文件libcpovit.so,拖ida进去看看:
pwn学习之——花式栈溢出_第4张图片
image.png

发现了我们想要的system函数,同时参数有效,就是直接得到flag,那么接下来就是要在povit中获取这个ret2win的真实地址了,再找找信息:
pwn学习之——花式栈溢出_第5张图片
image.png

pwn学习之——花式栈溢出_第6张图片
image.png

发现了相同的函数,思路已经比较清晰了:
首先让function函数执行一次,在got表中生成对应的真实地址,然后偏移量是利用在libc表中的偏移和真实表中的偏移相同,先计算出在libc表中ret2win和function之间的偏移。再用function真实地址+偏移地址=ret2win的真实地址。
脚本就可以写出来了:
1、计算偏移:


pwn学习之——花式栈溢出_第7张图片
image.png

2、执行一次获取got表上的真实地址:


image.png

3、求ret2win的真实地址并调用这个函数:
pwn学习之——花式栈溢出_第8张图片
image.png

4、得到堆顶指针:
image.png

5、栈溢出操作:
pwn学习之——花式栈溢出_第9张图片
image.png

6、验证答案:


pwn学习之——花式栈溢出_第10张图片
image.png

完整的脚本:
pwn学习之——花式栈溢出_第11张图片
image.png

pwn学习之——花式栈溢出_第12张图片
image.png

花式栈溢出:先把指令放在一个地方,给个地址返回值,然后就能在有限的栈溢出空间进行操作了,相当于跑到另一个地方去执行代码了,优秀!

你可能感兴趣的:(pwn学习之——花式栈溢出)