JOP代码复用攻击

本文详述了Jump-oriented Programming(JOP)攻击的原理与实现步骤,通过利用程序中的间接跳转和调用指令改变控制流,攻击者能够构建攻击链实施JOP攻击。实验展示了如何通过动态调试、静态分析找到gadget,利用缓冲区溢出漏洞,篡改寄存器内容,最终执行特定系统调用,如开启新的命令行窗口。实验旨在帮助读者掌握JOP攻击原理,熟悉程序调试工具使用,并能够设计与实现JOP攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验名称:JOP代码复用攻击的实现

实验原理:

JOP 的全称为 Jump-oriented programming(跳转导向编程),攻击与ROP 攻击类似。它同样利用二进制可执行文件中已有的代码片段来进行攻击。ROP 使用的是 ret指令来改变程序的控制流,而 JOP 攻击利用的是程序间接接跳转和间接调用指令(间接 call 指令)来改变程序的控制流。当程序在执行间接跳转或者是间接调用指令时,程序将从指定寄存器中获得其跳转的目的地址,由于这些跳转目的地址被保存在寄存器中,而攻击者又能通过修改栈中的内容来修改寄存器内容,这使得程序中间接跳转和间接调用的目的地址能被攻击者

篡改。当攻击者篡改这些寄存器当中的内容时,攻击者就能够使程序跳转到攻击者所构建的 gadget 地址处,进而实施 JOP 攻击。一个典型的 JOP gadget 的形式如下:

指令

指令

间接跳转指令

1 是一个 JOP 攻击的实例。在该实例中,攻击者的目的是执行系统调用“int 0x80”来开启一个新的命令行窗口。为了达到此目的,攻击者需要在“int 0x80”被调用之前,将 eax 寄存器的内容修改为“0x0000000b”,将 ebx 寄存器的内容需要修改成字符串“/bin/sh”,同时,ecx 和 edx 寄存器必须指向数值“0x00000000”。假设在程序运行的时候,数值“0x0000000”和字符串“/bin/sh”都能够在内存当中找到。攻击者需要自行构造数值“0x0000000b”。但是对于数值“0x0000000b”而言,当攻击者通过缓冲区溢出的方式将数据保存到栈中时,“0x00”字节将会触发系统终止读取操作。该实例具体描述了攻击者如何利用程序中已有的代码片段,将攻击者压入栈中 val 的值从“0xffffff0b”一步步修改成系统调用所需要的数值“0x0000000b”,从而实施 JOP 攻击。下述操作为该过程的详细步骤。


第一步:攻击者通过对程序的动态调试和静态分析,计算出图中 gadget 1、gadget 2和系统调用“int 0x80”的地址。之后,利用程序的缓冲区溢出漏洞向栈中填充设计好的各个寄存器中的数值。

第二步:程序执行 gadget 1,“popa”指令将对栈空间进行初始化。该指令使得栈中的数据出栈并将其分别保存进除 esp 寄存器之外的其他通用寄存器中。“cmc”指令对栈不产生任何有意义的操作。此时,ebp 寄存器中保存了用于计算gadget 2起始地址的数据。当指令“jmp [ebp+0x62]”被执行时,程序跳转到gadget 2。

第三步:程序执行 gadget 2。bl 寄存器存储有数据“0x01”,与此同时,[esi+edi*4-0xD]指向了数值“0xff”。“add [esi + edi*4-0xD], bl”指令将[esi+edi*4-0xD]所指向的地址处的数值修改为“0x00”,该操作组成了 val 的第一个字节的内容。寄存器 bl,esi,edi和 eax通过第二步进行了初始化,其中 eax保存由 gadget 1 的起始地址,程序执行“jmp eax”指令后,程序跳转到 dadget 1 处。

第四步:程序执行 gadget 1。该 gadget中的指令使得栈中的数据依次出栈并且将其保存在处 esp 寄存器之外的其他通用寄存器后,程序跳转到 gadget 2。

第五步:程序执行 gadget 2。bl寄存器存储了数据“0x01”,同时,[esi+edi*4 -0xD]所指向的数据的值为“0xff”。指令“add [esi+edi*4-0xD], bl”使得 bl 寄存器中的数值加上[esi+edi*4 -0xD]所指向的数据的数值,通过这一步,攻击者可以在bl 寄存器中构造出 val 的第二

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值