运行不同版本libc
author: Tamako
先上两个美化的链接,不用zsh的
字体
样式,颜色
成品
切换libc
我的工具机是Ubuntu 18.04。
获取libc版本
这个很容易,通过运行libc就可以直接获取,比如buu的Ubuntu16.04 32位机使用的libc
当然有些libc运行的时候会出现错误,这个时候放到ida里面反编译一下就可以了,效果是一样的。
实际上用 strings 指令也可以 strings libc.so.6 | grep "ubuntu"
,简单快捷
编译libc
准备工作
考虑到现在见到的都是2.23版本的libc,所有就只编译了这个版本
为了编译旧版本的libc,最好用旧版本的gcc,所以我们考虑安装一下,好消息是不同版本的gcc是可以共存的。
首先添加旧版本的镜像源。使用 sudo vim /etc/apt/sources.list
添加
deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
然后 sudo apt-get update
更新源。
安装旧版本的gcc
sudo apt-get install gcc-4.8
sudo apt-get install gcc-4.8-multilib
sudo apt-get install g++-4.8
sudo apt-get install g++-4.8-multilib
sudo apt-get install gcc-5
sudo apt-get install gcc-5-multilib
sudo apt-get install g++-5
sudo apt-get install g++-5-multilib
添加到维护程序版本的 update-alternatives
中
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7
通过 sudo update-alternatives --config gcc
就可以切换版本了
编译2.23版本的libc时我们选择gcc-4.8
安装glibc-all-in-one
编译各个版本libc
git clone https://github.com/matrix1001/glibc-all-in-onecd glibc-all-in-onechmod 777 build download extractsudo ./build 2.29 amd64 #编译glibc
sudo ./build 2.27 amd64
没有编译32位的版本,考虑到32位用的少
位置在2.27和2.29的ld和libc在/glibc/2.2?/amd64中
但是2.23考虑了32位版本,采用手动编译
tar -zxvf glibc-2.23.tar.gz
cd glibc-2.23
建立目录并完成设置
64位
mkdir build64
cd build64
sudo CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error" CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error" ../configure --prefix=path_to_install
sudo make
sudo make install
32位
mkdir build32
cd build32
sudo CC="gcc -m32" CXX="g++ -m32" CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error" CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og" ../configure --prefix=/glibc/2.23/32 --host=i686-linux-gnu
sudo make
sudo make install
编译的时候报错了,解决方法如下
解决办法就是在这2个变量后面加 __attribute__ ((nocommon))
。他们在/glibc-2.23/misc/regexp.c中(第33行开始的)。
然后还是报错,发现还有这个。
也要改,三个都在一起,恒容易找到
记住改掉之后,重新make
这里我考虑使用patchelf
可以使用apt-get安装
sudo apt-get install patchelf
然后
patchelf --set-interpreter ./ld-linux.so.2 ./elfnamepatchelf --replace-needed libc.so.6 ./libc-2.23.so ./elfname或者patchelf --set-interpreter ./glibc-all-in-one-master/libs/2.31-0ubuntu9.2_amd64/ld-2.31.so --set-rpath ./glibc-all-in-one-master/libs/2.31-0ubuntu9.2_amd64 target_file
看这里
都试了一下,最好使的还是repath
patchelf --set-repath xxxxxxx pwn
xxxx是路径文件夹的路径,不过有个缺点就是只能放一个libc和ld。
patchelf --set-rpath ~/Desktop/vnctf2021/ff/ ff
例子。
这样的指令就可以设置了。第一条替换了ld,第二条替换了libc。第二条中的 libc.so.6
是目标文件 libc 软连接的名字,需要通过 ldd
指令来查看(一般都就是 libc.so.6
)
libc编译遇到的错误
pwn本地加载libc
但是32位安装报错一直没有解决,两个多小时遂放弃。
运行不同版本libc相关推荐
- 解决Firefox已阻止运行早期版本Adobe Flash
解决Firefox已阻止运行早期版本Adobe Flash 类别 [随笔分类]web 解决Firefox已阻止运行早期版本Adobe Flash 最近火狐浏览器不知抽什么风,每次打开总提示&qu ...
- 阿里云上运行Docker版本的PostgreSQL
阿里云上运行Docker版本的PostgreSQL 最近公司项目上用到PostgreSQL9.3.24, 需要搭建一套PostgreSQL测试环境. 正好最近阿里云双11优惠幅度巨大,果断入手一台2核 ...
- 将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决
将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决 参考文章: (1)将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决 (2)ht ...
- 我正在运行哪个版本的PostgreSQL?
本文翻译自:Which version of PostgreSQL am I running? I'm in a corporate environment (running Debian Linux ...
- mvcnn代码详解_使用colab运行tensorflow版本的faster-rcnn
** 在colab下运行tensorflow版本的faster- rcnn ** 操作流程 操作过程我已经录成视频上传至B站,链接为 https://www.bilibili.com/video/BV ...
- LibcSearcher找不到合适的libc(更新到python3版本Libc)
LibcSearcher找不到合适的libc(更新到python3版本Libc) 如果你是用的基于python2的LibcSearcher,可以安装python3版本的libcsearcher htt ...
- Tom围棋(弈城围棋)运行错误:当前运行的版本是系统无法识别的版本
从http://duiyi.sports.tom.com/service/download.htm 下裁TOM围棋安装后. 管理员级别的用户可以正常运行,但是受限用户就报错:"当前运行的版本 ...
- Windows10下使用批处理脚本更改jdk以及java运行时版本
前言: 先来说明一下个人计算机上的一些情况,个人笔记本上最开始安装的jdk是11版本,后来因为开发需求改为了1.8,到最近安装BurpSuit2021版本又需要高版本的java环境于是又解压了一个jd ...
- CTF pwn中利用pwntools加载不同版本libc调试程序的方法
在网上找到了很多加载libc的帖子,终于自己走通了一次,现在把方法和资源都整理一下 一.解决方案 python利用pwntools的代码 from pwn import * import pwnlib ...
- ride.py在运行python3.×版本后导致无法运行及解决办法
最近一直在自学python自动化,网上看到rf框架挺适合初学自动化测试,于是通过虫师的搭建了rf框架, 但是在使用过程中遇到了一个问题,在网上没有找到明确解决办法于是想到记录一下 之前为了搭建rf框架 ...
最新文章
- android开发--ListView中的getView原理
- 初探 MySQL 的 Binlog
- 我的4条产品设计工作观
- VS2008如何添加 OLE/COM 对象查看器 .
- hi3516配置wifi_HISI 3516A移植mt7601u的wifi驱动
- ios如何判断键盘是否已经显示
- android状态机是线程么,Java中的线程状态机 - java
- 前端学习(2840):nevagator导航标签
- c语言改错和填空能运行吗,C语言改错填空编程
- SQLmap常用命令/使用教程
- 数据分析没价值?——深思对业务的洞察有多少?
- 10.Doctrine2 (2)
- C#——已知两点及半径,求圆心坐标
- nmake comment
- 龙芯3A3000 PCI 硬件问题
- Service与Android系统设计-- libbinder 转载
- Django模型之Meta属性详解
- Ideas Of MySelf 20005-07-26
- 1003a+-*/b
- 计算机网络(2)传输层