码迷,mamicode.com
首页 > 其他好文 > 详细

GOT表覆写技术

时间:2019-01-15 14:06:53      阅读:384      评论:0      收藏:0      [点我收藏+]

标签:pre   nbsp   tail   aliyun   文件   --   http   全局   www   

GOT表覆写技术

 

1、概念:

(1)GPT表:

1)概念:

每一个外部定义的符号在全局偏移表(GOT)中有相应的条目,GOT位于ELF的数据段中,叫做GOT段。

 

2)作用:

把位置无关的地址计算重定位到一个绝对地址。

程序首次调用某个库函数时,运行时连接编辑器(rtld)找到相应符号,

并将它重定位到GOT之后每次调用这个函数都会将控制权直接转向那个位置,而不再调用rtld。

 

(2)PLI表:

1)PLI表,过程连接表,一个PLI条目对应一个GOT条目。

2)当main函数开始,会请求plt中这个函数的对应GOT地址,如果第一次调用那么GOT会重定位到plt,并向栈中压入一个偏移,程序的执行就会回到_init()函数,

rtld得以调用就可以定位prinf的符号地址

3)第二次运行程序再次调用这个函数时程序跳入plt,对应的GOT入口点就是真实的函数入口地址。

4)动态连接器并不会把动态库函数在编译的时候就包含到ELF文件中,仅仅是在这个ELF被加载的时候,才会把那些动态函数代码加载进来,之前系统只会在ELF文件中的GOT中保留一个调用地址。

 

2、攻击:GOT表覆写技术

由于GOT表是可以写入的,所以将GOT表中要调用的函数地址覆盖成shellcode地址,就达到所要的目标。

 

3、实例:

1)代码:

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 void win()
 4 {
 5     printf("you win\n");
 6 }
 7 int main()
 8 {
 9     char a[100];
10     gets(a);
11     printf("you lose\n");
12     return 0;
13 }

 

 

技术分享图片

 

2)调试:

技术分享图片

gets和puts函数后跟着plt,即这个为PLT表的对应的数据地址

GOT表-->PLT表

技术分享图片

4、参考:

https://www.jianshu.com/p/8a401bfcff43

https://yq.aliyun.com/wenji/247854

https://blog.csdn.net/softee/article/details/41256595

GOT表覆写技术

标签:pre   nbsp   tail   aliyun   文件   --   http   全局   www   

原文地址:https://www.cnblogs.com/beiweisanshidu/p/10271197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!