高级栈溢出技术—ROP实战(简介及ret2win)

本文介绍了返回导向编程(ROP)技术,详细阐述了其原理和在绕过现代操作系统防御中的作用。通过一个名为ret2win的rop实战题目,讲解了实验目的、环境设置和步骤,涉及的知识点包括radare2、汇编、gdb、ROPGadget和pwntools的使用。实验中,通过寻找和组合gadget,实现了栈溢出后的系统调用,以开启栈的可执行权限并执行shellcode。
摘要由CSDN通过智能技术生成

预备知识

关于ROP

ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等)。
ROP是一种攻击技术,其中攻击者使用堆栈的控制来在现有程序代码中的子程序中的返回指令之前,立即间接地执行精心挑选的指令或机器指令组。

本系列rop实战题目的背景

来自ROPEmporium,旨在通过解决一系列挑战来一步步进阶学习ROP利用技术。

ret2win涉及知识点

1)radare2使用(相关专栏:radare2实战)。
2)汇编程序(阅读、分析,要求熟悉相关指令、寄存器等)。
3)gdb使用。
4)ROPGadget使用。
5)pwntools使用(相关实验:基于pwntools编写pwn代码)。

实验目的

通过该实验学习ROP概念及其思路,了解高级栈溢出时需要注意的事项,并掌握解决方法,同时通过练习给出的关卡来增强实践能力。

实验环境

服务器:kali,IP地址:随机分配
题目文件与源码请在实验机内下载使用:http://tools.hetianlab.com/tools/ROP/1.zip

实验步骤一

ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等)。
ROP是一种攻击技术,其中攻击者使用堆栈的控制来在现有程序代码中的子程序中的返回指令之前,立即间接地执行精心挑选的指令或机器指令组。
因为所有执行的指令来自原始程序内的可执行存储器区域,所以这避免了直接代码注入的麻烦,并绕过了用来阻止来自用户控制的存储器的指令的执行的大多数安全措施。
因此,ROP技术是可以用来绕过现有的程序内部内存的保护机制的。
ROP要完成的任务包括要完成的任务包括:在内存中确定某段指令的地址,并用其覆盖返回地址。有时目标函数在内存内无法找到,有时目标操作并没有特定的函数可以完美适配,此时就需要在内存中寻找多个指令片段,拼凑出一系列操作来达成目的。假如要执行某段指令(我们将其称为“gadget”,意为小工具),溢出数据应该以下面的方式构造:

payload : padding + address of gadget

在这里插入图片描述
上图是包括单个gadget的溢出。
如果想连续执行若干段指令,就需要每个gadget执行完毕可以将控制权交给下一个gadget。所以gadget的最后一步应该是RET指令&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值