比赛前三天,战载队长在群里甩了个压缩包,队打说“环境都在里面,比赛自己搞”。何下这就是战载CTF战队获取比赛文件的常态——没有统一入口,没有一键下载,队打全靠人肉搬运和队友互传。比赛
大部分CTF比赛的何下文件分发走三个渠道。第一是战载比赛官网,通常在“Challenges”或“比赛资料”页面挂个Google Drive或百度网盘链接。队打国内赛事偏爱百度网盘,比赛提取码往往是何下战队名缩写加个数字。国外赛事用Google Drive或Mega,战载这时候没梯子的队打队伍就得靠有海外节点的队友先下载再转发。第二是比赛比赛平台的附件系统,比如CTFd搭建的赛事平台,每道题下面直接挂附件,点一下就下,但有时候附件服务器被打崩,页面刷半天出不来。第三是IRC或Discord频道,裁判会临时扔个链接进来,说“这题附件更新了,重新下”。
下载只是第一步,文件到手后的整理才是真功夫。我见过最离谱的一次,某队员把Web题附件解压到桌面,文件名是“新建文件夹(3)”,里面混着Pwn题和Crypto题的压缩包。比赛进行到一半,他找不到关键脚本,全队等他翻文件夹翻了二十分钟。后来我们定了个规矩:每个人下载完先按题目类别建目录,Web、Pwn、Reverse、Crypto、Misc五个文件夹,附件重命名带上题号。比如“Pwn-100-babyheap.tar.gz”,一眼就知道是什么。
网盘下载有个坑——限速。百度网盘非会员下载几十兆的附件能跑十分钟,比赛时间本来就紧,等下载等于白送分。战队通常凑钱开个超级会员,或者用直链解析工具。但直链工具经常失效,所以老队员会提前把常用工具和字典传到战队NAS上,比赛时直接从内网拉,速度跑满千兆。没有NAS的队伍就用阿里云盘或123云盘,至少比百度快。
国外比赛更麻烦。Google Drive大文件下载会触发配额限制,显示“当前无法查看或下载此文件”。这时候要么换账号,要么用rclone挂载团队盘。有次打DEF CON CTF预选赛,附件挂在Amazon S3上,需要AWS凭证才能下。队长翻出上届比赛留下的凭证,结果过期了,临时找主办方要新的,等了四十分钟。从那以后,我们赛前会专门测试下载链路,把每个附件的下载方式写成清单,谁负责哪块写清楚。
下载完不是终点。附件里可能藏着提示,比如压缩包注释、文件名里的Base64、甚至文件时间戳。有次Misc题给的是一张PNG,队员直接扔进StegSolve,翻了几遍没发现。后来另一个队员用exiftool看元数据,发现Comment字段写着“password is the md5 of filename”。文件名是“challenge_final_v2.png”,md5算出来就是flag的一部分。下载时不注意这些细节,题就卡死了。
战队内部传文件也有讲究。微信传压缩包会改后缀,QQ传大文件限速,最好的方式是自建文件服务器。用Python起个http.server,或者装个Filebrowser,队员在浏览器里直接拖拽上传下载。比赛时队长开个内网穿透,把文件服务器映射到公网,队员在外地也能拉。这比网盘靠谱,至少不会突然弹广告或者要求登录。
最后说个真实案例。去年打某CTF线上赛,Reverse题附件是个7z加密压缩包,密码在题目描述里写着“the password is the flag format”。我们以为是“flag{ ...}”,试了半天不对。后来发现描述里还有一行小字:“password is ctf2023”。下载时没人仔细看描述,全盯着附件去了。这事之后,我们规定下载完先读三遍题目描述,把关键信息截图发群里。
CTF比赛下载文件这事,看着简单,实际上考验的是战队的信息同步和流程管理。谁下载、存哪、怎么命名、如何共享,每个环节掉链子都会浪费比赛时间。工具可以现学,但习惯得平时养。