0x00:前言

在做pwn的堆题时,会遇到不同版本的glibc。为此我们会装不同版本的虚拟机去应对。一般来说会装Ubuntu16和Ubuntu18虚拟机,这两个系统对应的glibc版本差别较大,且较常见。但其余的glibc版本也会存在一些小差别,主要在于malloc和free时的检查。为了更好地与远程环境对应,我们可以通过patchelf和glibc-all-in-one来更换程序动态加载时的glibc。

简单介绍一下,glibc-all-in-one用来下载需要的glibc包,然后用petchelf进行更换操作。

0x01:patchelf

安装命令:
sudo apt install patchelf 检查一下:
patchelf -h

0x02:glibc-all-in-one

1、下载glibc-all-in-on

从github克隆:
git clone https://github.com/matrix1001/glibc-all-in-one

2、更新glibc版本信息

进入glibc-all-in-one目录,执行update_list文件,更新glibc版本信息列表。

初始时是这样子的:

更新之后生成了list和old_list文件:

打开查看这两个文件发现是互补的,根据上面更新的完成信息,个人推断:list中的glibc版本是目前系统常用的可用的,而old_list中的是过时的,或者是这些版本存在一些问题,不推荐使用。(个人推测,保留质疑)

3、下载需要的glibc

查看版本信息文件:
cat list 下载glibc:
./dawnload [版本号]

也可以下载old_list里面对应的glibc,不过要用./download_old进行下载操作。(用./download会报错)

0x03:更换glibc

更换链接器:
patchelf --set-interpreter /home/tolele/pwn_tools/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/ld-2.23.so ./easy_heap 更换glibc搜索路径:
patchelf --set-rpath /home/tolele/pwn_tools/glibc-all-in-one/libs/2.23-0ubuntu3_amd64 ./easy_heap

(注意路径和可执行文件(参数)要按自己的来修改)

其实还有另外一种方法:更换链接器+直接更换动态库

更换链接器命令:
patchelf --set-interpreter /home/tolele/pwn_tools/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/ld-2.23.so ./easy_heap 更换动态库:(参数libc.so.6似乎是固定的)
patchelf --replace-needed libc.so.6 /home/tolele/pwn_tools/glibc-all-in-one/libs/2.23-0ubuntu3_amd64/libc.so.6 ./easy_heap

但这种方法没前面一种方法好,容易报错。

0x04:渡劫之道

众所周知,环境配置除了正常的操作之外,还需要运气加成,你往往不知道你会遇到什么千奇百怪的error。本人在u18环境配置地比较顺,但在u16第一步就报错了,来了个开门红,接下来更是红红(error)火火(怒火)。

如果你不幸在第一步安装patchelf时就报错了,百度无果之后。可以选择直接从github克隆下来(参考下方第一个链接),但渡劫之道可能也因此打开:

1、起点

