延迟绑定与retdlresolve
延迟绑定与retdlresolve
我们以前在ret2libc的时候,我们泄露的libc地址是通过延迟绑定实现的,我们知道,在调用libc里面的函数时候,它会先通过plt表和gor表绑定到,函数真实地址上,那么在第二次调用的时候就可以用了,不用再次绑定
那么它是怎么样实现的呢,我们还是通过一个题目一步步去看一下调试过程,我们这里看一下write函数

我们断点下到call write,可以看见首先jmp到write的plt表里面push了一个0x20,然后继续jmp,我们把这个push的0x20叫做reloc_arg,也是dl_runtime_resolve的第一个参数
继续步入,我们可以看见又push了一个东西,叫做link_map是dl_runtime_resolve的第二个参数

看一下它里面存的值

这里面的第三个就是.dynamic的地址,那么就可以通过link_map找到.dynamic的地址,而.dynamic里面存的有.dynstr,.dynsym和.rel.plt的地址,它们分别在.dynamic+0x44 .dynamic+0x4c .dynamic+0x84的位置我们来看一下

那么.rel.plt真实的地址就是.rel.plt +reloc_arg,叫做ELF32.Rel的指针,叫rel,我们在ida里面也可以发现确实是这样

接下来我们可以通过刚刚的rel找到r_offest(got表)和r_info

我们在ida里面验证一下r_offest是不是got表

是没有问题的,那么r_info有什么用呢,我们把r_info >> 8得到的一个数也就是6,它是刚刚.dynsym里面的下标,我们来看一下,通过这个下标我们得到函数名的偏移

我们刚刚得到的下标是6,那么函数名偏移就是0x4c,我们再加上.dynstr,就可以找到函数名所在地址

ida里面也是这样

那么就找到对应的函数名了(st_name),在动态链接库里面找这个函数的地址,赋值给 *rel->r_offset,也就是 GOT 表就完成了一次函数的动态链接,那么绑定就完成了,而ret2dlresolve就是通过在这之间伪造来进行getshellde
在32位NO RELRO情况下我们可以直接修改.dynamic,这里我们可以用工具来gethsell,exp在这里

这里使用pwntools里面的rop模块创建了一个rop对象,rop.raw()可以往rop链里面填充数据,rop.read(),可以调用read函数,rop.chain()可以发送完整的shellcode我们把.dynamic的地址改成我们bss段上的假地址,然后再调用read的第二条plt指令触发dl_runtime_resolve,然后在特定位置给上参数/bin/sh
对于32位Partial RELRO的类型pwntools仍然给我们的强大的工具构造payload

但是最好还是弄清楚原理在使用工具,善于利用工具可以少走很多弯路,但是有利有弊,好处就是可以快速的做出题,并且能节省下很多时
间;坏处也显而易见,就是只知道这样可以做出来,但是为什么这样做出来的完全不懂。可以在CTFwiki上面找到具体的手工构造payload的方法[https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/advanced-rop/ret2dlresolve]
延迟绑定与retdlresolve的更多相关文章
- PHP 面向对象编程和设计模式 (2/5) - 静态变量、属性和方法及延迟绑定
PHP高级程序设计 学习笔记 2014.06.10 Static(静态)关键字用来定义静态方法和属性,static 也可用于定义静态变量以及后期静态绑定. 1.静态变量 static variable ...
- Atitit 延迟绑定架构法attilax总结
Atitit 延迟绑定架构法attilax总结 配置文件的延迟绑定1 Api属性与方法的回调延迟绑定1 后期绑定和前期绑定2 延迟调用2 用 Java 语言延迟绑定2 什么是推迟绑定 C++3 配置文 ...
- python 延迟绑定
def multipliers(n): funcs = [] for i in range(n): def f(x): return x * i funcs.append(f) return func ...
- PHP静态延迟绑定
静态延迟绑定的概念 PHP版本5.3起增加了静态延迟绑定,也称迟绑定,主要用于在继承范围内引用静态调用的类.简单地来说:static::不再被解析为当前方法所定义的类,而是在实际运行时计算的. // ...
- Scala学习之延迟绑定
package com.swust.example object TraitDemo2 extends App{ //抽象类 abstract class Writer { def writeMess ...
- PHP静态延迟绑定和普通静态效率简单对比
只是一个简单的小实验,对比了下 延迟绑定 和 非延迟的效率 延迟绑定主要就是使用 static 关键字来替代原来的 self ,但功能非常强大了 实验代码: class A { protected s ...
- ELF 文件 动态连接 - 延迟绑定(PLT)
PLT 全称:Procedure Linkage Table ,直译:过程连接表 由于在动态连接中,程序的模块之间包含了大量的函数引用,所以在程序开始执行前,动态链接会耗费较多的时间用于模块之间函数引 ...
- python闭包和延迟绑定
一.什么是闭包: 1.函数内定义函数. 2.外函数的返回时内函数的引用. 3.内函数使用外函数的局部变量(至少一个). 1 def outfunc(): 2 for num in range(4): ...
- Python函数——闭包延迟绑定
前言 请看下面代码 def multipliers(): return [lambda x : i*x for i in range(4)] print ([m(2) for m in multipl ...
- scala学习手记34 - trait方法的延迟绑定
trait的方法的延迟绑定就是先混入的trait的方法会后调用.这一点从上一节的实例中也可以看出来. 下面再来看一个类似的例子: abstract class Writer { def write(m ...
随机推荐
- 【LeetCode刷题】912. 排序数组
912. 排序数组(点击跳转LeetCode) 给你一个整数数组nums,请你将该数组升序排列. 示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:num ...
- Python简单程序设计(Time篇)
如题: 解题方式如下:
- 《Go程序设计语言》学习笔记之数组
<Go程序设计语言>学习笔记之数组 一. 环境 Centos8.5, go1.17.5 linux/amd64 二. 概念 数组是具有固定长度且拥有零个或多个相同数据类型元素的序列. 三. ...
- management.endpoints.web.exposure.include
yml配置文件中 management: endpoints: web: exposure: include: '*' properties配置文件中 management.endpoints.web ...
- 【已解决】ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)---mysql数据库本地服务器localhost连接失败
出现错误mysql数据库本地服务器localhost连接失败: 1.输入命令 mysql -uroot -p 输入密码进入数据库发现错误 2.输入命令 mysqld --install 出现Serv ...
- NUMA 平台
What is NUMA? This question can be answered from a couple of perspectives: the hardware view and the ...
- #基数排序#CF1654F Minimal String Xoration
题目传送门 分析 有没有一种办法可以将每个 \(j\) 的比较过程同时进行, 可以发现其实这个过程很像后缀排序,实际上只是加号变成了异或, 从低位到高位重新将字符串排名,用同样的方法做到 \(O(2^ ...
- #dp#CodeChef Little Elephant and Mouses
LEMOUSE 分析 由于被单只老鼠吓到只能算一次,所以前两次走的位置也可能会被老鼠吓到. 设 \(dp[n][m][o][p]\) 表示走到 \((n,m)\) 上一步走的是 \(o\) 这种方式, ...
- Java 包和 API 深度解析:组织代码,避免命名冲突
Java 包和 API Java 中的包 用于将相关的类分组在一起.可以将其视为文件目录中的一个文件夹.我们使用包来避免名称冲突,并编写更易于维护的代码. 包分为两类: 内置包(来自 Java API ...
- 学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程
Python 可以用于数据库应用程序.最流行的 NoSQL 数据库之一是 MongoDB MongoDB MongoDB 将数据存储在类似 JSON 的文档中,使数据库非常灵活和可扩展. 您可以在 M ...