基于glibc-all-in-one加载符号表利用patchelf自动切换libc

luyanpei

super_libc 🔧

在CTF Pwn挑战中,GLIBC版本的选择与切换常常对漏洞利用与调试起到至关重要的作用。super_libc 是一个用于自动化GLIBC切换的脚本工具,支持交互式版本选择、路径自动检测,并能够在调试过程中自动更新符号表,极大地简化了调试工作流。本文将介绍如何使用 super_libc,并提供详细的安装和使用步骤

项目地址

1
https://github.com/peig0ng/super_libc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
> 一款用于CTF Pwn挑战的自动化GLIBC切换脚本,支持交互式版本选择和路径自动检测
以及通过操作glibc-all-in-one每次调试自带符号表,详细操作见md文件

## 功能特性 ✨

- 🚀 自动检测glibc-all-in-one安装路径
- 📂 交互式GLIBC版本选择菜单
- ✅ ELF文件验证
- 🔍 支持环境变量指定路径
- 💻 兼容各版本Ubuntu系统
- 🛠️ 自动依赖检查与错误提示

## 安装指南 📦

### 前置要求
- Ubuntu系统(推荐20.04/22.04)
- `patchelf`工具
- glibc-all-in-one

首先安装glibc-all-in-one,patchelf

glibc-all-in-one

1
2
3
4
5
cd ~/
git clone https://github.com/matrix1001/glibc-all-in-one
cd ~/glibc-all-in-one
sudo python3 update_list
cd ..

在glibc-all-in-one中

1
2
3
4
5
cd ~/
cd glibc-all-in-one
chmod +x update-list
cat list
sudo ./download <需要的libc版本>

patchelf

1
2
cd ~/
sudo apt install patchelf

super_libc

1
2
cd ~/
git clone https://github.com/peig0ng/super_libc.git

使用方法 🛠️

符号表问题

gdb调试碰到的符号表问题

进入~/glibc-all-in-one/libs/目录

image-20250403162311117进去需要的libc版本目录下(以2.23为例),显示隐藏文件.debug,这里面是符号表信息

image-20250403162358182进入.debug/lib/x86_64-linuxgnu/

image-20250415134500300

找到libc-2.23.so文件,复制到.debug根目录下

image-20250415134510161

就可以不用gdb的命令情况下,super_libc更改好文件libc后, pwndbg打开文件,直接就能加载好符号表。

2.23.2.27都跟上面一样

2.31版本符号表改动,在下面的文件夹里面
image-20250415134535782

2.34,2.35之后,将所有的文件复制到debug根目录就行,符号表太多了

基本命令

1
./super_libc.sh <binary>

选项说明

  • 设置环境变量(可选):

    1
    export GLIBC_ALL_IN_ONE_PATH=/path/to/your/glibc-all-in-one

可以自行添加环境变量以便全局运行

操作流程

  1. 运行脚本指定目标ELF文件
  2. 选择glibc版本(自动列出可用版本)
  3. 自动完成修补操作
  4. 验证结果

使用示例 📝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ./super_libc.sh ./magicheap

Available glibc versions:
0) 2.23-0ubuntu11.3_amd64
1) 2.27-3ubuntu1.6_amd64
2) 2.31-0ubuntu9.9_amd64

Select version (0-2): 0

Patching with:
Interpreter: /home/user/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so
RPATH: /home/user/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/

Patch successful!
Verify with:
file ./magicheap
ldd ./magicheap

注意事项 ⚠️

  1. 确保目标ELF文件具有可写权限

  2. glibc-all-in-one需要预先下载完整版本

  3. 如果遇到路径问题,可手动指定:

    1
    GLIBC_ALL_IN_ONE_PATH=/custom/path ./glibc-patcher.sh <ELF>
  4. 修补后建议使用ldd命令验证结果


⭐ 如果觉得本项目有帮助,欢迎Star支持!

  • Title: 基于glibc-all-in-one加载符号表利用patchelf自动切换libc
  • Author: luyanpei
  • Created at : 2025-04-15 13:07:05
  • Updated at : 2025-04-20 13:27:54
  • Link: https://redefine.ohevan.com/2025/04/15/基于glibc-all-in-one加载符号表利用patchelf自动切换libc/
  • License: All Rights Reserved © luyanpei