matrix1001
glibc-all-in-one
Python

🎁A convenient glibc binary and debug file downloader and source code auto builder

Last updated Jul 8, 2026
807
Stars
85
Forks
7
Issues
+2
Stars/day
Attention Score
91
Language breakdown
No language data available.
Files click to expand
README

glibc-all-in-one

English

pwn 选手的 glibc 瑞士军刀。 智能识别参数,不记 flag,拿来就用。下载、搜索、识别、比对、编译——覆盖 pwn 场景下 glibc 的全生命周期。

旧版 shell 脚本已移至 legacy/,不再维护。glibc-aio 是全新 v2 重写。

Install

git clone https://github.com/matrix1001/glibc-all-in-one.git
cd glibc-all-in-one
pip install -e .

Python 3.10+。pip install 自动安装 pyelftools(ELF 解析)和 zstandard(.deb zstd 解压),无其他依赖。

首次使用需要拉取可用包列表(约需 5 秒,生成 list 文件):

$ glibc-aio mirror update
[+] Saved 32 + 48 old packages to "list"

Quick Start

三条命令覆盖 pwn 最常见的场景:

# 1. 泄露地址 → 反查 libc 版本
$ glibc-aio puts 0x80970 system 0x4f440
[Online (libc.rip)]
  libc62.27-3ubuntu1.5amd64          ← 精准命中

2. 下载 + 查看符号

$ glibc-aio download 2.27-3ubuntu1_amd64 [+] Downloaded to libs/2.27-3ubuntu1_amd64

$ glibc-aio 2.27 system ← 版本号 + 符号名,自动搜本地已下载的 libc 2.27-3ubuntu1_amd64: 000000000004f440 STT_FUNC system

3. 识别未知 libc

$ glibc-aio ./unknown-libc.so Method: buildid Version: 2.27-3ubuntu1.5_amd64 BuildID: 4176c5eec6b8c6e04aa1eae2cd4b76b1

Command Reference

子命令(精确控制)

| 命令 | 说明 | |------|------| | glibc-aio mirror list | 显示 4 个镜像源及类型(regular / fallback) | | glibc-aio mirror update | 从所有镜像拉取可用包列表,写入 list 文件 | | glibc-aio search 2.35 | 按包名模糊搜索可用版本 | | glibc-aio search --symbol system=0x4f440 | 按符号偏移反查 libc 版本(libc.rip 在线) | | glibc-aio search --symbol a=0x1 --symbol b=0x2 | 多符号 AND 查询 | | glibc-aio search --symbol ... --tol 5 | 偏移容差 ±N 字节 | | glibc-aio search --buildid abc123 | 按 BuildID 查找 | | glibc-aio search --libc ./libc.so --symbol system | 在指定 libc 文件中查找符号 | | glibc-aio search --libc ./libc.so --symbol "exec" | glob 匹配符号名 | | glibc-aio search --libc ./libc.so --ends-with f30 | 地址末位匹配(partial overwrite 神器) | | glibc-aio search --libc ./libc.so --str "/bin/sh" | 在 .rodata/.data 中搜字符串,返回偏移 | | glibc-aio download 2.27-3ubuntu1_amd64 | 下载 libc + debug symbols | | glibc-aio download <id> --mirror tuna | 指定镜像 | | glibc-aio download <id> --no-dbg | 跳过 debug symbols | | glibc-aio download <id> --keep-deb | 保留 .deb 文件不删除 | | glibc-aio identify ./libc.so | BuildID 在线 → 符号指纹本地,双路识别版本 | | glibc-aio identify --offline ./libc.so | 仅本地符号指纹,不联网 | | glibc-aio diff libc-a.so libc-b.so | 比对两个 libc:符号增删、偏移变化、安全属性差异 | | glibc-aio build 2.29 amd64 | Docker 容器编译(版本→镜像自动映射) | | glibc-aio build 2.27 i686 | 32 位交叉编译 | | glibc-aio build ... --image ubuntu:16.04 | 指定 Docker 镜像 | | glibc-aio build ... --no-docker | 宿主机直接编译 |

所有子命令支持 --json 输出。

智能分发(不需要子命令)

不敲子命令时,glibc-aio 根据参数类型自动判断意图:

