CTFShow_DJDLB_pwn复现

big_family

看了别人很久的wp,有两种方:一种是fsop、另一种是直接将top chunk给分配到malloc_hook上

top chunk给分配到malloc_hook思路

  1. 首先分配若干个fast bin,在释放,由于堆的机制,当申请了一个属于small bin大小时,就会造成fastbin的合并
  2. 合并后就已经可以leak libc了,在由于释放的许多fasbin合并后,合并后的unsorted bin会修改物理临近的chunk的presize,所以此时可以再一次造成合并,达到overlap
  3. overlap后,我们可以控制fd指针,所以我们可以把chunk分配到main_arena的地方,从而修改top chunk位置位__malloc_hook附近,在写入one_gadgets即可

orange fsop

easy_note

看了wp后,感觉这道题很简单,当时比赛时,看到这道题感觉逻辑很复杂,所以没看就关了,然后赛后重新看了一遍,发现题目挺简单的,先简单说一下程序流程

  1. 程序首先会通过mmap函数申请一个很大的空间,并且开启了一个线程进行检查,其中mmap的第一个参数为0,所以申请的位置在libc附近
  2. 进入主要函数后,有add函数、edit函数、show函数
  3. add函数就是申请了一个0x30chunk大小后,然后在将缓冲区复制到mmap里,同时还有chunk的一些信息也存储在这,其中有一个随机函数,并在新线程中不断检查
  4. edit函数有很明显的堆溢出漏洞
  5. show函数由于size大小在随机函数前,所以我们可以直接通过修改size大小来达到泄露随机数、libc

思路

  1. 首先修改size泄露random和libc
  2. 在通过edit来劫持free_hook为onegadget即可

virtual

easyrop

一直对rop只是一个简单的概念,所以这道题不会写,但看了别的师傅wp后,发现有两种方法:

  1. srop
  2. rop

srop

  1. 有syscall ret,所以可以用返回值覆盖,然后构造srop来getshell即可,/bin/sh可以写在全局变量buf中

rop

这个还没搞明白....

以上参考的wp与思路都是doudoudedi师傅L0ne1y师傅的博客

原文地址:https://www.cnblogs.com/pppyyyzzz/p/14337822.html