服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

无路远征——GLIBC2.37后时代的IO攻击之道 house_of_秦月汉关

日期: 来源:看雪学苑收集编辑:我超啊


本文为看雪论坛优秀文章

看雪论坛作者ID:我超啊





老生常谈的GOT表与PLT表


一、老生常谈的GOT表与PLT表


对于linux操作系统,GOT表与PLT表是绕不开的问题。


GOT表全称Global Offset Table,翻译过来就是全局偏移表,用于记录在 ELF 文件中所用到的共享库中符号的地址。说人话,就是程序中开辟了一块固定位置的内存用来存储数据。大部分时候存储的是函数指针。


PLT表全称Procedure Linkage Table,翻译过来就是过程链接表,作用是将位置无关的符号转移到绝对地址。当一个外部符号被调用时,PLT 去引用 GOT 中的其符号对应的绝对地址。具体说就是jmp [got]这种形式来跳到指定位置。


GOT表与PLT表可以算是编译届的老古董,它们的产生可以看作软件发展的必然,目前任何操作系统都在使用他们。


在linux的3环程序中,RELRO (ReLocation Read-Only)保护主要针对的就是GOT表,有3种模式,其中partial与null对GOT表保护相同。

full relro(全部开启,got 不可写)partial relro (部分开启,got 可写)null relro (不开启,got 可写)

partial与null模式下,在程序刚开始运行时,GOT 表项是空的,当符号第一次被调用时会动态解析符号的绝对地址然后转去执行,并将被解析符号的绝对地址记录在 GOT 中,第二次调用同一符号时,由于 GOT 中已经记录了其绝对地址,直接转去执行即可(不用重新解析)。ret2dlresolve就是针对动态解析过程的一种攻击手段。


full模式下,程序在开始时,在_dl_relocate_object过程中直接将符号表解析, GOT 中已经记录了其绝对地址,直接转去执行即可,并且GOT表被分在了不可写的段中。





程序重定位的达摩克利斯之剑


程序重定位的需求是GOT表与PLT表的前提,在汇编时代,PIC(position-independent code,地址无关代码)使得程序某些内容必须重定位。x86时代,各路链接器在程序重定位方面也是八仙过海各显其能,以GNU为例,程序重定位是通过__x86.get_pc_thunk.ax这一类函数实现的,这个函数的作用就是利用call在栈中存储的eip,并将其赋值给通用寄存器,在之后的程序中以此通用寄存器进行定位。


喜大普奔的RIP寻址


x64指令集在升级的同时,发明了RIP寻址,这使得程序重定位工作变得简单了许多,我们对比x86与x64的编译之后的文件就可以明显看出区别。x86程序中要定位data段的字符串需要用到__x86.get_pc_thunk.ax得到当前的ip,然后通过偏移找到字符串地址,而x64系统中只需要使用lea rdi,[rip+0xeac]这一条指令就能找到字符串的地址。

在x86_64架构下的现代操作系统中,因为使用虚拟内存管理,完全可以不使用PIC,但是编译器发展这么久掌握的屠龙之技,不用可惜了,于是就打了个安全的旗号继续使用(说笑)。同样,PIE(position-independent executable,地址无关可执行文件 )只是在PIC基础上更近了一步而已,不用过多赘述。





秦月汉关再现


C库也需要重定位


C库与其他三环程序本质上没有任何区别,而且因为它本身由很多文件编译而成,重定位需求更加强烈,同样也有GOT表与PLT表,只是一般来说C库的都是full relro,GOT不可写。


神出鬼没的PLT


PLT就是过程链接,对于一个程序而言,任何需要在运行时才确定的内容都是需要过程链接的,例如C++在虚函数展现多态时,虚函数指针就需要在运行时进行链接。同样,在程序处理过程中也需要对一些函数的got表在过程中再进行链接,就会有.got.plt节,这个节由_dl_relocate_object在程序开始时根据运行环境进行解析(主要是字符集,链接器等内容),而这个节为了能适应环境,就设计成可写的。

以strlen为例,在libc静态编译中看到的函数如下,这是根据环境信息对参数进行一定的设置。

但实际函数并非如此。因为puts函数在开始时候会调用strlen, 我们跟随puts函数找到真正的strlen。可以看出puts会调用strlen的PLT表,PLT表跳转到一个*ABS*@got.plt>的地方,里面存储的才是真正的strlen函数地址。

其中*ABS*@got.plt>对应的就是.got.plt节。

真正的strlen函数反编译如下,过程还是非常复杂的。

最后说一下,不但有.got.plt这种形式,PLT表也分很多,例如.plt.got、.plt.sec等。其中.plt.sec调用的就是.got.plt中的内容。