| 输入 | 自动执行 | 示例输出 | |------|---------|----------| | glibc-aio 2.35 | 搜可用包 | 2.35-0ubuntu3.13amd64 2.35-0ubuntu3amd64 ... | | glibc-aio 2.27 system | 已下载 libc 中查符号 | 2.27-3ubuntu1_amd64: 000000000004f440 system | | glibc-aio 2.35 "mmap" | 已下载 libc 中 glob 搜 | 列出所有匹配版本的 mmap 偏移 | | glibc-aio system 0x4f440 | 在线反查版本 | [Online] libc62.27-3ubuntu1.5amd64 | | glibc-aio puts 0x80970 system 0x4f440 | 多符号 AND | 同时满足两个偏移的 libc 版本 | | glibc-aio ./libc.so | 识别版本 | Method: buildid Version: 2.27-3ubuntu1.5_amd64 | | glibc-aio ./libc.so system | 查符号偏移 | 000000000004f440 STT_FUNC system | | glibc-aio ./libc.so "exec" | glob 搜符号 | 14 个匹配符号(execl, execv, execve...) | | glibc-aio ./libc.so 0xf30 | 末位匹配(3 hex digits = 12-bit mask) | 匹配 f30 的 7 个符号 | | glibc-aio ./libc.so 0x80 | 末位匹配(2 hex digits = 1 byte) | 末字节 80 的符号 | | glibc-aio ./libc.so system 0x380 | 符号 + 末位组合 | 先 glob 再末位过滤 |

智能分发规则: 存在的文件路径 → libc 文件;0x 开头或 ≥5 位纯 hex → 地址;数字.数字 → 版本号;其余 → 符号名。参数在前文是文件时,后续 hex 不限制长度(0x80f30 均可)。

详细用法

search — 查版本 / 搜 libc

# 在线 — 包名模糊搜
$ glibc-aio search 2.35
2.35-0ubuntu3.13_amd64
2.35-0ubuntu3_amd64
[*] 4 result(s)

在线 — 单个符号反查版本

$ glibc-aio search --symbol system=0x4f440 [Online (libc.rip)] libc62.27-3ubuntu1.5amd64 libc62.27-0ubuntu2amd64 ...

在线 — 多符号 AND + 容差

$ glibc-aio search --symbol puts=0x80970 --symbol system=0x4f440 --tol 5 [Online (libc.rip)] libc62.27-3ubuntu1.5amd64 [Local symdb] ← 本地已下载的也会被搜 libc62.27-3ubuntu1amd64 (2 symbol(s) matched)

在线 — BuildID

$ glibc-aio search --buildid 4176c5eec6b8c6e04aa1eae2cd4b76b1

本地 — 查符号

$ glibc-aio search --libc ./libc.so --symbol system 000000000004f440 STT_FUNC system

本地 — glob

$ glibc-aio search --libc ./libc.so --symbol "exec" 00000000000cbfa0 STT_FUNC execl 00000000000cbde0 STT_FUNC execv ... [*] 14 symbol(s)

本地 — 地址末位匹配

$ glibc-aio search --libc ./libc.so --ends-with f30 00000000000abf30 STT_FUNC wcpncpy 000000000004f430 STTFUNC libcsystem [*] 7 symbol(s)

本地 — 符号+末位组合

$ glibc-aio search --libc ./libc.so --symbol "exec" --ends-with fa0 00000000000cbfa0 STT_FUNC execl [*] 1 symbol(s)

本地 — 字符串搜索(精准扫 .rodata/.data 段,不是全文件 strings)

$ glibc-aio search --libc ./libc.so --str "/bin/sh" 0x001b3e9a /bin/sh [*] 1 match(es)

在线模式同时查询 libc.rip API 和本地符号索引数据库。网络不可用时本地结果不受影响。本地索引在每次下载时自动建立。

download — 下载 libc + debug symbols

4 个镜像源按序尝试:tuna → ustc → ubuntu-archive → old-releases(fallback)。任一下载成功即停止,对用户透明。

下载完成后自动:解压 .deb(支持 xz / gz / zstd 三种压缩)、提取符号建本地索引(供 searchidentify 离线使用)、清理临时文件。

$ glibc-aio download 2.27-3ubuntu1_amd64
[+] Downloaded to libs/2.27-3ubuntu1_amd64
$ ls libs/2.27-3ubuntu1_amd64/
x86_64-linux-gnu/  .debug/                            ← libc 文件 + debug symbols

