simple_shellcode

MEMORY[0xCAFE0000]: 这部分表示程序正在访问内存地址0xCAFE0000处的内容。(): 在 C/C++ 等编程语言中,圆括号()通常表示函数调用。
合起来,这句话的意思就是:将内存地址 0xCAFE0000 中的内容视为一个函数(或一段可执行代码),并立即执行它。

该沙箱主要通过 seccomp 过滤器禁用了与执行新程序和提升权限相关的系统调用,特别是 execve 和 execveat
在main函数可以看到只能输入0x10个字符,这个长度无法构建shellcode
所以调用一个长度足够的read函数读入(12个字节)
read的三个参数。rdi是文件描述符,rsi是写入位置,rdx是写入长度
rdx执行read的时候是0x10

但是当他运行到调用buf的时候,rdx的数值是buf的地址

1 | xor rdi, rdi:1 字节 (\x48\x31\xff) |
然后就可以对flag文件进行操作
脚本
1 | from pwn import * |