攻击方式


说明到这个地方,攻击方式就很简单了,就以刚才的puts函数为例,既然它一开始会执行strlen(buf)计算字符串长度,那么如果将其修改成strlen的.got.plt中的内容改成system就能够getshell。而且,附近数据非常丰富,fastbin attack和tcache attack都可以使用,还可以将其直接修改为one_gadget。在2.34各类hook都不能使用的情况下,如果屏蔽掉exit函数,这是一种很好用的攻击方式。


需要说明的是,除了puts之外,很多函数都会调用.got.plt中的内容,连__libc_message 这种函数都会调用,希望大家可以奋力挖掘。


其他


此篇文章没有专门的板子,因为只是一种攻击思路,主要原因是为后面一条链做好铺垫。


补充一个简单POC

#include <stdio.h>#include <string.h> int main(){    long long int puts_offset = 0x80ed0;    long long int libc_base_addr = (long long int)&puts - puts_offset;    long long int strlen_addr  = libc_base_addr + 0x19d960;    long long int system_addr = libc_base_addr  + 0x50d60;    long long int *strlen_got_plt_addr= (long long int *)(libc_base_addr + 0x219098 );    puts("输出/bin/sh");    puts("/bin/sh");    *strlen_got_plt_addr = system_addr;    puts("取得shell");    puts("/bin/sh");     return 0;}





看雪ID:我超啊

https://bbs.kanxue.com/user-home-894406.htm

*本文由看雪论坛 我超啊 原创,转载请注明来自看雪社区


# 往期推荐

1.CVE-2022-21882提权漏洞学习笔记

2.wibu证书 - 初探

3.win10 1909逆向之APIC中断和实验

4.EMET下EAF机制分析以及模拟实现

5.sql注入学习分享

6.V8 Array.prototype.concat函数出现过的issues和他们的POC们



球分享

球点赞

球在看


点击“阅读原文”,了解更多!

相关阅读

  • GPT-4 来了,距离 AI 彻底取代程序员还有多远?

  • 作者 | 何苗 出品 | CSDN(ID:CSDNnews)麦肯锡全球研究院曾发布有关人工智能对世界经济的影响报告,该研究院的模型预计,到2030年,大约70%公司将采用至少一种形式的AI,并且大部分公
  • 即日起,核查清理!

  • @武汉市民如果您发现自家的门牌有缺失错漏请及时向社区民警报备3月14日,武汉市公安局治安管理局通报,即日起至4月30日,武汉警方将在全市范围内开展“一标三实”(标准地址、实有
  • 快破10000了(附chatgpt小程序使用答疑)

  • 我们最近上线的“chatgpt智能聊天小程序”,发展速度有点猛啊,才五天时间,已经快破10000了:昨天才跟大家说,破5000了而已:破5000了怎么说呢,悠着点吧,发展慢一点,太快的话,容易吸引来看
  • 支付宝新专利可识别仿冒小程序

  • 科技边角料获悉支付宝(杭州)信息技术有限公司申请的“一种仿冒小程序识别方法、装置、存储介质及电子设备”专利日前获授权。天眼查App显示,该识别方法包括:获取待识别小程序,并
  • 今日逗图:幸 福 的 路

  • 本文图片均来自网络如有侵权,请联系我们删除本文内容只为博君一笑,请勿当真我是你孙爷爷啊其他游客:还管饭?属于人人工智能相当强烈了少于500字,零分冰箱呢?来点冰箱气氛逐渐焦灼
  • 今日逗图:解 放 双 手

  • 本文图片均来自网络如有侵权,请联系我们删除本文内容只为博君一笑,请勿当真粉夹子高达!好好的亲给霍霍了一点不好笑找到原版了惊喜+1手动积德两位人族大帝交手老实说,老家猪圈就
  • 咱是有求必应!六款小众却很实用的良心神器!

  • 前言最近看到后台有网友留言,希望来一款和PDF处理有关的软件,那我们肯定得满足呀,这不,它今天来了~在线 PDF 文件处理工具总感觉不能满意?那就试试今天这款在手机上轻松操作的PDF

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 2023-03微软漏洞通告

  • 微软官方发布了2023年3月的安全更新。本月更新公布了104个漏洞,包含27个远程执行代码漏洞、21个特权提升漏洞、15个信息泄露漏洞、11个身份假冒漏洞、4个拒绝服务漏洞、2个安
  • 新手性材料登上Nature!

  • 01【导读】四面体碳立体中心的控制一直是现代合成化学的一个焦点,这得益于它们的构型稳定性。相比之下,三取代的氮、磷和硫化合物会发生棱锥型反转,这是一种被广泛利用的基本和