今天开始以学习了花式的栈溢出ROP攻击,BROP这个东西朴实无华且用处不大,思想能了解,但是现在谁打个pwn还不给elf呢,不给libc文件都会被喷死,还敢不给elf?因此跳过这个学习一下SROP。

SROP主要攻击方式就是针对linux系统调用的一个弱点进行攻击的,在进行系统调用的时候,内核会发出signal挂起我们正在运行的程序,并且保存上下文(上下文即所有寄存器的值),然后这个上下文还是以一个结构体的形式存在于栈里面的。此时从用户态切换到内核态,说明现在在执行系统调用,执行完成系统调用的时候会进行系统调用的返回,这个返回又要调用15号的系统调用,恢复上下文并且切换到用户态。这样子系统调用的方法有一个弱点就是,如果我控制了栈,在它挂起的时候我偷偷修改rip=syscall,rax=59(execeve的系统调用号),rdi=”/bin/sh”,rsi=0,rdx=0。那么在结束系统调用的时候就会执行execeve(“/bin/sh”)打开一个shell。

在就是说在结束系统调用的时候会进行这么一个系统调用,那么如果我本身没有系统调用而调用了这个系统调用会怎么样呢?答案是还会把栈顶的上下文给返回,当然没有精心构造过栈而直接调用肯定是会出错的。攻击的时候我就让它准备好dl_sigreturn的系统调用,然后在预期的栈顶构造一个只执行execeve(“/bin/sh”)的上下文,那么就可以直接完成打开shell的攻击。

以上都是我根据srop以及一些师傅的资料自己理解的,如有错误那挺正常的,也请师傅们能指出我的错误,感激不尽。