题目来自于2015年强网杯的一道二进制题目shellman, 程序流程很清晰,阅读ida逆向后的代码很容易发现在编辑shellcode时存在溢出,一道很明显的堆溢出二进制漏洞,至于怎么利用,初始想的是利用fastbin attackg攻击,改掉shellcode管理中记录分配的地址,再利用edit功能,修改给出的函数的got地址,改为shellcode地址,后来发现开启的堆栈保护,不能利用,由于堆内容是可控的,结合delete功能,修改free函数的got地址为system地址,system执行堆上的命令,具体细节网上也很多,可参考后文链接,只是网上的都是基于堆溢出+unlink的攻击方式,这里给出堆溢出加fastbin attack的攻击方法, 详情见POC.
- POC
1 | # -*- coding: utf-8 -*- |