首页
社区
课程
招聘
[原创]2018看雪&TSRC CTF第14题WP
发表于: 2018-12-29 10:24 5882

[原创]2018看雪&TSRC CTF第14题WP

2018-12-29 10:24
5882

惯例先看看开了哪些保护。

程序流程很简单

两处漏洞:
1、gets堆溢出

2、格式化字符串

虽然存在格式化字符串漏洞,并且GOT表可写,但是程序使用的是printf_chk函数。会检测出形如"%n"和"%12$p"这种利用方式。
考虑到main函数由libc_start_main调用,因此栈上的返回地址是一个libc中的地址,利用格式化字符串漏洞能泄露出libc的基址。
"%p::%p::%p::%p::%p::%p::%p::%p"。第8个%p就能打印出libc上的地址。

houseoforange的思路
1、malloc一个0x400的chunk,通过gets()溢出修改topchunk的size域为0xc01(这里要保证topchunk是页对齐的,并且PRE_INUSE位置1,否则后面释放old topchunk时会报错)

2、malloc一个0x1000的chunk(比topchunk大,小于0x20c00就行).libc会分配出一个新的topchunk,并把old topchunk给free掉。这样我们就得到了一个unsorted bin

3、malloc一个0x20的chunk。unsorted bin会先放入large bin中,然后分割成两部分。第一部分返回给malloc,剩下的作为last_remainder又被放入unsorted bin链表中。利用gets溢出在这个unsortedbin中伪造一个IO_FILE结构

4、最后随便malloc一下,由于unsorted bin链表被破坏,程序_IO_flush_all_lockp时会使用我们伪造的IO_FILE,执行one_gadget


[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

最后于 2018-12-29 10:56 被mratlatsn编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//