Linux SROP 原理与攻击

本文详细介绍了Linux系统的Sigreturn Oriented Programming(SROP)原理,包括信号处理机制、sigreturn系统调用的关键作用。文章还探讨了如何利用SROP进行攻击,包括攻击流程、构造frame结构和执行sigreturn,并通过具体的CTF题目解析了SROP的利用方法。
摘要由CSDN通过智能技术生成

理解并掌握基本的SROP理论以及其攻击方法,这里主要结合freebuf的文章http://www.freebuf.com/articles/network/87447.html,以及i春秋360杯和2017广东省红帽杯的题目路整理一下思路。

0x01 原理

SROP的全称是Sigreturn Oriented Programming。在这里sigreturn是一个系统调用,它在unix系统发生signal的时候会被间接地调用。

Signal这套机制在1970年代就被提出来并整合进了UNIX内核中,它在现在的操作系统中被使用的非常广泛,比如内核要杀死一个进程(kill -9 $PID),再比如为进程设置定时器,或者通知进程一些异常事件等等。

当内核向某个进程发起(deliver)一个signal,该进程会被暂时挂起(suspend),进入内核(1),然后内核为该进程保存相应的上下文,跳转到之前注册好的signal handler中处理相应signal(2),当signal handler返回之后(3),内核为该进程恢复之前保存的上下文,最后恢复进程的执行(4)。

这里写图片描述

在这里我们主要理解sigreturn的意义是,去执行一段pop函数将堆栈中的值全部pop到寄存器中,相当于一个恢复现场的作用(攻击的时候主要运用的这一点)。

在这四步过程中,第三步是关键,即如何使得用户态的signal handler执行完成之后能够顺利返回内核态。在类UNIX的各种不同的系统中,这个过程有些许的区别,但是大致过程是一样的。这里以Linux为例:
在第二步的时候,内核会帮用户进程将其上下文保存在该进程的栈上,然后在栈顶填上一个地址rt_sigreturn,这个地址指向一段代码,在这段代码中会调用sigreturn系统调用。因此,当signal handler执行完之后,栈指针(stack pointer)就指向rt_sigreturn,所以,signal handler函数的最后一条ret指令会使得执行流跳转到这段sigreturn代码,被动地进行sigreturn系统调用。下图显示了栈上保存的用户进程上下文、signal相关信息,以及rt_sigreturn
这里写图片描述
我们将这段内存称为一个Signal Frame

0x02 攻击

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值