☰
ctfshow 36D杯实战复盘:CTF综合赛事的解题思路与工具链
2026/10/16 6:53:27 网站建设 项目流程

ctfshow平台每隔一阵子就会冒出一场让人想通宵的综合性赛事,36D杯就是其中比较典型的一场。如果你平时在ctfshow上刷题,应该能明显感觉到:这平台的题不是单纯堆知识点,而是把真实渗透里会用到的思路拆成一个个可落地的点,拼在一起考你。36D杯也不例外,它的题目覆盖面很广,从Web到Misc到Crypto再到简单逆向都有涉及,整体难度照顾了不同阶段的选手——既给新手留了能动手的入口题,也给老手准备了需要沉下心啃的硬骨头。

这篇东西适合三类人看:一是刚接触CTF、想找一场综合赛事检验自己水平的新人,二是已经在ctfshow上刷过不少题、想在比赛场景里练节奏感的进阶选手,三是想带团队或者组队参赛、需要了解整体题目分布和分工策略的队长。我会把自己在实际参赛和复盘过程中积累的经验拆开讲,包括赛前准备、题型分析、工具链搭建、高频考点以及最容易踩的坑,尽量做成一份能直接参考的实战笔记。需要说明的是,文章不会涉及具体题目答案,重点放在解题思路上——思路这东西,比答案值钱得多。

1. 赛事定位与核心思路拆解

1.1 36D杯到底考什么

36D杯是ctfshow平台上以综合命题为特点的一场主题赛事,名字本身没有太多特殊含义,可以理解为一场以特定代号命名的练兵赛。它和日常刷题最大的区别在于:日常题是一条路走到黑,你知道考点在哪、只需要把对应环节跑通;而比赛题往往把好几个考点串在一起,你拿到手的是结果,需要反推过程。

从题目分布来看,36D杯基本覆盖了CTF的几大常规方向:

  • Web:信息搜集、路由探测、代码审计、常见漏洞利用
  • Misc:文件分析、隐写提取、编码转换、流量包排查
  • Crypto:编码识别、古典密码、基础RSA、哈希碰撞思路
  • Reverse:简单逻辑还原、关键算法定位、patch思路
  • 杂项综合:多个小知识点组合成一道题

你会发现它并不过分依赖某一种高深技术,真正吃分的关键在于“能不能在有限时间内快速识别考点并调用对应工具”。换句话说,36D杯考的不是你背了多少漏洞,而是你在面对一个未知目标时,能不能快速建立假设并验证假设。

1.2 为什么这种综合赛值得认真复盘

我个人的体会是,平时在ctfshow上按分类刷题,容易形成“路径依赖”——看到PHP就知道去测代码审计,看到图片就去查EXIF,看到一串看不懂的字符就丢进解码工具。这些习惯本身没问题,但比赛题经常反着来:你以为是个Misc题,结果里面藏了个Web的逻辑;你以为要暴力破解,实际上是个编码陷阱。

36D杯这样的综合赛,恰好就是用来打破路径依赖的。它逼着你按真实战斗的逻辑走:先收集信息、再做判断、再动手尝试。很多人刷题时很强,一进比赛就慌,原因就在于刷题时你已经知道考点,比赛时什么都不知道。36D杯的题目设计思路恰恰会给你一些“伪装性”信息,让你误判方向,这时候信息收集能力和冷静判断的能力就比单纯的知识储备更重要了。

所以复盘36D杯,重点不是记住某道题考了哪个函数、哪个算法,而是建立一套属于自己的“识别-决策-验证”流程。这套流程在任何CTF比赛中都能复用。

2. 三大核心赛道的考察逻辑与应对思路

2.1 Web方向:信息搜集比漏洞利用更吃分

Web题在36D杯里基本是重头戏,占分比例通常最高。很多人在Web上容易陷入一个误区:拿到目标站点就开始乱试payload,看到参数就想着SQL注入、XSS、SSTI一股脑往上扔。这种打法在真实比赛中效率极低,因为现在出题人早就不会把漏洞挂在明面上了。

