首页 > 其他分享 >延迟绑定与retdlresolve

延迟绑定与retdlresolve

时间:2024-04-24 20:34:43浏览次数:27  
标签:plt 绑定 dynamic 地址 rop 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]

标签:plt,绑定,dynamic,地址,rop,retdlresolve,我们,延迟
From: https://www.cnblogs.com/CH13hh/p/18156267

相关文章

  • 利用动画延迟(animation-delay)实现复杂动画
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......
  • 创新的FPGA:LAV-AT-E70-1CSG841C、LAV-AT-E70-2CSG841C、LAV-AT-E70-3CSG841C旨在实现
    Avant-E专为网络边缘处理而生Avant™-E系列中端FPGA是基于16nmFinFET工艺Avant平台推出的首款产品。该平台经过优化可提供同类FPGA产品中领先的低功耗、小尺寸和高性能。Avant-EFPGA旨在实现低延迟的网络边缘设备,非常适合有着明确时序要求的应用,包括工业环境中的机器视觉、机器......
  • 原生JS 绑定右键菜单 并隐藏浏览器右键菜单
    原生JS绑定右键菜单并隐藏浏览器右键菜单//获取元素vardom=document.getElementById("box");dom.addEventListener('contextmenu',function(e){if(e.button===2){notesTitle=e.srcElement.innerText//获取点击的元素e.preventDefault();//......
  • Spring中将@RequestParam绑定到对象(转)
    译文:https://blog.csdn.net/dnc8371/article/details/106810876/译文作者:dnc8371来源:CSDN原文:https://www.javacodegeeks.com/2018/10/how-bind-requestparam-object-spring.html您是否在请求映射方法中用@RequestParam注释了多个参数,并认为它不可读?当请求中需要一个或两个输......
  • C#获取事件绑定的方法
    publicclassMyEventArgs{}publicdelegatevoidMyEventHandler(objectsender,MyEventArgsargs);publicclassMyControlClass:Control{publiceventMyEventHandlerMyEvent;publicDelegate[]GetEventDelegates(){if(MyEvent!=null)......
  • vue v-model 双向绑定
    回顾从vue2到vue3v-model双向绑定的写法变化场景v-model双向绑定,用于处理表单输入绑定,类似于react中的受控组件。//React受控组件functionApp(){const[text,setText]=useState("");return(<><h3>{text}</h3><inputvalue=......
  • v-for 一定要绑定key值吗?为什么不建议使用index?
    在vue进行循环的数组或者对象中,使用了v-for进行dom元素的渲染。当数组或对象中的值发生变化时,可能会使dom元素重新渲染。是否会重新渲染和我们设置的key属性对应的值有关合理的设置key属性的值可以有效的提高页面的的更新效率首先,vue使用了diff算法来进行dom元素的更新,diff算......
  • 网卡绑定(bond)之子接口
    服务器两张网卡需要做bond,并且bond后网卡需配置不同网段的地址,用于走不同流量,这个时候就可以采用起子接口的方式。#第一步:停掉NetworkManager服务systemctlstopNetworkManager.servicesystemctldisableNetworkManager.service#第二步:备份cp/etc/sysconfig/networ......
  • UI——数据表和UI绑定
    目的创建数据表创建UI控件玩家角色蓝图UI按键逻辑UI与数据表绑定1.创建数据表2.创建UI控件3.玩家角色蓝图UI按键逻辑4.UI与数据表绑定......
  • GoldenGate抽取进程extract延迟处理
    前言一套GoldenGate环境,已经运行了很多年,一直比较正常,Extract抽取进程基本上没有出现延迟的情况,但这次突然出现抽取延迟,其中一个抽取进程延迟高达50个小时左右。 处理过程1.当前有两个抽取进程,分别为:E_HXZG、E_SBFSC,目前出现延迟的是第1个抽取进程。检查该进程的当前状态......