首页 > 其他分享 >基本ROP

基本ROP

时间:2024-12-10 15:01:17浏览次数:7  
标签:基本 代码 控制程序 gadgets ROP 执行 shellcode

基本ROP

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

之所以称之为 ROP,是因为核心在于利用了指令集中的 ret 指令,改变了指令流的执行顺序。ROP 攻击一般得满足如下条件

程序存在溢出,并且可以控制返回地址。

可以找到满足条件的 gadgets 以及相应 gadgets 的地址。

如果 gadgets 每次的地址是不固定的,那我们就需要想办法动态获取对应的地址了。

ret2text

原理

ret2text 即控制程序执行程序本身已有的的代码 (.text)。其实,这种攻击方法是一种笼统的描述。我们控制执行程序已有的代码的时候也可以控制程序执行好几段不相邻的程序已有的代码 (也就是 gadgets),这就是我们所要说的 ROP。

这时,我们需要知道对应返回的代码的位置。当然程序也可能会开启某些保护,我们需要想办法去绕过这些保护。

ret2shellcode

原理

ret2shellcode,即控制程序执行 shellcode 代码。shellcode 指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的 shell。一般来说,shellcode 需要我们自己填充。这其实是另外一种典型的利用方法,即此时我们需要自己去填充一些可执行的代码。

在栈溢出的基础上,要想执行 shellcode,需要对应的 binary 在运行时,shellcode 所在的区域具有可执行权限。

ret2syscall

原理

ret2syscall,即控制程序执行系统调用,获取 shell。

ret2libc

原理

ret2libc 即控制函数的执行 libc 中的函数,通常是返回至某个函数的 plt 处或者函数的具体位置 (即函数对应的 got 表项的内容)。一般情况下,我们会选择执行 system(“/bin/sh”),故而此时我们需要知道 system 函数的地址。

标签:基本,代码,控制程序,gadgets,ROP,执行,shellcode
From: https://blog.csdn.net/weixin_51701860/article/details/144373617

相关文章

  • 渗透利器-kali工具 (第四章-1) Python环境安装与基本语法
    学习python环境安装和基础语法[变量、函数]为什么要学习Python?提高工作效率,payload、exp、爬虫、fuzz等。1,安装python环境和编码工具:1.python2还是python3:很多都会纠结应该选择python2,还是python3版本的问题。我觉的世界的变化的速度在变得更快,语......
  • 颜色的基本处理
        数码相机能够获取彩色图像,但相机的色彩处理是一个非常复杂的过程,是非常重要的。    此过程生产制造商在细节方面都是不公布的,但是基本的概念是相同的。当相机捕捉一个真实场景时,是怎么还原成人眼所看到的图像呢?1.RAW----相机获取到的原始图像    ......
  • java基础Day2 基本的Dos命令
    基本的Dos命令打开CMD的方式开始+系统+命令提示符windows+r+cmdshift+鼠标右键,打开powershell资源管理器的地址栏前面加上cmd路径管理员身份运行:选择以管理员方式运行cmd窗口中右键可以直接粘贴常用的Dos命令盘符切换:C:\Users\xyt>D:查看当前目录下的所有文件:C:\U......
  • 鸿蒙 Next 中 Prop 的用法详解
    一、@Prop概述在鸿蒙Next中,@Prop装饰器用于在父子组件之间建立单向的数据同步关系。这意味着数据从父组件流向子组件,子组件对@Prop装饰变量的修改不会同步回父组件。从APIversion9开始,该装饰器支持在ArkTS卡片中使用,从APIversion11开始,支持在元服务中使用。(一)同步机制父组......
  • STM32单片机芯片与内部12 TIM-基本定时器TIM67 -定时计数功能、库函数配置、HAL库配置
    目录一、功能二、库函数工程模板1、NVIC_InitTypeDef与TIM_TimeBaseInitTypeDef2、时钟使能3、初始化4、清除中断5、开启/关闭中断6、使能/失能计数器三、库函数API1、初始化的封装2、中断服务函数四、HAL库工程模板1、TIM_HandleTypeDef2、TIM_MasterConfigType......
  • C++链表的创建与基本操作
    在C++中,链表是一种动态数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表具有灵活的内存管理和高校的插入与删除操作,但访问效率较低。链表的每个节点通常包含两部分:1、数据部分(存储链表中元素的数据);2、指针部分(指向链表中的下一个节点)。链表类型主......
  • 初学linux第一天,关于虚拟机的一些基本设置
    入门常用命令注意:所有的目录后面都要加/创建文件touchtest.txt编辑文件注意:如果文件不存在,则会自动创建文件并编辑#系统自带vitest.txt#vim命令需要自己下载vimtest.txt#打开文件之后,按一下i键,左下角变为INSERT时,才可以写入文件删除文件#第一......
  • 数据库的基本操作
    title:数据库的基本操作date:2024/12/9updated:2024/12/9author:cmdragonexcerpt:数据库的基本操作是使用数据库管理系统(DBMS)执行数据存储和检索的核心行为。通过对数据库的创建、删除、查询、更新和删除等基本操作,用户能有效地管理和利用数据资源。本节将详细介绍这......
  • Python语言基础(四):运算符、基本输入和输出
    前言:在Python的编程世界中,运算符以及基本输入和输出是构建程序的重要组成部分。熟练掌握它们,能让你更自如地编写各类Python程序。本章,我们将深入对其进行探讨,助力你的Python学习进程。在本章中,我们将逐步揭开以下主题的神秘面纱:运算符:学习Python中的算术、比较、逻辑等运算符,......
  • linux 通过 df 、du 查看磁盘大小命令的基本使用
    1.df的介绍和使用df以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。例如,我们使用df-h命令来查看磁盘信息,-h选项为根据大小适当显示:在这里插入图片描述1.1显示内容参数说明Filesystem:文件系统Size:分区大小Used:已使用容量......