正确打开方式是先做完整的信息搜集,再做漏洞判断:

  1. 打开页面先看源码,注意HTML注释、隐藏表单、外部JS文件引用。
  2. 检查常用路径文件,比如robots.txt、备份文件、源码包,有时候网站泄露的备份压缩包本身就是突破口。
  3. 用目录扫描工具跑一遍路由,但不要无脑用大字典,先跑小字典快速定位,再根据返回状态码调整。
  4. 关注响应头里的字段,一些调试信息、框架版本号、中间件类型都会从这里暴露。
  5. 找到可疑端点后,先判断参数类型和服务端语言,再决定用哪类payload。

在实际参赛过程中,我发现一个高频考点是“弱口令配合信息泄露”。出题人通常会故意在某个不起眼的位置留一个账号密码的线索,比如源码注释里的测试账号、JS文件里的API接口地址、甚至图片的EXIF信息里藏了用户名。如果你信息搜集做得足够细,会发现很多漏洞根本不用费劲去绕,直接用留好的钥匙开门就行。

另一个常见套路是文件上传与文件包含的结合使用。这种情况下,出题人一般会限制上传文件的类型和内容,但可能忽略文件名后缀的解析差异,或者遗漏了某些可包含的点。我建议在遇到上传类题目时,先把允许上传的文件类型摸清楚,再测试文件名截断、空字节、大小写混淆、双重扩展名,最后再考虑上传配合包含路径的玩法。顺序不能乱,因为如果你先测了payload没效果,很可能只是前置条件没满足。

2.2 Misc方向:文件分析的基本功决定下限

Misc题在36D杯里往往是“看着简单但实际很磨人”的方向。很多Misc题的本质就是拆解,拆解的对象可能是图片、压缩包、音频、流量包,甚至是一段看起来毫无意义的二进制数据。

先说图片隐写,这是Misc里出现频率极高的考点。拿到一张图片,我习惯按固定顺序过一遍:

  • 用十六进制编辑器查看文件头尾,确认文件格式是否完整。
  • 搜索文件尾部是否有附加数据或字符串。
  • 用binwalk或foremost扫描是否存在嵌套文件。
  • 检查图片尺寸与真实宽高是否一致,如果发现图片被裁剪过,可能需要修改宽高值来显示完整内容。
  • 做一次LSB隐写检测,优先从最低有效位提取数据。
  • 检查EXIF信息,有时候作者会把备注写在里面。

再说压缩包处理,36D杯里经常出现伪加密或者加密压缩包。伪加密的本质是修改了加密标志位,但并没有真正加密文件内容。判断方法很简单:用十六进制编辑器打开压缩包,查看目录区中对应文件的加密标志字节,如果为奇数则是伪加密,改回偶数即可正常解压。另一个常见情况是暴力破解,这种情况我建议先试常见弱密码,再看看压缩包的文件名或注释里有没有线索,实在不行再上字典。

流量包分析也是Misc里的常客。拿到一个pcap文件,我会先做整体观察:看一下协议分布,HTTP和TCP占大多数,再追踪HTTP流看有没有上传下载动作、有没有可疑的字符串请求。如果流量包里有文件传输,直接把文件导出来分析。36D杯的流量题通常不会太复杂,核心就一句话:找到请求中的异常点。

2.3 Crypto与逆向:别被“高大上”的标签吓住

Crypto题对很多新手来说是心理门槛最高的一个方向,总觉得要懂密码学原理才能做。其实36D杯里的Crypto题,大部分没那么深奥,常见的考察点就三类:编码识别、古典密码、基础RSA变体。

编码识别是最容易拿分的一类。有时候题面给出一串字符,看起来像乱码,其实是Base64、十六进制、URL编码、Unicode编码的组合。我的习惯是先把字符串拿到工具里过一遍自动解码候选,再用眼睛扫一遍特征:全大写字母加数字可能是Base32,以=结尾可能是Base64,开头是%可能是URL编码,开头是0x可能是十六进制。多试几次,大部分编码题都能解开。