选项

$ glibc-aio download 2.35-0ubuntu3_amd64 --mirror tuna # 只用指定镜像 $ glibc-aio download 2.35-0ubuntu3_amd64 --keep-deb # 保留 .deb $ glibc-aio download 2.31-0ubuntu9_i386 --no-dbg # 只要 libc,不要 debug

identify — 识别未知 libc 版本

双路 fallback。优先从 ELF 的 .note.gnu.build-id 提取 BuildID 在线查 libc.rip;失败则计算符号表哈希指纹在本地数据库中匹配。本地数据库随每次 download 自动增长。

$ glibc-aio identify ./libc.so
Method:    buildid
Version:   2.27-3ubuntu1.5_amd64
BuildID:   4176c5eec6b8c6e04aa1eae2cd4b76b1

$ glibc-aio identify --offline ./libc.so # 不联网,仅本地指纹 Method: fingerprint Version: 2.27-3ubuntu1_amd64

diff — 比对两个 libc 版本

对比符号表(新增/移除/偏移变化)和安全属性(RELRO/NX/Canary/PIE/RUNPATH)。

$ glibc-aio diff libs/2.27/libc.so libs/2.35/libc.so.6
--- libs/2.27/libc.so
+++ libs/2.35/libc.so.6
  • 000000000012e3f0 STTFUNC STBGLOBAL posixspawnfileactionsaddtcsetpgrp_np
  • 0000000000091d40 STTFUNC STBGLOBAL _strspnc1
~ system: 0x4f440 -> 0x50d60 ← 偏移变化 ~ puts: 0x80970 -> 0x80ed0 ! relro: full -> partial ← 安全属性退化

build — 从源码编译 glibc

默认在 Docker 容器中编译,自动根据版本号选择 Ubuntu 镜像(2.19→14.04, 2.23-2.27→16.04, 2.28-2.29→18.04, 2.30-2.34→20.04, 2.35+→22.04)。编译产物写入 libs/build/<version>/<arch>/。Docker 不可用时自动回退宿主机编译。

$ glibc-aio build 2.29 amd64                     # Docker ubuntu:18.04 容器内编译
$ glibc-aio build 2.27 i686                       # 32 位交叉编译
$ glibc-aio build 2.35 amd64 --no-docker          # 宿主机直接编译
$ glibc-aio build ... --prefix /opt/glibc         # 自定义安装路径

mirror — 镜像源管理

$ glibc-aio mirror list
  tuna                 https://mirror.tuna.tsinghua.edu.cn/... [regular]
  ustc                 https://mirrors.ustc.edu.cn/...         [regular]
  ubuntu-archive       http://archive.ubuntu.com/...           [regular]
  old-releases         http://old-releases.ubuntu.com/...      [fallback]

$ glibc-aio mirror update [+] Saved 32 + 48 old packages to "list" ← 统一文件,[old] 标记区分

JSON

所有命令支持 --json,输出合法 JSON 可直接管道给 jq

$ glibc-aio ./libc.so system --json | jq '.[0].addr'
"0x45380"

$ glibc-aio identify ./libc.so --json | jq -r '.id' 2.27-3ubuntu1_amd64

$ glibc-aio mirror list --json | jq '.[].name' tuna ustc ubuntu-archive old-releases

规模

| 项 | 值 | |---|-----| | Python | 3.10+ | | 依赖 | pyelftools + zstandard(2 个) | | 测试 | 28 passed | | 命令 | 6 子命令 + 11 种智能分发 | | 镜像 | 4(tuna / ustc / ubuntu-archive / old-releases) | | 在线 API | libc.rip | | 本地缓存 | ~/.cache/glibc-aio/(符号索引 + 指纹库) | | .deb 压缩 | xz / gz / zstd 自动检测 |

Legacy

旧版 shell 脚本在 legacy/,保留但不维护。

updatelist  → mirror update               list+oldlist 合并为统一 list 文件
download     → download(统一入口)         不再区分 download/download_old
download_old → 自动 fallback 到 old-releases
extract      → 内建纯 Python(ar+tarfile+zstd)
build        → Docker 容器化编译
🔗 More in this category

© 2026 GitRepoTrend · matrix1001/glibc-all-in-one · Updated daily from GitHub