0%

初探sandbox(C沙盒逃逸)

何为沙箱

沙箱即限制程序只能调用指定函数来保证程序的安全性

何为orw

orw即open,read,write函数的缩写,一般情况下程序会限制只能调用这三个函数的其中几种

那么由于程序只允许我们调用这三个函数,那么我们无法通过系统调用execve来getshell,只能通过orw这三个函数来获取关键信息(即flag)

如何判断

可以通过seccomp-tools来判断是否开启沙箱

seccomp-tools dump ./pwn

0

如何绕过

shellcode绕过

原理

通过向栈上注入orw的代码让程序执行(需要关闭nx保护)

例如:

1
2
3
4
5
6
7
8
#fd = open('/home/orw/flag',0) 
s = ''' xor edx,edx; mov ecx,0; mov ebx,0x804a094; mov eax,5; int 0x80; '''

#read(fd,0x804a094,0x20)
s = ''' mov edx,0x40; mov ecx,ebx; mov ebx,eax; mov eax,3; int 0x80; '''

#write(1,0x804a094,0x20)
s = ''' mov edx,0x40; mov ebx,1; mov eax,4 int 0x80; '''

ROP绕过

适用于开启了nx保护的情况

原理

通过栈迁移等方法向.bss段写入代码然后构造ROP链到bss段执行相关代码

参考文章