啥也不会还想学PWN

今天学习got表。

首先我们要知道,GOT表是数据段用于地址无关代码的LinuxELF文件中确定全局变量和外部函数地址的表。ELF中有.got和.plt.got的两个表,.got表用于全局变量的引用地址,.got.plt用于保存函数引用的地址。

PLT是Linux ELF文件中用于延迟绑定的表。

接下来是他们运行的机制:

在第一次调用外部函数时,plt表会先跳转到对应的got表中。由于并没有被调用过,此时的got表存储的不是目标函数的地址,此时的got表中存储的地址是plt表中的一段指令,其作用就是准备一些参数,进行动态分析。当跳转回plt表后,plt表就会跳转到plt的表头,表头的内容就是调用动态解析函数,将目标函数的地址存放到got表中。

当完成两次调用之后,程序会形成一个延迟绑定,got表中已经存储了目标函数,直接跳转就可以了。

got表劫持:

将got表中原本存放的比如说puts函数的地址,改成system函数的地址,这样在调用puts函数是,实际调用的却是system函数,利用这种方式来getshell,就叫做got表劫持。这是一种间接控制程序流程的方式。

got表的地址,在没开PIE的情况下,我们可以在IDA中查看。或者更直接的,在pwntools中,elf.GOT["puts"]。这样也可以查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值