SROP技术CTF案例

0x00 相关资料

原始paper
Sigreturn Oriented Programming (SROP) Attack攻击原理
linux系统调用表(system call table)

挺有意思的技术,我就记录一下了。

0x01 smallest题目案例

真有意思的pwn题目,让我重新学习了一下pwn。
objdump二进制文件,只有几行汇编代码:

首先学习下syscall这个指令,它是根据rax寄存器的值来查询系统调用表,并执行对应函数。
可以理解为这样:

对应的main函数功能就是:syscall(0,0,$rsp,0x400),相当于调用了read函数read(0,$rsp,0x400)

  • 产生了栈溢出漏洞。

  • gdb调试下,可以发现:读取的字符串个数会赋值到rax寄存器中。写入第一个值就是返回地址。

SROP利用到了linux下的15号系统调用sigreturn,它能从栈上读取数据,赋值到寄存器中。具体可以参考资料2。
因此,可以利用这个系统调用,构造syscall(59,"/bin/sh",0,0)启动一个shell。59号系统调用是execve

思路大概就是:

细节还是有挺多要注意的,看exploit: