台湾黑客Orage Tsai的CTF旅程和不为人知的故事 Phrack #72/5
原创 Jeffery1st 2025-10-29 14:16 美国

"我们一生中都在扮演着不同角色,我很庆幸很早便找到自己的兴趣、并能以此为生。在成为一位全职骇客前,我也曾是别人眼中胡作非为的脚本小子、寻求更大刺激的年轻人,甚至为了高额奖金到处奔走的漏洞猎人;到如今能自豪地称自己是个 “骇客”。"
在网络安全的世界里,有一个来自台湾的传奇人物,名叫 Orange Tsai 蔡政達 。
他不是那种只在新闻标题里出现的“黑客”,他是真正在“拆解”互联网的人。他是Pwn2Own黑客大赛的冠军,Pwnies奖(安全界的“奥斯卡”)的得主。在2021年,黑客们最常利用的15个顶级漏洞中,有大约60%是他发现并报告的。
但Orange Tsai最近写的文章,不是为了炫耀他在微软或VPN上又找到了什么惊天漏洞。他想讲一个更根本的故事——关于他的“初恋”,那个将他塑造成今天的样子的“游乐场”:黑客攻防竞赛(CTF)。
我们很多人,甚至包括一些专业人士,都倾向于认为CTF(Capture the Flag,夺旗赛)只是一种“电竞”。参赛者们在48小时内,不眠不休地解答主办方设计的、各种刁钻古怪的谜题。
人们普遍批评CTF“越来越脱离现实”。
但Orange Tsai要告诉我们:我们都错了。
这些“游戏”非但没有脱离现实,它们反而是真实世界网络安全的“粒子加速器”。它们是一个充满“野性创造力”的实验室,不断孕育出全新的攻击技术,甚至“意外”地撞破了支撑互联网的底层支柱。
他给我们讲了几个“游戏成真”的精彩故事。
故事一:当“检查文件是否存在”,变成了“引爆核弹”
在PHP(一种构建了全球无数网站的语言)安全领域,黑客们最喜欢的“大杀器”之一叫做“反序列化”。
你可以把它想象成一种“分子传送”:开发者把一个“对象”(比如一个用户A)打包成一串文本(序列化),传来传去。当需要时,再用一个叫 unserialize() 的函数把这串文本“传送”回活生生的用户A(反序列化)。
问题是,如果一个黑客能控制这串文本,他就可以不传送回“用户A”,而是传送回一个“邪恶的入侵者”。
因此,开发者们学乖了。他们死死守住了 unserialize() 这个“传送门”,不让任何可疑的文本靠近
攻击者们似乎无路可走了。直到CTF登场。
2017年,Orange Tsai本人正在为一场CTF比赛设计挑战。他为了好玩,在业余时间阅读PHP的源代码,他发现了一个惊天秘密。
PHP有一种自己的压缩包格式,叫PHAR。为了方便管理,这个压缩包会把自己的“元数据”(比如包里有啥)也用“序列化”的方式打包存储。
真正的“Aha! 时刻”来了:Orange发现,PHP的设计是,无论你对这个PHAR文件做什么,哪怕只是用 file_exists() 函数去“检查一下这个文件是否存在”,PHP的底层都会自动、热情地帮你把那个“元数据”给“反序列化”。
这个发现彻底改变了游戏规则。
那扇被重兵把守的 unserialize() 大门?黑客们不再需要从正门硬闯了。他们只需要诱导程序去“看一眼”他们精心伪造的PHAR压缩包(比如伪装成一张图片),“核弹”就会在系统内部被引爆。
Orange Tsai为他的CTF设计了这个“魔法文件”挑战。当时,这个技巧还只在小圈子里流传。一年后,另一位安全研究员Sam Thomas在Black Hat(全球顶级黑客大会)上,独立地发表了完全相同的攻击技术,并展示了它如何攻破Typo3、WordPress等真实世界的重量级应用
这个诞生于“游戏”的奇思妙想,整整领先了真实世界一年。
故事二:那个“意外”撞出来的史诗级漏洞
如果说PHAR的故事是CTF“预言”了未来,那下面这个故事,就是CTF“意外”地绊倒了现在。
2019年,一场“真实世界CTF”(Real World CTF)正在举行。主办方的目标很明确:让选手们攻破最新版Chrome浏览器的防线。这是一个“前端”挑战。
但一位ID为 @d90pwn 的选手,在解题时“分心”了。
他随手向服务器的网址(URL)里塞进了一个“换行符”,这是一个非常规的、几乎无意义的“捣乱”操作。然而,服务器的反应却极其诡异——它没有按预期报错,反而吐出了一些本不该出现的内部信息
@d90pwn 当时一头雾水。在紧张的比赛中,他没能解开这个谜团
但比赛结束后,好戏才刚开始。
@d90pwn 和他的朋友们(@neex 和 @beched)对这个“诡异的换行符”展开了侦探般的调查。他们发现,自己无意中绊到了一根“世纪电线”。
他们揭开了一个潜藏多年的史诗级漏洞(CVE-2019-11043)。这个漏洞存在于PHP-FPM中——这是Nginx服务器(运行着全球上亿网站)和PHP配合工作最主流的模式之一。
这个漏洞的成因极其微妙:Nginx在处理带“换行符”的URL时会产生一个罕见的“误解”,而PHP-FPM的底层逻辑又恰好有一个微小的计算失误,两个看似无害的小问题撞在一起,奇迹般地允许黑客实现“远程代码执行”(RCE)——也就是彻底接管服务器。
Orange Tsai在文章中感叹:这个漏洞的藏匿方式是如此“刁钻”,以至于传统的自动化扫描工具(Fuzzing)几乎不可能发现它。
它之所以被曝光,唯一的原因是:
在一场CTF比赛中,一群顶尖黑客为了一个完全不同的目标,正在对一个系统进行“密集的、不计后果的、疯狂的试错”。
真正的“夺旗”
Orange Tsai的文章,是他写给CTF社区的一封情书。
他想告诉世界,CTF远非“脱离现实的无聊游戏”。它是一种文化,一种“为了好玩而黑客”的纯粹精神。
在这种精神下,主办方会疯狂到发明一个“9比特的CPU”来折磨选手;而选手们则会在这种“高压”和“趣味”的激励下,爆发出最耀眼的“创意火花”
这些火花,有的照亮了被遗忘的“安全古迹”,有的则点燃了全新的“科技树”。
最终,这些“游戏玩家”们带给真实世界的,远比几面“旗帜”要多得多。
繁体中文版 https://blog.orange.tw/posts/2025-08-the-art-of-php-ch/