-
-
[原创]2018看雪&TSRC CTF第14题WP
-
发表于:
2018-12-29 10:24
6085
-
[原创]2018看雪&TSRC CTF第14题WP
惯例先看看开了哪些保护。
程序流程很简单
两处漏洞:
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
[注意]看雪招聘,专注安全领域的专业人才平台!
最后于 2018-12-29 10:56
被mratlatsn编辑
,原因: