ret2text

基本原理

在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。

gadgets 通常是以 ret 结尾的指令序列,通过这样的指令序列,我们可以多次劫持程序控制流,从而运行特定的指令序列,以完成攻击的目的。

ret2text即控制程序执行.text段的代码(程序自身代码)。有时候我们会使其连续执行几处不相邻的gadgets,这就是ROP。

ret会栈上取出返回地址到ip寄存器,ip寄存器是指令寄存器,里面是指令地址

我们要做的就是将程序中栈上原本正常的指令地址劫持为恶意地址。举个例子:

+-----------------+           +-----------------+
|     ret addr    |           |     fake ret    |             
+-----------------+           +-----------------+             
|     saved bp    |           |     saved bp    |             
+-----------------+<---bp     +-----------------+<---bp       
|                 |           |                 |             
|                 |           |                 |             
|                 |           |                 |             
+-----------------+<---sp     +-----------------+<---sp       
       

在我们实际利用过程中,只要先确定溢出长度,然后将ret addr覆写为恶意地址就行了

由高地址向低地址增长的栈

栈结构是自顶向下增长的,这里的顶指高地址,从上图的例子也能看出来,栈顶在低地址处,栈底在高地址处。当需要开辟新的栈空间的时候,栈顶会向更低地址移动。

利用手法

暂无

暂无评论

发送评论 编辑评论


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