10.pwn ROP(栈溢出攻击的核心)

随着 NX (Non-eXecutable) 保护的开启,传统的直接向栈或者堆上直接注入代码的方式难以继续发挥效果,由此攻击者们也提出来相应的方法来绕过保护。

目前被广泛使用的攻击手法是 返回导向编程 (Return Oriented Programming),其主要思想是在 栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。

gadgets 通常是以 ret 结尾的指令序列,通过这样的指令序列,我们可以多次劫持程序控制流,从而运行特定的指令序列,以完成攻击的目的。

返回导向编程这一名称的由来是因为其核心在于利用了指令集中的 ret 指令,从而改变了指令流的执行顺序,并通过数条 gadget “执行” 了一个新的程序。

使用 ROP 攻击一般得满足如下条件:

  • 程序漏洞允许我们劫持控制流,并控制后续的返回地址。

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

作为一项基本的攻击手段,ROP 攻击并不局限于栈溢出漏洞,也被广泛应用在堆溢出等各类漏洞的利用当中。

需要注意的是,现代操作系统通常会开启地址随机化保护(ASLR),这意味着 gadgets 在内存中的位置往往是不固定的。但幸运的是其相对于对应段基址的偏移通常是固定的,因此我们在寻找到了合适的 gadgets 之后可以通过其他方式泄漏程序运行环境信息,从而计算出 gadgets 在内存中的真正地址。

很多情况下,程序中我们能够利用的只有栈,也就是说,程序中没有一个可读可写可执行的区域让我们输入shellcode。同时,大多数题目也不会那么好心给你留一个后门函数直接执行system。那么这个时候,我们就要利用ROP

ROP全称Return Oriented Programming,也就是返回导向编程
说人话,就是程序中以一堆ret来完成代码逻辑
由于我们不能运行shellcode,也没有后门函数一步到位。
我们可以利用程序中的一些指令片段,一点点拼接起来,:拼成我们想要的样子,
怎么拼?

拿system(“/bin/sh”);举例
我们要将rdi改成/bin/sh这个字符串的地址,然后call system。
不能执行shellcode,怎么改?
我们有栈!
pop rdi ret + /bin/sh addr

不能shellcode,怎么cali?
我们有ret!
所以,我们构造的payload就是
padding + pop rdi; ret + /bin/sh + system

ROP就是搭积木,用一个个小小的片段来完成复杂的工作,基本只需要用到栈这些小小的积木,我们称之为gadget
怎么找gadget呢?
ropper & ROPgadgets

通用ROP:
在 64 位程序中,!函数的前6个参数是通过寄存器传递的,但是大多数时候,我们很难找到每-个寄存器对应的 gadgets。
这时候,我们可以利用x64下的 libc csu init 中的 gadgets。
这个函数是用来对 libc 进行初始化操作的,而一般的程序都会调用 libc 函数所以这个函数一定会存在。

相关推荐

  1. 10.pwn ROP(溢出攻击核心

    2024-07-10 10:34:04       10 阅读
  2. 防范缓冲区溢出攻击方法

    2024-07-10 10:34:04       6 阅读
  3. 10个SpringMVC核心组件详解

    2024-07-10 10:34:04       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 10:34:04       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 10:34:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 10:34:04       4 阅读
  4. Python语言-面向对象

    2024-07-10 10:34:04       4 阅读

热门阅读

  1. sklearn基础教程

    2024-07-10 10:34:04       11 阅读
  2. 跨境支付新篇章:引领电商潮流

    2024-07-10 10:34:04       9 阅读
  3. CSS学习

    2024-07-10 10:34:04       7 阅读
  4. Unity 常用取整方法

    2024-07-10 10:34:04       10 阅读
  5. 华为机考真题 -- 攀登者1

    2024-07-10 10:34:04       11 阅读
  6. Linux内核 -- 内存管理之scatterlist结构使用

    2024-07-10 10:34:04       12 阅读
  7. 【国产开源可视化引擎Meta2d.js】数据

    2024-07-10 10:34:04       10 阅读
  8. Elasticsearch 面试题指南

    2024-07-10 10:34:04       6 阅读
  9. Linux笔记之iftop查看特定IP地址吞吐量

    2024-07-10 10:34:04       6 阅读
  10. 量化交易在不同经济周期中的表现

    2024-07-10 10:34:04       10 阅读