SROP


Srop

Srop 的全称是Sigreturn Oriented Programming

Srop 可以理解成一种高级的ROP,利用了linux下15号系统调用的->rt_sigreturn

Signal

Signal是Unix系统中的一种通信机制,通常用于在进程之间传递信息,也可以说是软中断信息

常见于在一个进程中,内核向其发送发送软中断信号,该进程将暂时被挂起,系统进入内核态

因为是暂时被挂起,所以系统会保留该进程的上下文 (部分内容摘自ctf-wiki)

将所有的寄存器压入栈中,以及signal信息和指向sigreturn的系统调用地址在栈顶上放置rt_sigreturn

此时栈上的内存分布:

这一段内存也被称为Signal Frame

漏洞利用点

Signal Frame 被放置在用户进程的内存空间中,也就说Signal Frame是可以读写的

在恢复Signal信号的时候没有检测,也就是说我们可以通过改变Signal Frame中的信息来劫持控制流

例如:
1 | rax = 59//对应59号系统调用-> exceve
2 | rdi = ‘/bin/sh’
3 | rsi = 0
4 | rdx = 0

这样就能进行一个最简单的Srop

Srop链

有时候我们希望执行一系列的操作,此时可以通过syscall ret;这个gadget去串联起我们我们的Srop链

执行完一个SignalFrame接着执行下一个SignalFrame。


文章作者: Pr0b1em
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Pr0b1em !
  目录