ROP进阶之高级ROP

1. JOP

JOP全称为Jump-Oriented Programming,即跳转导向编程,攻击手法与ROP类似,它彻底摆脱了对ret指令的依赖,而是利用间接跳转指令(jmp)或间接调用指令(call)来控制执行流。这些指令不涉及返回地址的压栈和出栈,因此能够绕过影子栈的检测。

JOP的利用流程:

  • 1、控制初始寄存器:通过栈溢出或其他漏洞,控制关键寄存器(如指向调度表的rax和指向调度器的rsi);
  • 2、触发调度:通过一个初始跳转进入调度器;
  • 3、循环执行:调度器根据rax找到下一个功能gadget并跳转,执行完后跳转回调度器,调度器增加rax指向下一项,循环往复;

2. COP

COP全称为Call Oriented Programming,即调用导向编程,栈溢出通常是由于程序逻辑设计缺陷,导致函数调用层级过深,最终耗尽系统为线程分配的栈空间。

3. BROP

BROP全称为Blind Return Oriented Programming,即盲注返回导向编程,它是一种高级的二进制攻击技术,攻击者可以在完全没有目标程序源代码或二进制文件的情况下,远程对服务器发起ROP攻击。

传统的ROP攻击需要分析二进制文件以寻找gadgets,而BROP则是通过“盲注”的方式根据服务器在崩溃后的不同表现推断内存布局。

BROP的攻击条件

  • 1、程序必须存在栈溢出漏洞,允许攻击者控制返回地址;
  • 2、服务器自动重启:服务器在崩溃后会自动重启且重启后地址空间不重新随机化(地址与重启前一样,nginx、apache等服务器都是这种特性);

BROP攻击的三个阶段:

  • 1、探测栈溢出长度与Canary:通过逐字节尝试,观察服务是否崩溃来“dump”出正确的Stack Canary,即暴力枚举;
  • 2、数据泄露:获取栈上的数据来泄露Canary,以及 ebp 和返回地址;
  • 3、寻找Stop Gadget:寻找一段不会导致程序崩溃的代码地址,作为信号点来验证其他gadgets是否被成功执行;
  • 4、寻找BROP gadget并泄露内存:寻找能够控制寄存器(如pop rdi;ret)的gadgets,最终通过调用系统调用(如write)将目标服务器的二进制数据通过网络传回给攻击者,从而转为标准的ROP攻击;

4. SROP

SROP (Sigreturn Oriented Programming) 是一种利用Linux中信号处理机制(Signal Handling)的高级二进制漏洞利用技术。

SROP的主要原理

  • 1、在Linux系统中,当一个进程被信号中断(如按下 Ctrl+C)时,内核会暂时挂起进程,并将当前的CPU寄存器上下文(Context)压入用户栈中。这个存储在栈上的结构被称为Signal Frame;
  • 2、当信号处理函数运行结束时,程序会调用sigreturn系统调用。此时,内核会从栈上弹出之前保存的Signal Frame,并根据其中的值恢复所有寄存器(包括栈指针RSP和指令指针RIP);
  • 3、攻击者通过栈溢出漏洞,在栈上伪造一个完全受控的Signal Frame,然后触发sigreturn系统调用;
  • 4、内核在执行该调用时,会不加验证地将伪造的Frame弹出到寄存器中,从而让攻击者能够一次性控制所有的CPU寄存器,直接跳转到任意系统调用,比如execve(“/bin/sh”);

5. DOP

DOP全称为Data-Oriented Programming,即数据导向编程,它是一种不通过劫持程序控制流(如修改返回地址或函数指针),而是通过篡改栈上的非控制数据(Non-control Data)来达到攻击目的的技术。

传统的栈溢出攻击目标通常是返回地址,试图让程序跳转到恶意代码(shellcode)或ROP链。而DOP栈溢出的目标是修改栈上的普通变量,比如权限标志位is_admin、循环计数器、关键指针等。

6. Stack Pivoting

Stack Pivoting也称为栈劫持/栈回旋,主要原理是改变栈指针寄存器的指向攻击者所控制的内存处。

在漏洞利用中,攻击者遇到以下限制可以使用Stack Pivoting技术:

  • 1、栈空间不足:栈溢出的字节太少,无法容纳较长的ROP链;
  • 2、开启了ASLR或PIE保护:真实的栈地址难以预测,将栈劫持到已知的区域;

7. Frame Faking

Frame Faking技术就是构造一个虚假的栈帧来控制程序的执行流,它是一种与Stack Pivoting(栈劫持)紧密相关的二进制漏洞利用技巧。核心原理是通过控制程序中的栈基址指针寄存器(如x86的EBP或x64的RBP),在内存中虚构出一个合法的函数调用上下文(栈帧),从而诱导程序执行攻击者预设的代码序列。

免责声明:

1. 一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。

2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。

3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
觉得有帮助可以赞赏本文哦~万分感谢!
文章:ROP进阶之高级ROP
作者:沛旗
链接:https://www.peiqiblog.com/article/7370/
版权声明::本博客站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0协议
转载请注明文章地址及作者哦~
暂无评论

发送评论(禁止发表一切违反法律法规的敏感言论) 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