对 SROP 简单的理解

SROP基本原理和利用 1 概述SROP: Sigreturn Oriented Programming ,系统Signal Dispatch之前会将所有寄存器压入栈,然后调用signal handler,signal handler返回时会将栈的内容还原到寄存器。 如果事先填充栈,然后直接调用signal handler,那在返回的时候就可以控制寄存器的值。2 资源1. Framing Signals—A Return... 阅读详情

“SROP" 也就是”伪造信号返回栈帧来一次性控寄存器“

使用特点:

  1. gadget数量少

  2. 缺少关键 pop 寄存器

  3. 有 syscall ,一般一个SROP会利用两次 syscall ,一次执行 sigreturn 一次执行目标

  4. 能控制栈或某内存

SROP的本质:建立在 Linux 和 signal 机制上

signal(信号):是 Linux / Unix 系统中一种经典的进程间异步通知机制。一个软件异常或正常执行时都可以触发signal ,用相对应的信号名通知进程,告诉进程发生了什么

signal 到来了内核会做什么:1. 暂停当前执行 2. 保存当前寄存器、栈、程序计数器等现场 3. 在用户态栈上布置一份 signal frame 4. 跳到用户注册的 signal handler 5. handler 执行完后,再通过 sigreturn 恢复之前的现场

signal frame(信号帧):是 Linux/Unix 系统中,内核在栈上构建的一个数据结构,用于保存信号处理函数执行前被中断的进程上下文,并为信号处理函数提供返回路径。简单说就是告诉 signal handler 返回时需要恢复成什么状态

sigreturn:是一个系统调用,主要用于 Linux/Unix 系统中从信号处理程序返回时按恢复进程的执行上下文,于普通 ret 很不同。简单讲是从栈上读取 signal frame ,并按 frame 中的内容恢复进程上下文。它的系统调用号是15

从而,在攻击时,我们可以伪造一份假的 signal frame,然后 syscall 执行 sigreturn ,寄存器中的值就是我们想要的,最后执行目标动作

和普通ROP链一样的都要构造 execve("/bin/sh", 0, 0)

先构造虚假 frame

frame.rax = 59
frame.rdi = bin_sh
frame.rsi = 0
frame.rdx = 0
frame.rip = syscall_addr

然后执行 sigreturn

rax = 15
syscall

令 rax = 15 很关键,使 rax = 15 的方法一般有:

  1. 程序直接给,比如一个函数的内容为 "return 15", 汇编指令有:

add rax,15
​
syscall
  1. 有 pop rax ,直接设置即可

  2. 利用 read 的返回值, read 实际的返回值是read读入的字节数,而且返回值就在 rax

SROP 常见用途:

  1. 直接获取 shell

  2. 先读更多数据,再二次利用

  3. 栈迁移

from pwn import *

frame = SigreturnFrame()
frame.rax = 59
frame.rdi = bin_sh
frame.rsi = 0
frame.rdx = 0
frame.rsp = controlled_stack
frame.rip = syscall_addr

payload  = b'A' * offset
payload += p64(set_rax_15_or_make_read_return_15)
payload += p64(syscall_addr)
payload += bytes(frame)

p.sendline(payload)
p.interactive()

如果有错,欢迎指正哦~~

关于对SROP详解 在打NepCTF2023的时候,pwn的第一题就是srop,但是我发现我好像没学hhh,当时比赛的时候恶补了一下,赛后整理一下写一篇文章吧。SROP全称为(Sigreturn Oriented Programming),在ctfwiki中将其归类为了高级ROP,其中,sigreturn是一个系统调用,在类 unix 系统发生 signal 的时候会被间接地调用,其实就是利用了linux中的系统调用号,利用linux下的15号系统调用号调用->rt_sigreturn。 阅读详情

相关推荐

ciscn_s_3--retsyscall与csu的结合及srop_sigreturn的简单使用

在执行sigreturn 之后的restore context阶段,整个frame是在用户态,同时会执行大量的pop指令,这时我们就可以直接设定寄存器的值来伪造一个虚假的frame从而getshell。必须能够知道/bin/sh的地址,如果写的bss段,直接写地址就行,如果写到栈里,还需要想办法去泄露栈地址。这里基础知识就搬运ctfwiki上的了,讲解的我觉得很全面了,我也会进行添加补充讲解,便于理解。因为栈上没有/bin/sh,可以考虑read读入,结合前面有漏洞可以泄露栈上的位置,

zhuo1358的博客 1053

PWN SROP简单利用

SROP的简单使用

2402_89736595的博客 1317

srop学习 rootersctf_2019_srop

