前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[PWN][高级篇]ROP-ret2libc基础知识

[PWN][高级篇]ROP-ret2libc基础知识

作者头像
李鹏华
发布2024-03-12 15:27:07
790
发布2024-03-12 15:27:07
举报
文章被收录于专栏:网络信息安全
ROP-ret2libc基础知识
  • 前提知识准备
    • Linux延时绑定机制
    • Linux演示绑定机制的实现
    • 延迟绑定对我们有什么意义
    • libc函数在哪?
    • ret2libc使用条件
    • 如何使用libc
    • plt表和got表的关系
    • 整体的跟踪

前提知识准备

Linux延时绑定机制

动态连接的程序调用了libc的库函数,但是libc在运行才被加载到内存中,调用libc函数时,才解析出函数在内存中的地址,为了帮助程序更好的利用内存空间,不用每次把所有的函数真实地址都写进去,用到哪个查哪个,之后在使用就会很方便。

Linux演示绑定机制的实现

a、所有程序调用的libc函数都有对应的plt和got表,其位置固定 b、plt表:调用call put@plt plt表中存放的指令:jmp[puts_got] c、解析函数真实地址放入got表中存储

plt表: 程序联动表(内部函数表)

got表: 全局偏移表(全局函数表)

延迟绑定对我们有什么意义

got表: 一个绝佳的攻击目标 包含libc函数的真实地址,用于泄露地址 覆盖新地址到got表,劫持函数的流程

plt表: 不用知道libc函数真实地址,使用plt地址就可以调用函数

libc就是linux下的c函数库: libc中包含着各种常用的函数,在程序执行时才被加载到内存中 libc是一定可以执行的,跳转到libc中函数绕过NX保护

libc函数在哪?

ASLR地址随机化 系统开启/proc/sys/kernel/randomize_va_space 0表示关闭ASLR 1表示保留的随机化,共享库、栈、mmap0以及VDSO随机化 2表示完全的随机化 在1的基础上,通过brk()分配的内存空间也将被随机化 回答:被随机化了找不到-.-

ret2libc使用条件

泄露libc函数地址的条件: 程序有输出函数:例如puts/write/printf 实现: 设置好参数为某函数GOT表地址(GOT表中保存已经调用过的函数的真实地址) eg: puts_plt(puts_got) 栈缓冲区溢出的基础上,寻找以ret结尾的代码片段 实现: 设置参数、持续控制的目的 构造执行write(1,buf2,20)之后再返回main函数

如何使用libc

1、绕过NX ret2libc aslr随机化 泄露libc地址 2、aslr导致ret2libc的技术常常需要配合一个泄露的操作 3、ret2libc = leak libc 地址 + sys(/bin/sh)

简单的说: 1、泄露任意一个函数的真实地址:只有被执行过的函数才能获取地址 2、获取libc的版本 3、根据偏移获取shell和sh的位置:a、求libc的基地址(函数动态地址-函数偏移量)b、求其他函数地址(基地址+函数偏移量) 4、执行程序获取shell

plt表和got表的关系

这个图一定要理解了 每次调试一个函数的时候,我们都会看到一个call puts@plt,它会从plt表中来找一个真实地址,真实地址呢都是在我没的got表中,plt表再去got表来找,函数在第一次运行时这样子操作。延时绑定的意思是,在我们运行完一次之后,plt表中直接就是我们的真实地址了。

整体的跟踪

类似于windows的虚表和跳转表哦 我们举个例子,我这里使用的是之前文章中的一个实例,代码如下:

我们在红框的位置下个断点

这是第一次运行,所以一定会去got表中取地址,我们输入si指令 跟进

所以jmp就是跳转到了got表中

push 2就是去找got表中<got + 2>的位置,下面的jmp就是返回程序了,我们可以看到的是0x4004d0

也就是返回我们上面的地址了

希望大家可以有所收获哦!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ROP-ret2libc基础知识
  • 前提知识准备
    • Linux延时绑定机制
      • Linux演示绑定机制的实现
        • 延迟绑定对我们有什么意义
          • libc函数在哪?
            • ret2libc使用条件
              • 如何使用libc
                • plt表和got表的关系
                  • 整体的跟踪
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档