libc的延迟绑定机制

1.简述got表和plt表

1.got表

Linux ELF文件中用于定位全局变量和函数的一个表(全局偏移表)

2.plt表

Linux ELF文件中用于延迟绑定的表(过程链接表)

2.延迟绑定机制简述

当函数第一次被调用的时候,才会进行绑定(函数进行符号查找,重定位等),如果没有被加载则不会被绑定,加快程序的启动速度

3.延迟绑定机制的原理

存在一个test函数,这个函数在PLT中的条目为test@plt,在GOT中的条目为test@got

第一次调用bar函数的时候,首先会跳转到PLT,伪代码如下(PLT跳转到GOT)

test@plt:
jmp test@got
patch test@got
  1. 如果函数从来没有调用过,那么GOT会跳转回PLT并调用patch test@got(这一行代码的作用是将test函数真正的地址填充到test@got,然后跳转到test函数真正的地址执行代码)
  2. 下次再调用bar函数的时候,执行路径就是先后跳转到test@plt→test@got→test真正的地址

4.举一个实例(read函数为例)

1.ida打开一个文件找到call read指令

image-20240401090617668

2.记住地址gdb调试一下

1.下断点b *0x00401256,然后运行

image-20240401091153493

这里是call read函数

2.si进入查看

image-20240401091442816

跳转到plt表里寻找

这里gdb调出来不太直观

3.用ida远连调一下

1.read下一个断点

image-20240401095657246

2.F7单步进入,调用plrt表然后再调用got表

image-20240402204018327

5.利用该机制信息泄露的思路

在进行缓冲区溢出攻击的时候,如果我们将EIP跳转到write函数执行,并且在栈上安排和write相关的参数,就可以泄漏指定内存地址上的内容

比如我们可以将某一个函数的GOT条目的地址传给write函数,就可以泄漏这个函数在进程空间中的真实地址

暂无评论

发送评论 编辑评论


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