rootersctf_2019_srop 前置知识 这里有必要讲一下什么是srop。ctf_wiki的描述 这里我也简单说一下我的理解。就是内核处理信号(软中断)的时候,会将寄存器压栈到用户地址空间(这里有点小疑惑,因为内核切换进程的时候压栈是属于到内核地址空间,这里是用户地址空间)然后切换回来的时候,调用rt_sigreturnpop回来之前保存的寄存器等。那么我们只要拥有这个gardet,就可以控制程序执行流以及次奥用的系统调用的参数。而触发pop这些寄存器的方法就是直接调用这个rt_sigreturn

weixin_46521144的博客 679

新代永久解锁西门子smart S7-200PLC 上传程序步骤

西门子 SMART S7-200 PLC 程序上传步骤 打开编程软件 或左下角依次打开 程序 所有程序 Siemens Automation Simatic STEP 7-MicroWIN SMART V2.4 STEP 7-MicroWIN SMART 技术交流 plcjiesuo1 2. 确认plc电源端以及输入电压; 3.用网线连接plc与电脑技术交流 plcjiesuo1 4.plc通电; 5.打开编程软件,双击通讯 6.按照...

m0_60773720的博客 2万+

同花顺CM函数深度解析:如何精准设置历史换手衰减系数以优化筹码峰

本文深度解析同花顺CM函数中的历史换手衰减系数,揭示其如何影响筹码峰准确性。通过拆解CM函数参数,并提供基于前十大流通股东锁定比例的计算公式,指导用户精准设置该系数,从而优化筹码峰模型,使其更真实反映个股持仓成本分布,提升技术分析的有效性。

mango的博客 1778

Linux SROP 原理与攻击

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

4ct10n 2931

An example: 2D immersed boundary lattice Boltzmann method code--By Timm Krüger.2011.

//谢谢Timm Krüger大佬的代码。 还是老样子,有啥问题Feel free to tell us~毕竟群众力量大嘛~QQ群:293267908。 // 话不多说,上干货! // ISBN 978-3-319-44649-3 (Electronic) // 978-3-319-44647-9 (Print) // http://www.springer.c...

weixin_37783345的博客 1418

srop学习:【rootersctf_2019_srop】

最近学习了一些srop的一些知识,这里通过一道题目来加深一下对srop的运用。 文章目录1.srop的简单介绍2.rootersctf_2019_srop题目例行检查漏洞分析 1.srop的简单介绍 这里推荐大家一篇文章srop SROP全称为Sigreturn Oriented Programming,其攻击核心为通过伪造一个‘Signal Frame’(以下简称sigFrame)在栈上,同时触发sigreturn系统调用,让内核为我们恢复一个sigFrame所描述的进程,如一个shell、一个wrtie

weixin_51055545的博客 6069

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

qq_31444421的博客 2万+

NVIDIA DGX Spark实战:如何在桌面上轻松运行200B参数大模型?

本文详细介绍了如何利用NVIDIA DGX Spark在桌面端轻松运行200B参数大模型。通过实战演示,从系统初始化、模型获取部署到内存管理与性能调优,重点解析了其统一内存架构如何解决本地推理的显存瓶颈,并探讨了进行轻量化微调(如LoRA)的可能性,为AI开发者和研究团队提供了高效的本地化大模型操作方案。

weixin_29054195的博客 882

360chunqiu2017_smallest —— 从例题理解SROP

前言: 本篇博客为个人学习过程中的理解,仅记录个人理解,WIKI写的要比本篇详细得多。若与其存在矛盾,请以WIKI为准,也感谢读者指出问题。 正文: SROP(Sigreturn Oriented Programming),与常规ROP的区别在于通过sigreturn函数来进行返回而不是retn指令 这里引用WIKI中对Signal机制的介绍: Signal 机制¶ Signal 机制是类 unix 系统中进程之间相互传递信息的一...

Tokameine的博客 1746

【DDSCAT——离散偶极近似仿真程序04】参数理解和模型设计

在这一部分,我们开始理解DDSCAT程序设计中的一些参数问题。 承接第二部分内容中的ddscat.par文件,我们来聊一聊偶极子、实际体积、有效半径等关键词。 一、偶极子点阵 手册中说,我们需要设计模型(target/目标),它是有偶极子点阵组成的。偶极子,顾名思义,是由一对电荷组成的,但我们不用设计一对,我们设计一个点就行,...

XD_Yangf的博客 7552

SROP——smallest-pwn(360春秋杯)

缝合了一些我认为比较好的smallest(srop)的wp

eiennoyoshiki的博客 1962

傻白入门芯片设计,SystemVerilog Assertion(SVA)学习(二十一)

对SVA(SystemVerilogt Assertion)有了更深刻的认识,对经典的AveMC形式验证工具进行了介绍

qq_46675545的博客 8470

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

萌新学pwn之SROP

这篇文章主要是讲解对ctf-wiki上面的SROP的例子的理解,题目是360ctf的一个题目 代码很简单 .text:00000000004000B0 public start .text:00000000004000B0 start proc near ; DATA XREF: LOAD:0000000000400018↑o .text:00000000004000B0 xor rax,

