SeccompOrw 读写权限漏洞利用
参考资料:
https://blog.csdn.net/weixin_59166557/article/details/143275417
https://www.codeleading.com/article/29984574279/
在开始 orw 概述之前,先强调,使用 orw 的时候必须是未开启 NX 的条件下
对于 ORW 的简述:
ORW(Open,Read,Write)是一种常见的利用技术,通常用于在攻破某个系统后读取文件,例如读出 flag 文件的系统操作。该技术主要通过以下三个系统调用来实现:
- open:打开文件 sys_open(const char __user *filename, int flags, int mode)
- read:读取文件内容 sys_read(unsigned int fd, char __user * buf, size_t count)
- write:将读取到的内容写入到标准输出 sys_write(unsigned int, fd, const char __user *, buf, size_t, count))
| 系统调用号%eax | Name | %ebx | %ecx | %edx |
|---|---|---|---|---|
| 3 | sys_read | unsigned int | char * | size_t |
| 4 | sys_write | unsigned int | const char * | size_t |
| 5 | sys_open | const char * | int | int |
对于 orw 防御,实现他的主要是 ****orw_seccomp函数:
seccomp 是 secure computing 的缩写,其是 Linux kernel 从2.6.23版本引入的一种简洁的 sandboxing 机制。在 Linux 系统里,大量的系统调用(system call)直接暴露给用户态程序。但是,并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。seccomp安全机制能使一个进程进入到一种“安全”运行模式,该模式下的进程只能调用4种系统调用(system call),即 read(), write(), exit() 和 sigreturn(),否则进程便会被终止。
在orw_seccomp函数中执行了两次prctl函数:
- 第一次调用prctl函数 ————禁止提权
- 第二次调用prctl函数 ————限制能执行的系统调用只有open,write,exit
意思就是说我们不能使用特殊的系统调用实现 getshell,但可以使用 open,read,write 三个系统调用得到 flag。
这里依旧做一个提醒:该方式并不可以进入交互模式,但是可以读取当前用户的某个文件,也就是说打本地要保证本地有 flag 这个文件才可以尝试获取 flag。
Seccomp-tools 查看可用系统调用:
讲述 orw 运用方法之前,还需要先了解一下 Seccomp-tools : Seccomp-tools是一款用于分析、调试 seccomp (Secure Computing) 沙箱的工具,在 pwn 题中非常常用,能帮助查看进程的系统调用过滤规则、追踪系统调用等。
1 | sudo apt install -y ruby ruby-dev gcc make |

安装完毕之后我们就可以利用 Seccomp-tools 查看系统调用:K 就是系统调用号
1 | seccomp-tools dump ./文件名 |

如何实现 ORW 利用系统调用获取信息?
我们利用一串 C 伪代码来简单解释 orw 技术的工作原理:
1 |
|
攻击者会通过找到程序中的漏洞,注入或执行类似于上述步骤的代码,从而读取到目标文件。
假设在某道 pwn 题目当中,控制了程序的执行流程,可以执行任意代码,就可以注入汇编实现 ORW:
关键函数的系统调用在于:
- open(“/path/to/flag”, O_RDONLY)
- read(fd, buffer, 1024)
- write(1, buffer, 1024)
1 | section .data |
把所需要的汇编代码填充在执行流程当中就可以获取到自己需要的信息,比如 flag。
我们可以通过一道例题去更清晰地了解 pwnorw 的思路:
更新: 2026-04-05 13:10:31
原文: https://www.yuque.com/idcm/wnemg9/mzt1yseq9cg642fg