首页
社区
课程
招聘
[原创]cclibc:一个强大的CTF Glibc环境管理工具
发表于: 1天前 324

[原创]cclibc:一个强大的CTF Glibc环境管理工具

1天前
324

前言

前几天重新配置CTF PWN环境,在搭libc环境的时候发现glibc-all-in-one重构了,自己之前常用的一个libc切换工具也拉闸了。然后自己用glibc-all-in-one下载libc版本同时配置调试符号花了点时间(2.23到2.31到2.34之后,每个版本操作都有些差异),但这些步骤其实很机械,而且用patchelf修改libc环境也没有一键式脚本方便。

在CTF PWN中,有这么几个常见场景

  • 修改ELF文件的GLIBC环境
  • 补全调试符号路径
  • 在老版本LIBC中编译C/C++程序

为了快速处理这些场景,我决定开发一个简单易用的GLIBC环境管理工具,于是cclibc诞生了。
为什么叫cclibc呢?因为主要用Claude Code开发(前后拷打了两天AI完成????☝️)
cclibc项目地址c30K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6e0x3h3&6&6k6i4u0Q4x3V1k6U0j5$3I4A6j5X3x3`.

各位大佬有空方便点点小星星,谢谢了

安装

一键安装,无需手动download GLIBC

git clone ba5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6e0x3h3&6&6k6i4u0Q4x3V1k6U0j5$3I4A6j5X3y4Q4x3X3g2Y4K9i4b7`.
cd cclibc
sudo ./install.sh

流程:检查/安装系统依赖 → glibc-all-in-one + glibc-aio → 软链接 cclibc/usr/local/bin(PATH 仅此一种方式)→ 询问是否下载 libc

下载 libc 时二选一:

模式 说明
standard(推荐) 仅 LTS 版 amd64 libc:2.23 / 2.27 / 2.31 / 2.35 / 2.39,不下载 old-releases
advanced 全量所有 libc 版本(含 old-releases 补全)

两种模式对同一 glibc 主版本都只下载最新修订

图片描述
图片描述

命令参数

命令 说明
switch <elf> <目标> [-n] 切换环境;-n 用 replace-needed 方式
restore <elf> 恢复备份
check <elf> 查看 ELF 环境 / libc 版本信息
list / download <版本> 已下载环境 / 下载(封装 glibc-aio)
gdb <elf> / debug <elf> 打印 gdb 命令 / pwndbg 启动调试 (自动带符号)
run <elf> 直接运行
compile <src> [版本] [-o out] [--arch] 针对旧 glibc 编译
fix-dbg <版本> 补建调试符号 (build-id + 库目录绑定)

cclibc <elf> = check

cclibc <elf> <目标> = switch 简写,如:cclibc <elf> 2.35 (自动选最接近版本)

目标还可以写成./libc.so.6,cclibc会自动识别并切换到目标环境

快速上手

# 1. 识别 libc 版本 
$ cclibc ./libc-2.23.so
文件    : libc-2.23.so
架构    : amd64
版本    : 2.23-0ubuntu11.3
BuildID : 30773be8cf5bfed9d910c8473dd44eaab2e705ab
[+] 已下载的精确环境: 2.23-0ubuntu11.3_amd64

# 2. 一键切换
$ cclibc ./pwn 2.23-0ubuntu11.3_amd64
[*] ELF: ./pwn (amd64)
[+] 已备份原文件 → ./pwn.cclibc.bak
[+] interpreter → /home/kali/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/x86_64-linux-gnu/ld-linux-x86-64.so.2
[+] RUNPATH → /home/kali/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/x86_64-linux-gnu
[+] 调试符号已绑定 (23 个库)

[+] 切换完成: ./pwn → 2.23-0ubuntu11.3_amd64

# 3. 确认当前环境 
$ cclibc ./pwn
ELF      : ./pwn (amd64)
Interpreter : /home/kali/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/x86_64-linux-gnu/ld-linux-x86-64.so.2
RPATH/RUNPATH: /home/kali/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/x86_64-linux-gnu
NEEDED    : libc.so.6
[+] → 当前环境: 2.23-0ubuntu11.3_amd64

# 4. gdb 调试
$ cclibc debug ./pwn
pwndbg> p &system
$2 = (int (*)(const char *)) 0x7ffff78453a0 <__libc_system>
pwndbg> p *stdout
$4 = {
  _flags = 0xfbad2887,
  _IO_read_ptr = 0x7ffff7bc56a3 <_IO_2_1_stdout_+131> "\n",
  _IO_read_end = 0x7ffff7bc56a3 <_IO_2_1_stdout_+131> "\n",
  _IO_read_base = 0x7ffff7bc56a3 <_IO_2_1_stdout_+131> "\n",
  _IO_write_base = 0x7ffff7bc56a3 <_IO_2_1_stdout_+131> "\n",
  _IO_write_ptr = 0x7ffff7bc56a3 <_IO_2_1_stdout_+131> "\n",
  _IO_write_end = 0x7ffff7bc56a3 <_IO_2_1_stdout_+131> "\n",
  _IO_buf_base = 0x7ffff7bc56a3 <_IO_2_1_stdout_+131> "\n",
  _IO_buf_end = 0x7ffff7bc56a4 <_IO_2_1_stdout_+132> "",
  _IO_save_base = 0x0,
  _IO_backup_base = 0x0,
  _IO_save_end = 0x0,
  _markers = 0x0,
  _chain = 0x7ffff7bc48e0 <_IO_2_1_stdin_>,
  _fileno = 0x1,
  _flags2 = 0x0,
  _old_offset = 0xffffffffffffffff,
  _cur_column = 0x0,
  _vtable_offset = 0x0,
  _shortbuf = "\n",
  _lock = 0x7ffff7bc6780 <_IO_stdfile_1_lock>,
  _offset = 0xffffffffffffffff,
  _codecvt = 0x0,
  _wide_data = 0x7ffff7bc47a0 <_IO_wide_data_1>,
  _freeres_list = 0x0,
  _freeres_buf = 0x0,
  __pad5 = 0x0,
  _mode = 0xffffffff,
  _unused2 = '\000' <repeats 19 times>
}

gdb 调试

switch 时已自动把调试符号绑定到 libc 目录,直接启动即可

pwndbg ./pwn          # 直接可看 libc 符号, 无需任何参数
cclibc debug ./pwn    # 等价, 用 pwndbg 启动并额外带上符号路径

验证符号:p &system 应显示 <__libc_system>ptype struct malloc_chunk 应展开结构

针对旧 glibc 编译

新 gcc 编译的二进制要求高版本符号(GLIBC_2.34),无法在老 glibc 运行。compile 自动下载对应 libc6-dev 并修正链接脚本:

cclibc compile hello.c 2.23
cclibc compile hello.c 2.35 --arch i386    # 需要已下载 i386 环境

冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
免费 1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回