qq_36495104的博客 1093

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Sigreturn Oriented Programming (SROP) Attack攻击原理

Sigreturn Oriented Programming (SROP) Attack攻击原理 mctrain 2015-12-01 共264259人围观 ,发现 6 个不明物体 网络安全 本文原创作者:mctrain 去年投了一篇文章,介绍BROP攻击。反响还挺好的,也帮助了很多人去理解这个非常smart的攻击原理。当然大家也可以去我的博客看这个攻击的重现。 这

zsj2102的专栏 2073

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

栈溢出之SROP

高级ROP-SROP: https://www.yuque.com/u239977/cbzkn3/ynq3zc

Sakura给爷pwn全场 271

关于对SROP详解3

在打NepCTF2023的时候,pwn的第一题就是srop,但是我发现我好像没学hhh,当时比赛的时候恶补了一下,赛后整理一下写一篇文章吧。SROP全称为(Sigreturn Oriented Programming),在ctfwiki中将其归类为了高级ROP,其中,sigreturn是一个系统调用,在类 unix 系统发生 signal 的时候会被间接地调用,其实就是利用了linux中的系统调用号,利用linux下的15号系统调用号调用->rt_sigreturn。

woshiyanfu的博客 389

[BUUCTF]ciscn_2019_es_7(SROP)

[BUUCTF]ciscn_2019_es_7

zyxx_wjc的博客 527

pwntools--SROP工具类SigreturnFrame使用详解

SROP--SigreturnFrame概念SigreturnFrame的使用一个例子程序分析漏洞利用wp总结 概念 这里简单介绍下SROP的概念,主要是帮助读者理解和使用pwntools提供的SigreturnFrame工具实现漏洞利用。 我们都知道ROP吧,即利用.text段中的gadgets,这些gadgets都以ret指令作为结尾,以此串联起来实现我们想要的系统调用进而达到获取目标主机shell的目的。那么如何判断是哪种系统调用呢?这里是根据寄存器的值来进行判断的,只要将相应的寄存器值设置为对应参数

lifanxin的博客 2807

SROP利用技术

上个周末的“红帽杯”结束了,战队成绩很不错,排名前几。不过有些题目是临时参考网上的思路解出来的,虽然得了分,但当时不是很理解。比赛完了把当时不太熟悉的题目回顾了一下,作为思路的总结和后续的参考。 本篇是针对pwn4的总结。 知道不知道是一种很让人满足的感觉,自己解出题目后,不由得感叹安全研究人员思路的巧妙。拿到PWN4后,在IDA中看了下: 程序非常简短,运行程序后会等待用户输入...

weixin_33874713的博客 299

关于对SROP详解3232

在打NepCTF2023的时候,pwn的第一题就是srop,但是我发现我好像没学hhh,当时比赛的时候恶补了一下,赛后整理一下写一篇文章吧。SROP全称为(Sigreturn Oriented Programming),在ctfwiki中将其归类为了高级ROP,其中,sigreturn是一个系统调用,在类 unix 系统发生 signal 的时候会被间接地调用,其实就是利用了linux中的系统调用号,利用linux下的15号系统调用号调用->rt_sigreturn。

luoxiayan的博客 433

保姆级调试笔记:手把手复现LilCTF ret2all,图解栈迁移、SROP与Magic Gadget的实战配合

本文详细解析了如何通过栈迁移、SROP(Sigreturn-Oriented Programming)和Magic Gadget技术复现LilCTF ret2all漏洞利用。从环境搭建到漏洞分析,再到多阶段栈迁移和SROP整合,最终实现沙箱绕过和完整利用链构建,为二进制安全爱好者提供了实战指南。

weixin_29011667的博客 160

【学习记录】Week6(二):降维打击——SROP(Sigreturn Oriented Programming)原理与实战

SROP技术利用Linux信号处理机制漏洞,通过伪造SignalFrame实现一次性控制所有寄存器。核心是在栈溢出后触发sigreturn系统调用,使内核恢复攻击者伪造的寄存器状态。相比传统ROP需要多个gadget,SROP只需一个syscall;ret的gadget即可完成复杂攻击链构造,甚至能绕过沙箱限制。实战中需满足栈溢出、sigreturn触发条件、可写栈空间等前提,并注意帧对齐和rax设置等细节。该技术展现了ROP攻击的高级形态,对理解Linux进程机制有重要意义。

2302_80441878的博客 90

PWN——SROP(高级ROP)

Srop 的全称是Sigreturn Oriented ProgrammingSrop 可以理解成一种高级的ROP,利用了linux下15号系统调用的->rt_sigreturn。

Pr0b1em的博客 810
下一篇: pwn 中堆的简单理解
g1ven
博客等级 码龄1年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值