古典密码里典型的套路是凯撒、栅栏、维吉尼亚等。这些可以用在线工具或脚本快速跑,关键是拿到密文后先判断是单表替换还是多表替换,再决定用什么解。如果密文里有很明显的单词规律,往往就是移位密码,直接暴力枚举位移量。

RSA类的题目就要看基础参数了。36D杯里出现过的RSA题一般涉及小公钥指数攻击、共模攻击、模不互素等经典情形。新手不用慌,重点掌握两个动作:第一,拿到题目给的参数列表,先判断哪些参数是已知的、哪些是未知的;第二,识别参数特征,比如n很大但e很小,大概率是小公钥指数;两个n共享一个p,大概率是模不互素。这些特征识别出来后套用现成脚本,比试图从头理解整个算法要快得多。

逆向题在36D杯里通常不会出得太偏,常见的做法是给一个可执行文件,让你找到关键的比较逻辑或者序列号验证算法。我的思路是先运行一遍观察输入输出,再用反汇编工具定位字符串,找到类似“flag”“correct”“success”之类的关键提示,顺着字符串往上找对应的分支逻辑。大多数情况下,你不需要完全理解整个程序的运行流程,只需要找到验证条件,然后反推flag就行。

3. 参赛前的准备与全流程实操

3.1 工具链清单:少而精比多而全强

很多选手喜欢装一堆工具,真到比赛时反而不知道用哪个。我自己的原则是每类功能只留最好用的一个,比赛时闭着眼都能想起来。

先列一份我常用的清单,仅供参考:

  • 浏览器加开发者工具:日常浏览和调试必备,F12已经成为肌肉记忆。
  • 抓包工具:本地HTTP代理抓包工具,用来修改请求、重放、观察响应。
  • 十六进制编辑器:查看文件结构、修改图片宽高、处理压缩包标志位。
  • 隐写分析工具套件:binwalk、foremost、zsteg,分别对应文件嵌套扫描、隐写文件提取、LSB隐写检测。
  • 流量分析工具:Wireshark,主要用来追踪HTTP流和导出文件。
  • 综合编解码工具:CyberChef,这个工具对我来说是万能钥匙,编解码、哈希、正则抽取基本都能在里面完成。
  • Python环境:写一些快速验证脚本,尤其是处理RSA、异或、字节操作的时候。
  • 密码识别工具或脚本集:自己整理一个常用编码/古典密码脚本文件夹,比赛时能少走很多弯路。

工具不需要多,但一定要提前把环境跑通。比赛过程中最浪费时间的事情就是临时发现某个工具缺少依赖、某个脚本还有语法错误。我在赛前会把上述工具全部启动一遍,确认版本兼容性,再跑一遍测试样例,确保闭着眼都能操作。

3.2 解题节奏:先全扫再深挖

36D杯的题目数量一般在十几道左右,时间有限,如果每道题都从头啃到底,一场比赛根本不够用。我比较推荐“先全扫再深挖”的节奏:

第一阶段(开赛后前30分钟):把所有题目快速打开一遍,逐题摸一下入口。Web题打开页面看看源码,Misc题下载附件看看文件类型,Crypto题看看给的参数,Reverse题运行一下看输入输出。这个过程的目标不是解题,而是给每道题打一个标签:简单、中等、偏难。

第二阶段:把标签为简单的题目先解决掉。这类题通常信息很直白,考点单一,属于送分题,先拿到手再说。别觉得简单题浪费实力,比赛的分数是累积的,先把基础分拿下心理压力会小很多。

第三阶段:集中攻克中等题。这些题往往需要组合思维,比如Misc里藏着一个Crypto的编码、Web题需要结合信息泄露做利用。每道题设一个时间上限,比如40到60分钟,过了时间还没进展就换下一道,等脑子清醒了再回来。