(3条消息)【kali】glibc-all-in-one安装(解决version `GLIBC_2.34‘not found)_雪月三十的博客-CSDN博客_glibc-all-in-one

2、patchelf make报错

(3条消息)安装patchelf无法make(make报错很多)_Der_的博客-CSDN博客_patchelf安装

3、gcc版本低报错,更新gcc

(3条消息) ubuntu16.04下更新GCC版本_easy_简兮的博客-CSDN博客

4、更新过程中一个包校验报错

(3条消息)【linux】gcc版本更新_shuaixio的博客-CSDN博客_gcc更新

5、递归回去

以上为个人在u16的渡劫之道,系统环境不同会导致每个人的道路也会有所不同。望成功!(抱拳)


tolele

2022-07-29

更换可执行文件glibc版本的某一次挣扎的更多相关文章

  1. centons6升级gcc和glibc版本

    一.先升级gcc 这里配置yum源来升级 centos6系列更换阿里yum源 1.首先备份原来的cent os官方yum源 cp /etc/yum.repos.d/CentOS-Base.repo / ...

  2. Linux 确定系统glibc版本

    在shell中,可以直接运行glibc共享库文件获取glibc版本,CentOS下执行: /lib/libc.so. 输出为: GNU C Library stable release version ...

  3. CentOS 安装redis2.8.13 提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

    以下在系统CentOS 6.3 x86_64上操作 1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的gli ...

  4. gcc 与 glibc 的关系 glibc版本查看

    glibc是什么,以及与gcc的关系?glibc是gnu发布的libc库,也即c运行库.glibc是linux 系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc.gl ...

  5. 【linux】提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

    原文链接:http://www.myexception.cn/linux-unix/1622052.html [linux]提示"libc.so.6: version `GLIBC_2.14 ...

  6. CentOS “/lib64/libc.so.6: version `GLIBC_2.14′ not found”系统glibc版本太低

    1.试图运行程序提示”libc.so.6: version `GLIBC_2.14′ not found”,原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的.2.查看系统gl ...

  7. linux使用glibc版本安装mysql8.0.12

    1.前言 使用yum安装虽然很方便,但是如果要是在没有公网的环境下,是没有办法使用yum源的.所以我们可以使用mysql提供的glibc版本的安装包,进行安装. 但是在安装之前,一定要将以前的版本删除 ...

  8. glibc 各版本发布时间以及内核默认glibc版本

    最近有些软件要求glibc 2.14+,centos 6.x自带的版本是2.12的,特查了下glibc 各版本发布时间以及与对应的内核,如下: Complete glibc release histo ...

  9. centos中更换jdk的版本

    现在讲的是Linux中更换jdk版本的问题,卸载Linux自带的jdk更换sun的jdk百度一大堆,但是如果我安装的sun的jdk是1.7的想更换到1.8的如何解决呢,方法其实超easy. 把1.8的 ...

随机推荐

  1. 消息队列,IPC机制(进程间通信),生产者消费者模型,线程及相关

    消息队列 创建 ''' Queue是模块multiprocessing中的一个类我们也可以这样导入from multiprocessing import Queue,创 建时queue = Queue ...

  2. Mqtt入门:在线调试连接阿里云

    近期课设需要做个东西,我想要做个上位机更好的显示. 但是一开始学习一样东西,听没头绪的,不知道从哪里入手,尝试过去B站找视频看,但是感觉视频讲的都是基础的东西,不是说人家up主讲的不好,只是对于入门, ...

  3. vscode编写的程序中文乱码怎么办?

    (以下教程在源码文件的编码是utf-8的基础上进行!) (dev的源码文件是GBK编码,或者是GB2312?我现在好久没用dev,关于dev的信息可能有错误. 如果拿dev编写的代码用vscode打开 ...

  4. 第06组Alpha冲刺 (4/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2.曹兰英 3. 方梓涵 4.鲍凌函 5.董翔云 6.杜筱 7.黄少丹 8.曾丽莉 9. 詹鑫冰 10.吴沅静 1.3 冲刺成果展示 1.1 ...

  5. 高通(QCOM)sensor bring up

    高通7150平台 1.添加驱动文件 2.添加编译 3.配置json文件 4.高通默认配置 5.部分sensor外挂电源 6.遇到的问题 1.添加驱动文件 路径:adsp_proc/ssc/sensor ...

  6. springboot引入mybatis遇到的坑

      前边分享了springboot项目的创建及springboot项目的默认配置文件等,想温习的小伙伴可移步至文章末尾阅读,感谢.今天来分享下springboot引入mybatis框架的步骤,有小伙伴 ...

  7. Spire.Office激活

    更新记录: 2022年5月28日 初始代码便于复用 注意:最多支持到:E-ICEBLUE Spire.Office Platinum v6.10.3 引入命名空间: using Spire.Licen ...

  8. JavaScript与Node.js一起打造一款聊天App

    聊天是我们人与人交流最直接的方式,互联网的加入使我们交流更加便捷.我们手机上的微信.QQ是我们手机必不可少的应用软件.那么,我们是否可以做一款聊天应用呢? 之前我自己闲着没事,研究过一些技术,做了一款 ...

  9. C++简单工厂模式的学习

    我们先从最常见的C++类的一个实现开始说起, class API { public: virtual test(std::string s)=0; protected: API(){}; }; cla ...

  10. pyflink的安装和测试

    pyflink安装 安装前提:python3.6-3.8 参考:Installation | Apache Flink Python version (3.6, 3.7 or 3.8) is requ ...