这道题程序跟[ZJCTF 2019]EasyHeap其实是一样的,区别在于前者让magic大于0x1305就可以拿到shell,后者就需要改got表才行,因为最近我刚学了fastbin attack,unlink attack,unsotred attack这三种(后两种攻击都涉及到了双向链表出链的操作)突然发现这道题可以用这三种攻击分别解决,就拿来练练,巩固一下~先看程序开了哪些保护,开了canary和NX,没有pie,Partial RELRO表明可以修改got表(虽然这题不用改got表)
可以看到有一个menu函数可以看到是一个菜单题,程序有三个功能,分别是进行创建,编辑,删除操作。可以看到这个函数会依次遍历heaparray数组,看哪个元素没有分配chunk,找到后,分配一个chunk,chunk大小可以自定义,然后写入内容,注意:heaparray数组的元素存放的是chunk的数据部分的指针。这个函数则根据用户输入的索引(从0开始),修改chunk的数据部分,特别的read_input(*(&heaparray + v1), v2);这里写入内容的大小竟然还是自定义的,所以这里可以覆盖其他chunk的内容这里根据索引(从0开始)来free,没啥毛病可以看到main函数里还可以设置menu的选项为4869,如果magic大于0x1305就可以执行l33t函数
可以看到会给一个shell这道题我们只要让magic>0x1305就可以拿到shell了,有三种方式第一种方式:使用fasbin attack中的Arbitrary Alloc,利用编辑功能的堆溢出覆盖fasbin的fd指针,使其指向在magic变量低地址方向的fake chunk,从而我们能够申请fake chunk达到修改magic值的目的第二种方式:unlink attack,比如我们申请了chunk0和chunk1,利用编辑功能的堆溢出在chunk0数据部分伪造fake chunk,改写chunk1的presize和size中的inuse标志位,从而使得我们可以修改heaparray[0]的内容,实现任意地址写,只要把heaparray[0]改成magic地址,再用编辑功能改写magic即可第三种方式:unsortedbin attack,比如我们申请了chunk0,chunk1,chunk2,free(chunk1)时将其放入unsortedbin,我们编辑chunk0利用堆溢出覆写chunk1的bk指针,结合unsotedbin attack(具体原理可以移步2deK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0N6r3k6Q4x3X3c8%4K9h3E0A6i4K6u0W2L8%4u0Y4i4K6u0r3M7s2N6F1i4K6u0r3L8r3W2F1N6i4S2Q4x3V1k6#2M7$3g2J5i4K6u0V1L8h3!0V1k6g2)9J5c8X3S2W2j5i4m8Q4x3V1k6H3N6r3#2S2L8r3I4G2j5K6u0Q4x3V1k6#2L8Y4y4G2M7Y4c8W2k6q4)9J5k6r3u0A6L8W2)9J5k6r3q4@1N6r3q4U0K9#2)9J5c8R3`.`.),可以实现将任意地址修改为一个很大的值,也就能达到修改magic使其大于0x1305的目的。先写下交互首先申请两个chunk,再回收chunk1,此时fd指针为null先观察下magic附近,可以分配到0x60208d这个地方,这个fake chunk跟magic偏移是0x3,size是0x7f,符合fastbin要求,也能修改magic值最后就是发送4689拿shell了先申请两个chunk构造fake chunk,修改chunk1的presize和size接着free chunk1就会触发unlink,heaparray[0]指向的是&heaparray[0]-0x18的位置我们可以实现任意地址写了,但是我们把heaparray[0]改成magic地址就行了再改magic值最后就是输入4869得到shell首先申请三个chunk,free chunk1利用堆溢出覆盖chunk1的bk指针接着就是触发unlink,把magic值改成较大值了,这里的值其实就是上面的main_arena+88,具体可以看unsortedbin attack原理,这里就不赘述了,这个值通常也可以用来泄露libc基址最后就是输入4869得到shellint __fastcall __noreturn main(int argc, const char **argv, const char **envp)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289472.htm
[原创][BUUCTF刷题记录]hitcontraining_magicheap
358 浏览
0 回复
暂无回复,快来抢沙发吧!