第四阶段:难题放在最后。难题一般卡在某个关键环节上,如果赛时前中期没有思路,说明相关的知识盲区较大,短期内强行突破效率很低。把它留到最后的好处是,你已经解开了很多其他题,心态稳了,有时反而能灵光一闪。

这个节奏说起来简单,实际执行时需要很强的自律。很多人在第一道题卡了两个小时后整场比赛就废了,这是最常见的翻车原因。

4. 高频考点的实操要点与避坑手册

4.1 信息收集中最容易忽略的三个动作

36D杯的很多题,答案线索其实都在很显眼的位置,但选手因为紧张或者惯性思维,反而看不见。我总结出三个最容易忽略的动作:

第一,查看页面源代码的时候,不要只看代码本身,还要关注代码中的注释。有些出题人会故意在注释里留提示,比如“flag在admin.php”“密码是admin123”之类的。虽然这种做法看起来有点刻意,但在比赛场上就是会出现。

第二,扫描目录时不要只关心200状态码,还要留意301、302、403。这些状态码背后往往隐藏着需要特定条件才能访问的路径。比如403目录可能允许访问其下级文件,302跳转目标可能是登录接口。

第三,下载的每一个附件都要先算出哈希值并记录。哈希值一致说明文件是完整的,不一致说明传输过程中有篡改,这本身就是一个解题线索。别小看这个动作,在有些题目里,文件的哈希值或者文件大小本身就会参与flag构造。

4.2 常见误区:为什么你的payload总是打不中

在Web题里,最常见的问题是payload打了但没反应。我排查这个问题时有个固定顺序:

先确认目标确实存在漏洞类型,很多人在一个没有SQL注入点的地方拼命打SQL注入,当然不会有结果。如果目标是一个接口,先看看它的参数类型是不是JSON,是不是需要POST,是不是有鉴权头。用POST请求去测一个只接受GET的接口,注不注入都白搭。

再确认输入点是否被过滤了,常见的过滤手段是关键词替换和单引号转义。你可以先提交一个基础用例,比如一个单引号,看返回内容是否变化,来判断过滤是否存在。如果关键词被替换成空字符串,可以尝试双写绕过;如果被转义,可能要借助编码或者其他途径。

还要注意服务端语言的差异,PHP、Java、Python对相同payload的解析方式可能不同,有些payload只在特定语言下生效。看清题面提示、响应头的指印,能减少很多无效尝试。

Misc方向的常见误区是把简单问题复杂化。明明看到一串Base64,非要先丢进binwalk扫描,浪费大量时间。我建议拿到任何可疑数据后,第一步永远是用CyberChef过一遍自动解码候选,如果解码结果可读,那问题就解决了80%。只有当解码结果仍然不可读、或者看起来是一段二进制内容时,再考虑更为复杂的隐写提取。

4.3 压缩包伪加密与暴力破解的快速判断

处理加密压缩包时,我有一条很直接的经验:先看文件列表是否可见。如果压缩包里的文件名可以直接看到,但解压时需要输入密码,有很大概率是伪加密。如果连文件名都看不到,那才是真加密。

伪加密处理起来很简单,修改文件头中对应的加密标志位,或者直接用工具对压缩包重新压缩并取消加密。真加密的破解路径就比较有限了,先试试弱密码,比如admin、123456、flag提示相关单词,再试试从题目其他部分提取的字符串,最后才考虑字典爆破。

36D杯的题目中,伪加密的出现频率相当高,因为它是一个很适合“卡新手”的点:懂的人一分钟解决,不懂的人可能纠结一个多小时。所以我把这个知识点单列为一条经验,希望大家看见密码压缩包先别急着上爆破工具。

4.4 流量包里找flag的固定套路

流量分析题,我的固定套路是:

先统计协议层级,HTTP多还是TCP多,UDP多还是ICMP多。HTTP多就优先追踪HTTP流,TCP多就看看有没有连续数据段,DNS多就检查一下有没有野生的子域名查询。

