zoukankan      html  css  js  c++  java
  • 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师傅的博客

  • 相关阅读:
    C++多线程chap3 多线程异步和通信1
    C++多线程chap2多线程通信和同步9
    C++多线程chap2多线程通信和同步5
    C++多线程chap3 多线程异步和通信2
    C++多线程chap2多线程通信和同步6
    taro实现多语言切换
    git常用命令
    pytorch hook 钩子
    MySQL 学习笔记(六)character 与 collation
    Python 学习笔记(七)socket
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/14337822.html
Copyright © 2011-2022 走看看