ROP

ROP是一种高级的堆栈溢出攻击。操作系统针对栈溢出漏洞的措施:数据执行保护(data execution prevention)技术,拒绝执行内存中user可写的区域。

ROP允许攻击者在安全防御(不可执行的内存和代码签名)的情况下执行代码。

Return-into-library technique: 在data exectuion prevention的前提下,attacker只可以利用在executable memory中的code,如代码区或者公共链接库中的code. Shared libraries (eg. libc)中通常包含系统调用或其他功能的代码,因此更多被利用。

Borrowed code chunks:

Blind ROP:

待续

时间: 2024-12-25 05:55:40

ROP的相关文章

使用ROP攻击技术

背景 前面介绍了ret2libc和ret2plt,这两个攻击技术的相通点是函数参数是通过压栈来传递,这也是i386架构的调用约定.然而随着64位服务器的普及,以及后来越来越广泛,以致几乎所有服务器都升级到64位的硬件上. x86_64天生具有免 根据X86_64 ABI的调用约定,函数间传递参数不再以压栈的方式,而是以寄存器方式传递参数,前面6个参数依次以rdi, rsi, rdx, rcx, r8和r9寄存来传递. 在Linux系统,64位架构只使用48位的虚拟地址空间,也即每个地址高16位全

一步一步学ROP之linux_x64篇

一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等).上次我们主要讨论了linux_x86的ROP攻击:<一步一步学ROP之linux_x86篇>,在这次的教程中我们会带来上一篇的补充以及linux_x64方面的ROP利用方法,欢迎大家继续学习. 另外文中涉及代码可在我的github下载:https://githu

Linux内核ROP姿势详解(二)

/* 很棒的文章,在freebuf上发现了这篇文章上部分的翻译,但作者貌似弃坑了,顺手把下半部分也翻译了,原文见文尾链接 --by JDchen */ 介绍 在文章第一部分,我们演示了如何找到有用的ROP gadget并为我们的系统(3.13.0-32 kernel –Ubuntu 12.04.5 LTS)建立了一个提权ROP链的模型.我们同时也开发了一个有漏洞的内核驱动来允许实现执行任意代码.在这一部分,我们将会使用这个内核模块来开发一个具有实践意义的ROP链:提权,修复系统,纯净退出到用户空

EasyRMtoMP3Converter.exe stack overflow bypass dep using rop tech

environment &tools os:windows xp sp3 dep:Optout tools:immunity debugger with plugin mona.py usedAPI: SetProcessDEPPolicy MSDN BOOL WINAPI SetProcessDEPPolicy( _In_ DWORD dwFlags 0x00 close dep for this process. ); return value:1 true 0 false POC(exp.

ROP之linux_x64知识杂记

蒸米大神谈ROP:http://www.vuln.cn/6644 0x00  ROP ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等). 0x01 linux_64与linux_86的区别 linux_64与linux_86的区别主要有两点:首先是内存地址的范围由32位变成了64位.但是可以使用的内存地址不能大于0x00007fffffffffff,否则会抛出异常

栈溢出之rop到syscall

当程序开启了nx,但程序有syscall调用的时候.这时栈溢出的利用就可以通过rop来执行syscall的59号调用execve('/bin/sh',null,null),这是这次alictf一道pwn的心得. ida配合gdb定位程序漏洞如下: signed __int64 __fastcall sub_40108E(__int64 a1) { signed __int64 result; // [email protected] __int64 v2; // [email protected

Rop框架学习笔记

1.  提供了开发服务平台的解决方案:比如应用认证.会话管理.安全控制.错误模型.版本管理.超时限制 2.  启动:RopServlet截获http请求 配置: <servlet>      <servlet-name>rop</servlet-name>     <servlet-class>com.rop.RopServlet</servlet-class>     <load-on-startup>1</load-on-s

一步一步学ROP之linux_x86篇

0x00 本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章. 阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈不可执行),ASLR(内存地址随机化),Stack Protector(栈保护),Memory Leak. 0x01 第一个问题:为什么要构造成"A"*140+ret字符串,这个140是怎么来的呢? 要回答这个问题,我们需要把level1.c反汇编,level1.c代码如下: #include <

【转】针对Android上的ROP攻击剖析

引言       ROP(Return-oriented programming),即“返回导向编程技术”.其核心思想是在整个进程空间内现存的函数中寻找适合指令片断(gadget),并通过精心设计返回堆栈把各个gadget拼接起来,从而达到恶意攻击的目的.构造ROP攻击的难点在于,我们需要在整个进程空间中搜索我们需要的gadgets,这需要花费相当长的时间.但一旦完成了“搜索”和“拼接”,这样的攻击是无法抵挡的,因为它用到的都是内存中合法的的代码,普通的杀毒引擎对ROP攻击是无计可施的. 栈溢出