然后追踪TCP流,在Wireshark里使用“追踪流”功能,把每个流的内容都翻一遍。重点关注流里出现的文件名、字符串、上传下载内容。如果某个流里出现了LFI、文件写入、命令执行之类的关键词,那这条流就是核心线索。

最后把可疑的文件从流量包里导出,按常规文件分析方法进行处理,直到看到一个可读的文本——那基本上就是flag所在了。

5. 比赛中的常见问题排查与实战建议

5.1 工具类问题:赛前解决90%,赛时解决10%

我见过太多选手在比赛时才发现自己的环境有问题:Python版本不一致导致某库导入失败、Burp Suite证书过期导致抓不到HTTPS包、binwalk版本太旧扫不出新格式。这些问题的特点是:一旦出现,会非常消耗比赛情绪。

预防办法就是在赛前对所有工具做一次“上线检验”:对Python环境安装常用依赖,对抓包工具确认代理和证书配置,对隐写工具跑一遍样例文件,确保输出正常。如果时间允许,最好准备一个便携工具包,把常用命令行工具放在一个目录下,比赛时直接调用。

比赛中如果还是遇到了工具问题,第一反应不是修复环境,而是先换工具绕过。这个工具不行就换下一个实现同样功能的工具,把问题记录下来,赛后再说。

5.2 思路类问题:换方向而不是换工具

当一道题卡了很长时间,人很容易陷入“死磕”状态:不断尝试同样的payload,不断看同样的文件,期望出现不同结果。这是一种思维定势,破解方法只有一个——物理切断当前思路,强制自己从另一个角度审视题目。

我常用的办法是找队友或者旁边的人,用一句话简述题目内容,然后听对方的第一反应。往往旁观者的第一反应会比你的死磕更快地指向正确答案,因为对方没有受到你已经建立的固定思路的影响。

如果是一个人参赛,那就强制自己离开座位,喝口水,再回来时问自己三个问题:题面里还有什么信息我没注意到?这道题最可能的考点是什么?我一直在找答案的方向上还是反复在无效折腾?

5.3 团队协作与台账管理

如果是组队参赛,我强烈建议开一个共享文档,每道题建立一个条目,记录以下信息:题目名称、分数、当前进展、尝试过的方向、失败原因、下一步建议。这个台账的价值在于避免重复劳动——队员A已经试过的方向,队员B不需要再试一遍。

另外,团队分工也很关键。Web强的优先去啃Web题,Misc擅长的去处理附件分析,Crypto和逆向可以安排给喜欢做算法的队员。但要注意,分工不是绝对的,如果某道题卡住了,其他方向的队员也可以来帮忙看,因为不同知识背景的人看到的盲区不一样。

5.4 心态管理:比赛比的不是单题难度,是总分

最后想聊聊心态问题。CTF比赛很容易让人上头,一道题解开后的兴奋感会让人忽视其他题目,一道题卡住时的挫败感又让人不想继续。我打了这么多场比赛,最大的体会就是:比赛比的是总分,不是单题难度。

如果一道Web题卡了40分钟,最好策略是暂时放下它,去做一道Misc送分题,把分数拿到手,再回头继续Web。这种节奏转换看似浪费时间,实际是最高效的:它让你的大脑从高压状态中解脱出来,反而更容易在回来后发现之前遗漏的线索。


说点个人经验。我在36D杯之后复盘时,最大的收获并不是解开了哪几道题,而是意识到自己在信息收集环节的粗糙程度——很多题其实线索就在眼前,但因为我扫得太快、看得太急,把它漏掉了。从那以后,我给自己规定了一个强制动作:每拿到一个新目标,先花五分钟只看不做,把能看到的信息全部记录下来,再开始尝试动手。节奏放慢一点点,效率反而翻了一倍。

最后再分享一个小技巧:比赛结束后,无论成绩如何,用一小时把所有题目重新做一遍,写下每道题的考点和你踩坑的原因。这个习惯坚持几次之后,你会发现自己比赛时的“手感”明显不一样——不是因为你懂得更多了,而是因为你更知道自己容易在哪里跌倒。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询