此学习笔记主要基于CTF WIKI 中的Basic rop部分。附攻防世界cgpwn2的WP
网址为:https://wiki.x10sec.org/pwn/linux/stackoverflow/basic-rop/
--------------------------------------------------------------------
首先翻译了一下文章的开头,内容为:
打开NX保护后,很难继续直接将代码注入堆栈或堆中。攻击者也提出了相应的绕过保护的方法。目前最主要的是面向返回的程序设计。主要思想是基于堆栈缓冲区溢出使用程序中现有的小片段。)改变某些寄存器或变量的值以控制程序的执行流。所谓gadgets就是以ret结尾的指令序列,通过这些指令序列,我们可以修改某些地址的内容,以方便控制程序的执行过程。
之所以称之为ROP,是因为核心是使用指令集中的ret指令来改变指令流的执行顺序。ROP攻击通常必须满足以下条件
1.程序有溢出,可以控制返回地址。
2.您可以找到符合条件的小工具以及相应小工具的地址。
3.如果小工具的地址不是每次都固定的,那么我们需要找到一种方法来动态获取相应的地址。
可以从中获取的信息有:
1.使用ROP的前提是有栈溢出
2.ROP链由一系列小片段构成,对于这些具有特定作用的小片段我们可以将它们组装起来构造出payload,最终获取flag
3.寻找的这些小片段必须含有ret指令 。
一.ret2text
第一个例子 ret2text 这是一个简单的栈溢出,没有用到rop的方法,在此不做赘述。
二.ret2shellcode
首先是最基本的检查
可以看到这是一个32位的ELF文件,基本没有保护。
然后我们用IDA看一下反编译后的代码