sctf_2019_easy_heap 利用off-by-null构造出double free来向任一地址写入(经典)

https://www.cnblogs.com/lemon629/p/13842163.html这个师傅的写的很好

安全检查

没贴图了,保护全开

流程分析

程序总体来看是个菜单题,不过都是delete没什么问题,有问题的主要是输入函数

程序首先会分配一块mmap的内存出来,并且有rxz权限

 

 在edit中,有一个这样的函数,很明显可以看出有off-by-null的漏洞

 

 漏洞利用

很经典的一道题ubuntu18上的unlink,通过overlap形成double free在将chunk分配进mmap,接着重复一遍,将malloc hook劫持即可

  1. 首先程序有off-by-null,由于chunk的大小不小于0x400就不会被放入tache,就会直接进入unsorted bin,由于这个原因,在以前的一道题,遇到过一次这样的类型
  2. 我们可以先申请4个chunk,大小分别为0x410,0x68,0x4f0,第四个任意,首先delete掉第0个,然后对chunk1进行编辑覆盖0x4f0的位置pre_inuse位,并且把其pre_size的大小修改为0和1chunk的总和,这样当我们下次在申请chunk时候可以构造double free
  3. 这时我们在申请一个chunk 大小跟先前的第0个一样,构造double free,并且对mmap处的内存进行写入shellcode
  4. 这时我们同理,在构造一个double free,通过unsorted bin中main_arena+96与__malloc_hook在libc-2.27的相差为0x30,所以在填入这个就是__malloc_hook了,之后把mmap的地址填入malloc_hook的位置,在调用add即可
posted @ 2020-12-07 20:48  PYozo_free  阅读(346)  评论(0编辑  收藏  举报