首先,我们检查一下程序的保护机制
然后,我们用IDA分析一下,是一个经典的增删改查的程序,然后我们看到创建堆时,[前两个堆是用malloc创建,后面的堆用calloc创建]{.mark},这意味着,如果要泄露libc地址,只能靠前两个堆,后面的堆从bin里取出后会清空里面的信息。
首先,我们检查一下程序的保护机制
然后,我们用IDA分析一下,是一个经典的增删改查的程序,然后我们看到创建堆时,[前两个堆是用malloc创建,后面的堆用calloc创建]{.mark},这意味着,如果要泄露libc地址,只能靠前两个堆,后面的堆从bin里取出后会清空里面的信息。
House of orange因一道同名的题而来,它是在程序没有调用free函数的情况下利用其它漏洞结合IO_FILE来达到利用。
首先利用漏洞修改top chunk的size,然后申请一个比size大的堆,满足一定条件,这个top chunk就会被释放到unsorted bin里。
利用unsorted bin attack,将__IO_list_all指针改写为unsorted bin的头chunk地址
利用漏洞在可控的unsorted bin里伪造IO_file_plus和vtable结构
再次malloc时,由于unsorted bin里的指针被修改了,发生malloc_printerr报错,而malloc_printerr用到了__IO_list_all指针,会从__IO_list_all指向的地方开始查找合适的FILE结构,并调用里面vtable里的函数。因此,我们在vtable里放入system函数即可getshell
我们先来看一下程序的保护机制