沙箱禁用ORW-BaseCTF
典型的沙箱禁用
1.ida速览
1 | int __fastcall main(int argc, const char **argv, const char **envp) |
- 其实挺明显的,我们只要绕过沙箱的限制即可,下面看看沙箱禁用了什么:
- 禁用ORW
2.思路
- 按照开头题解出题人的思路来的,先用openat打开flag文件,接着用sendfile输出flag
- 对于这两个函数的解释如下(引自gpt)
openat
openat
函数是 Linux 系统调用的一部分,用来打开一个相对于目录文件描述符的文件。在文件系统操作中,openat
提供了一种灵活的方式,允许你在一个指定的目录(而不是当前工作目录)内打开文件。openat
的作用和open
类似,但openat
允许指定一个文件描述符(目录的文件描述符),以便于处理相对路径的文件。
1 | int openat(int dirfd, const char *pathname, int flags, mode_t mode); |
1 | 汇编代码如下: |
sendfile
sendfile
是 Linux 的系统调用,用于在两个文件描述符之间传输数据。它在内核中直接进行文件数据的传输,避免了数据从内核到用户空间的拷贝,从而提高了性能。常用于网络服务器中,将文件内容快速发送到网络套接字
1 | ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); |
1 | mov rax, 40 ; 系统调用号 (sendfile) |
shellcode
- openat
1 | mov rax, 0x67616c662f2e ; flag |
- sendfile
1 | mov rdi,1 ; 目标文件指向stdout,标准输出 |
3.完整EXP
1 | from pwn import * |
- 标题: 沙箱禁用ORW-BaseCTF
- 作者: D0wnBe@t
- 创建于 : 2024-09-18 20:56:08
- 更新于 : 2024-11-14 11:40:20
- 链接: http://downbeat.top/2024/09/18/沙箱禁用ORW-BaseCTF/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论