BUUCTF [V&N2020 公开赛]babybabypwn

在这里插入图片描述
先看一下,,所有保护机制都开启了

在这里插入图片描述
进入main的第二个函数,里面是这一堆东西
查了一下这个是沙盒机制,seccomp ,,这个seccomp_rule_add函数是给这个沙盒添加规则,意思是这个函数不能调用
这个函数的第三个参数,是代表函数的number,,别的不太清楚,网上也没有查到。。但是 59号代表的是execve函数
所以这个函数不能被调用,,也就是说无法得到系统权限了(吧)
所以这样的话我们就只能执行shellcode 或者 通过open,read,write等函数想办法泄露出flag文件中的内容
(有兴趣的可以看一下pwnable.kr的asm,,里面也是禁用了系统调用,,通过编写shellcode用open,read,write三个函数泄露flag)

在这里插入图片描述
这是main函数里的第三个函数,
可以看到一开始打印出来了puts的真实地址,之后对buf进行输入,再之后 syscall(15,&buf)
syscall也是一个系统调用函数,第一个参数可以是很多数,效果不一样
但是第一个参数是15的时候代表调用的是sigreturn
在这里插入图片描述
在这里插入图片描述
首先看一下这两个图,这是进程在调用signal的时候的过程,调用signal类似于一个中断吧。。(我这么理解)
需要先把进程挂起,把进程当前的各个寄存器以及相关参数入栈,等到执行完signal的时候要考虑通过栈恢复当前的状态,
这时候就调用了syscall(15)也就是sigreturn函数,作用就是每个寄存器或者参数依次出栈,逐步恢复进程状态。。


但是这道题我们可以看到,没有调用signal,,直接就调用了syscall(15)也就是sigreturn函数,我们之前输入的buf被当作各种寄存器参数依次出栈
这个buf充当的角色叫做 Signal Frame ,在内存中的布局是这样的
在这里插入图片描述
这是 x64 下的布局,,第一个是sigreturn函数地址,,这个函数用于恢复进程状态,后面的参数一一对应出栈

在这里插入图片描述
x86 下的我没有找到图,但是有文字,各个寄存器储存的顺序,,因为x86下不用寄存器传参,所以SROP这种方法可能不好用吧。。

那么有了这些知识,我们就知道,通过输入buf,可以构造signal frame ,然后按我们的意愿构造进程状态,
而此时我们有puts函数的地址,可以知道libc里面的所有函数
我通过puts的地址查了一下libc࿰

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值