☰
CTF拿不到高分?吃透评分规则与题型策略,把会做的题稳定变现为分数
2026/10/7 10:28:32 网站建设 项目流程

CTF是最近搜索榜上的常客,每一次大赛结束,都会冒出一大批“为什么CTF总是拿不到高分”的疑问。我自己打了几年CTF,从最开始被公开题单血虐,到后来能在个人赛和团体赛里稳定拿名次,最大的转折点不是刷题数量变多了,而是想明白了一件事:CTF拿分,比的不是你“会多少”,而是你“能把会的东西稳定变现成多少分”。这篇东西不聊虚的,就把我在各类赛事里反复踩过的坑、用过的提分策略拆开揉碎,尤其适合那种感觉自己什么都学过、一道题也能做一点,但总分始终卡在中游的选手。

1. 分数上不去的根本原因:先搞懂CTF的评分逻辑

很多人对CTF的认知停留在“解出题目就有分”,但实际比赛的评分机制远比这个复杂。动态计分、一血奖励、flag提交格式、卡题时间,这些规则细节每时每刻都在影响你的最终分数。不先把评分逻辑吃透,你再怎么刷题,分数都会像被什么东西无形中压住一样。

1.1 动态计分与一血奖励:规则会直接改变你的做题优先级

先看最常见的动态计分制:一道题的分值会随着解出人数增加而下降,先解出的人拿到的分数远高于后解出的人。这意味着“做题顺序”本身就是一种策略。很多选手习惯从第一题按顺序做到最后一题,这恰恰是最吃亏的做法。比赛刚开始时,大家都涌向最简单的签到题,你就算解出来,分也被稀释得差不多了;反而是一些看起来冷门的题型,因为解的人少,分数长期保持高位。

我的建议是,比赛开始后的前20分钟不要急着交题,先把所有题目通读一遍,做一个快速分类:哪些是签到题,哪些是看着眼熟但需要时间验证的题,哪些是完全没头绪的题。然后优先去啃那些“少有人碰但你有思路”的题目,争取拿一血或前排分数。一血奖励通常意味着额外积分加成,在个人挑战赛里,这个加成往往能直接把你的排名拉高两到三位。2025年冬季个人挑战赛里,有个热词叫“猛攻”,其实就是这个意思:不是盲打,而是开局就精准锁定那些分值高、竞争小的题目猛攻。

不过也要提醒一句,动态计分并不是所有比赛都默认开启。有的数据安全赛道、实战演练类赛题会采用静态分值,甚至按解题步骤给分。报名后第一时间看清比赛规则,比埋头做题重要得多。我把这个叫“规则层面的信息收集”,它对策略的影响不亚于掌握一个漏洞利用技巧。

1.2 会做却丢分的头号杀手:flag格式与提交规范

你发现了一个隐藏字符串,看起来就是关键信息,兴冲冲复制提交,结果平台告诉你“flag格式错误”,然后你开始怀疑人生。这种情况我见得太多了,自己也栽过。CTF的flag通常有固定格式,比如flag{...},但不同比赛有完全不同的前缀,有的用ctf{...},有的用polar{...},还有的干脆就是一段不带花括号的随机字符串。

更要命的是大小写和字符类型。有的flag区分大小写,花括号内部还可能出现-、_、空格这些肉眼容易忽略的字符。你在终端里复制时,如果贴到 shell 里被自动转义,或者从 PDF 题目说明里复制时混入了不可见字符,提交上去就是错。最稳的做法是:先把原始字符串保存到一个纯文本文件里,确认前后没有多余字符,再手动加上前缀后缀。不要肉眼比对,你可以用xxd或者od -c看一下字符串的真实字节内容,防止中间夹了什么看不见的东西。

还有一类题狡猾在“多个字符串里只有一个是真flag”。比如 Misc 题里,你从图片 Exif、压缩包注释、流量包里各挖出一串疑似关键信息,这时候需要靠题目上下文判断。像“what is the keyword”这种题,考点就是让你在干扰项里找出真正被要求的关键字,而不是把每段字符串都试一遍。盲目批量提交不仅浪费时间,还可能触发平台的提交频率限制,严重时会被临时封禁提交接口,那才叫冤。

1.3 卡题时间与精力分配:取舍才是拿分核心

我见过太多选手的表现是:签到题做出两道之后,在一道中等偏难的题上死磕三个小时,最后也没解出来,总分几乎原地踏步。CTF 的时间是硬约束,尤其是个人挑战赛,通常只有8到12个小时。这个时间段里,两件事属于高优先级的保分动作:一是快速把签到题和低难度题全部拿下,二是每隔一段时间把每道题“卡住的位置和已经完成的思路”记录下来,方便回来后断点续做。

我给自己设定的规则很简单:任何一道题,连续尝试90分钟还没有实质进展,就降级为“挂机题”。挂机不是不管,而是利用碎片时间去搜资料、试小工具、换思路,但不再占据完整的大块时间。等到其他能做的题都清完了,再回头集中火力处理。这样做的好处是,即使挂机题最终没解出来,你也不至于因为死磕而错过其他五道题的可拿分数。

组队赛里时间分配更讲究。队伍里三个人分别负责 Web、逆向、密码,这不是新鲜事,但很多队伍忽略了一个问题:负责 Misc 的人往往是全队最闲的,因为 Misc 题的做题节奏是“前期收集、后期解谜”,前期完全可以让每个队员都顺手看一眼流量包和图片附件,把线索汇总到一个共享文档里。线索共享比面对面对答案高效得多,千万别低估高效协作对总分的影响。

2. 为什么你在Web题上总是空手而归

Web题是国内CTF出题量最大、分值分布最密集的题型,也是大多数新手主攻的方向。但主攻不代表拿分,很多人把网上那些漏洞原理背得滚瓜烂熟,一上赛场还是对着题目发呆。问题出在哪?我总结了几个高频障碍点。

2.1 只会背漏洞原理,不懂真实业务逻辑

SQL注入、XSS、CSRF、SSRF,这些名词你问十个人,九个能说出一串原理。但 CTF 的 Web 题从来不是把教科书上的漏洞原封不动地摆给你看,它一定会把漏洞埋在一个具体的业务逻辑里。比如一个“员工查询系统”,你直接去试' or 1=1,可能什么都触发不了,因为查询参数经过了后端封装。这时候你要做的是先去读懂页面的行为逻辑,再思考这个逻辑在哪个环节可以被异常输入打破。

我平时练题时有个习惯:遇到一个 Web 题,先不看请求包,也不测注入点,而是花五分钟把整个业务流程捋一遍。哪些页面是公开的,哪些需要登录,哪些参数会回显到前端,哪些接口会返回完整报错。这么做看起来很慢,但能让你避开“对着空气试 payload”的窘境。真实比赛中,绝大多数注入点都藏在看似无害的小功能里,比如搜索框、排序参数、导出按钮。学会从业务功能反推漏洞位置,才是 Web 解题的地基。

另外,很多综合类竞赛里的数据安全赛题,会把 Web 漏洞和数据防护结合到一起。比如要求选手先通过 Web 层漏洞拿权限,再处理对应的加密数据库文件。这时候如果你只会 Web 不会数据处理,同样只能拿一半分。别再把 Web 题当成孤立的注入题来练,业务链路越长,得分点越多,失分点也越多。

2.2 命令执行与文件上传的高频考法,藏着大量细节

命令执行是 CTF 里经常出现的考点,很多题目直接用system、exec、passthru这些函数触发,题目文字描述里甚至明摆着写着“这是一个可以执行命令的页面”。但为什么你还是拿不到分?因为考点早就从“你会不会触发命令执行”变成了“你能不能绕过过滤”。

常见的过滤套路包括:过滤关键字、过滤空格、过滤特殊符号、过滤斜杠、甚至把常见系统命令全部拉黑。如果你不知道要绕过,可能连最简单的cat flag都打不出来。这里我分享一下我的思路:第一步,手工提交一个最简单的最小 payload,比如ls,观察回显,判断到底是完全无回显、还是回显被过滤了;第二步,试探过滤规则是黑名单还是白名单,黑名单意味着你没试过的字符可能都能用,白名单意味着必须精确构造合法输入;第三步,针对过滤规则选用对应编码或拼接方案。整个过程要有步骤,而不是键盘上乱敲。

再来看上传题。很多新手对上传题的理解还停留在“传一个一句话木马然后连接”,但现在的比赛早就不这么玩了。常见的考法有:文件名二次渲染绕过、图片马绕过、条件竞争上传、.htaccess切换解析方式、Nginx配置错误导致的解析漏洞。以“ctf nginx安全加固题”为例,考点往往不是让你上传恶意文件,而是发现Nginx配置文件里某个 location 指令配置不当,导致可执行脚本被直接下发。这类题考察的是你对 Web 服务本身的理解,而不是漏洞利用工具链。老老实实把上传流程拆开,分清“前端校验、后端校验、解析层逻辑、存储层逻辑”各自的位置,你就能避开大多数脑补型错误。

2.3 信息收集能力被严重低估:源码、备份文件与隐藏接口

“ctf git泄露练习题”在热搜里持续有热度,说明这个点已经成为入门必学。Git 泄露的本质是开发者在部署时没有移除.git目录,攻击者可以通过特定工具恢复出源码历史版本,找到注释里残留的密码、接口路径甚至 flag。但我发现很多选手虽然知道 git 泄露,却不知道变体:.svn泄露、.DS_Store泄露、www.zip备份文件泄露、index.php.bak备份文件泄露,这些都是同一个思路——代码资产被错误地留在了公网目录下。

Web 题拿不到分的另一种情况是,题目入口藏得太深。这年头没有哪道 Web 题会把入口直接写死在导航栏里,你至少要扫一下目录结构,看看 robots.txt,看看前端 JS 文件里有没有被注释掉的接口,再看看网络请求面板里有没有异常数据包。所有这些信息收集动作加在一起,往往就能拼出一条通往 flag 的路。

我自己踩过的最蠢的坑,是把大量时间花在爆破登录口令上,结果发现题目的突破点只是前端 JS 里一个写死的隐藏参数。从那以后,我要求自己遇到任何 Web 题,前十分钟只做信息收集不碰漏洞探测。这个纪律让我少走了很多弯路。

2.4 拿到源码却不知道怎么读:缺少从flag倒推的思路

Web 题做到中后期,很容易碰上“源码给了你却无从下笔”的情况。有的赛题直接把整套网站源码打包给你,让你去找触发点。这时候如果你还像做渗透测试那样拿扫描器一顿扫,基本等于浪费人生。正确的姿势是“从 flag 倒推”,先搜索源码里所有读取文件、输出文件内容、拼接路径的函数,再看这些函数的调用链能否被外部输入影响。只要输入可控,输出回显,这就是一条潜在的拿分路径。

如果源码是用 PHP 写的,优先关注include、require、file_get_contents;如果是 Java,优先关注文件下载和模板渲染接口;如果是 Python,优先关注subprocess、os.system和模板注入点。不要试图一次读懂整个项目,你只需要找到一条从用户输入到敏感输出的可达路径。这个思路和日常做代码审计的思路高度一致,练多了之后,你会发现 Web 题变得越来越像一个逻辑解谜游戏,而不是猜谜游戏。

3. Misc、Crypto、Reverse与Pwn:不同题型的高分障碍

很多人的练习结构严重偏科,Web 题刷了一堆,其他题型干脆碰都不碰。但事实上,Web 是竞争最激烈、大神最多的方向,反而是 Misc 和 Crypto 的入门门槛低、稳定拿分概率高。如果你一直总分不高,大概率是因为你把最宝贵的时间和精力全押在了最难拿分的题上。

3.1 Misc:流量分析、隐写与文件分析,细节决定成败

Misc 杂项是 CTF 里最“看天吃饭”的题型,这里的“天”就是你平时积累的敏锐度。热搜里的“ctf usb流量分析脚本”就是一个典型例子。USB 流量包里藏着键盘击键信息,通过解析 USB 协议里的键值对应关系,可以把每一次按键还原成字符,最终得到一段文字。听起来很玄,其实脚本逻辑固定:先提取URB_INTERRUPT数据包,过滤出Leftover Capture Data字段,再把键值映射为 ASCII。很多这类脚本网上都有现成的,但你需要理解的是“数据在哪一层、哪个字段”,否则题目把鼠标流量和键盘流量混在一起,你就会无从下手。

图片隐写就更常见了。一张 PNG 看起来正常,但文件大小比同尺寸图片大很多,八成藏了附加数据。这时候先跑一下文件识别,看看是不是多个文件拼接,再用十六进制工具查看文件尾部是否有其他文件头。有些题还会在图片的色道里写入信息,也就是 LSB 隐写,这类题需要提取最低有效位再转成图片或文本。整个流程不难,但每一步都要细心。我见过太多人栽在“知道是隐写,却不知道先识别文件类型”这种初级操作上。

值得单独说的是压缩包伪加密。Misc 题里经常给一个带密码的压缩包,实际上密码校验位被修改过,所谓密码根本不存在。用工具打开压缩包后,如果你发现文件头里加密标志位异常,直接改标志位就可以无损解开。这种题在热身阶段出现频率很高,属于稳定的送分题,前提是你对各种压缩包格式的二进制结构有一定了解。别总想着暴力破解,CTF 的出题人没那么多闲心让你跑字典。

3.2 Crypto:只会调工具不理解数学原理,遇到变体就懵

“ctf密码学”这个词条下面,最常见的提问是“RSA这题脚本跑出来不对,为什么?”答案十有八九是:你只会把参数塞进脚本,但根本不理解脚本里每一步在干什么。RSA 的常见考点无非是低加密指数、共模攻击、dp 泄露、已知部分明文,这些攻击脚本网上全有,但比赛时出题人会把参数改得稍微刁钻一点,比如多一个字节的填充,或者把n换成 64 位让你本地分解,很多人就懵了。

我的建议是,别急着收藏脚本,先花一下午把 RSA 的核心数学过程写一遍:选两个素数、算欧拉函数、取公钥指数、算私钥指数,然后用 Python 的pow函数完成加解密。当你亲手实现过一次完整的 RSA,再去看攻击脚本里的公式,很多抽象符号都变成了直观的操作。比如共模攻击,本质上就是利用同一个n下两个不同公钥对同一条明文加密的数学关系,通过扩展欧几里得算法把明文算回来。理解了这一层,脚本是你的助手,而不是你的拐杖。

对称加密方向也要补基础。AES 的 ECB、CBC 模式有什么区别,初始向量在哪里,填充方式是什么,这些知识点在比赛里几乎一定会碰到。有的题目会把密钥藏在流量包里,有的把初始向量写在程序注释里,如果不懂加密模式,你连哪个数据该用哪个参数都不知道。学密码学没有捷径,老老实实补一下数论和分组密码的基础,比背一百个攻击脚本都管用。

3.3 Reverse与Pwn:逆向入门最怕的是“还没开始就放弃”

逆向工程的入门曲线确实比 Web 和 Misc 陡峭,但没到不可攀的程度。我看到的问题是,很多新手看到一道 Reverse 题,第一步就想着打开 IDA 按 F5,看到一堆变量名就开始头晕。其实拿到逆向题,正确的顺序是先做静态侦察:运行file查看文件类型,运行strings提取可见字符串,观察文件是否有壳,再决定要不要动态调试。很多入门题根本不需要真正逆算法,关键字符串就直接暴露了 flag 或者算法特征。

比如有一些题目会在代码里把字符串做了简单异或处理,你只需要通过调试器在内存中观察解密后的数据,就能直接看到 flag。这时候你需要的能力不是“读懂整个程序”,而是“找到关键校验函数,然后观察它怎么处理输入”。建议先学会用动态调试器下断点、看寄存器、改跳转,这些基本功练熟之后,你可以跳过繁琐的算法逆向,直接走“patch 跳转”路线把校验绕过,同样能拿到分。

Pwn 高门槛是公认的,但我依然建议新手接触一下格式化字符串漏洞。这类题的原理比较固定,通过格式化函数泄露栈上的数据,甚至写入任意地址。你不需要精通堆利用,先搞懂格式化字符串的%n、%x这些参数怎么控制输出,就能在不少新手 Pwn 题里有所收获。青少年CTF里的题目多数也是这个思路。Pwn 的分数高,提前耕耘一点,性价比远超你在 Web 里跟一群大神抢同一道难题。

4. 从“会做题”到“能拿分”:一套可复用的练习框架

说到这,你应该会发现一件事:CTF 拿不到高分,很多时候不是因为你不够聪明,也不是因为你刷题少,而是你的练习方式本身太低效。接下来我给出一套我自己验证过、且新手可以照做的练习框架。

4.1 建立个人知识库与复盘模板,别让刷题变成重复劳动

我见过最离谱的练习方式是:今天做一道 Web,明天看一篇逆向教程,后天又去跑一个流量包,看起来天天在学习,实际上知识碎片化到完全没法互相支撑。真正有效的做法,是建立自己的知识库,按题型维护笔记。每做完一道题,把解题链路完整记录成有结构的文档:题目类型、搜索到的关键线索、用到的工具、命令、卡住的环节、最终突破点。一条都不许少。

我自己常用的模板包含几个固定字段:题目名称、对应赛事、难度评级、相关考点、工具清单、完整解题步骤、耗时、出错点。其中“出错点”是最重要的,因为那才是真正属于你的经验。比如“原来流量包里的 USB 键盘数据需要反转字节序”“原来上传题的后缀名检测是黑名单,可以上传.phtml绕过”。这些细节书上不会系统写,只能靠自己复盘沉淀。建议每场比赛结束后,花一个晚上把做过的所有题整理进知识库,相信我,这个习惯坚持半年,你的进步速度会明显快过同阶段的其他人。

4.2 模拟赛训练与时间管理,用真实规则倒逼习惯

平时练习时不能只做题,还要定期给自己安排“模拟赛”。你可以在本地搭建赛事平台,导入公开的题目集,用一个完整周末的时间模拟赛程。模拟赛的核心不是做题,而是练习时间分配:前 20 分钟通读题单、标记题目难度,前 1 小时扫掉所有签到题,中间 4 小时集中解决中等题,最后 1 小时复盘和补漏。整个过程戴好耳机、屏蔽外界干扰,手机放到拿不到的地方,就像真的在参赛一样。

为什么要这么大动干戈?因为真实比赛时的紧迫感会放大你所有的坏习惯。平时做题你可以慢慢试错,比赛时你不行;平时你可以卡住了就去看题解,比赛时你看不了。模拟赛就是提前暴露这些问题的机会。我建议每个模拟赛阶段都记录两个数据:一是每道题从着手到放弃之间用了多长时间,二是最终有效提交的题目比例。如果每次模拟赛的提交率都不高,就说明你的卡题时长设置不合理,下次把切换题目的时间点再提前一点,宁可多留时间处理简单题,也别让难题吞掉整个下午。

4.3 基于个人特点的组队策略与分工,别让团队赛变成三人混战

个人挑战赛考验的是全能能力,组队赛考验的则是岗位分工与协同效率。在组队赛里,最忌讳的情况是三个人表面上各负责一块,实际上遇到难题时集体围观同一道题,另两边的题目全被晾着。

我会把团队分工细分成“主攻手”和“游走位”。主攻手分别盯 Web、Crypto、Reverse/Pwn,这是阵地。游走位专门负责 Misc 和情报收集,同时承担所有题目的线索归档。比赛初期,游走位要把大把时间花在信息收集上:谁发现了一个备用入口、谁在流量包里看到一段可疑数据、谁确认了 flag 格式,全部记录到共享文档。比赛中期,某个主攻手卡住时,游走位可以顶上去帮忙查资料、看校验逻辑,而不是坐在那里刷手机。大多数队伍最终的排名差距不是来自选手个人技术,而是来自线索在队友之间传递的效率。你一边做题一边还要口头解释思路,队友再手忙脚乱找工具,这种配合再怎么强的个人能力也发挥不出来。

5. 常见丢分场景与涨分经验速查

最后这部分是实战经验速查,你可以把它当成一份随身清单。每次比赛结束后,对照着看自己中了哪几条,下次比赛前优先修正最严重的那条,分数提升会非常明显。

5.1 一张表排查你的典型丢分场景

丢分场景可能原因排查思路涨分建议
明明解出了题却提交失败flag 格式错误、大小写错误、包含转义字符用xxd确认字符串原始字节,核对赛事公告的格式定义把 flag 保存到本地文本文件再提交,避免手输
分数一直偏低但做题数量不少动态计分规则下做题顺序不合理检查自己是否习惯性顺序做题,忽视冷门题型开局通读题单,优先做冷门但有思路的题
Web 题试了半天没有回显没弄懂业务逻辑就开始测 payload先花十分钟梳理功能点,再定位可能出问题的参数养成“先逻辑、后漏洞”的做题习惯
拿到源码不会读缺少代码审计的基本路径从读取文件、输出文件内容的危险函数入手倒推练习从 flag 倒推到输入点的代码审计方法
命令执行题被过滤规则困住没判断过滤是黑名单还是白名单手工提交最小 payload 观察回显差异系统整理各类绕过方案,按过滤类型分类记忆
流量包不会分析不知道数据在哪个协议层先按协议分类,过滤出可疑的主机通信数据专门练习 USB 键盘流量和 HTTP 明文流量的解析
题目做不完,总分上不去在难题上耗时过长记录每道题的卡点时间,超时就挂机训练 90 分钟换题节奏,保证保底分
组队赛沟通成本太高线索没有结构化记录建立共享文档,谁发现线索谁立刻记录设置游走位专门做线索归档与传递

5.2 关于心态、节奏和备赛的三条经验

第一点想说的是“放下全拿的执念”。CTF 比赛的题量设置通常就是让你做不完的,拿满分的选手要么是队伍里的大神带飞,要么是题目难度对新人不友好。你要做的不是每道题都拼命,而是在有限时间内拿到尽可能多的分。把目标从“解出难题”调整为“拿满可得分”,心态会稳很多,分数反而不低。

第二点是“把签到题当成战略资源”。有些选手觉得签到题太简单,故意跳过,想直接从中等题开始表现自己。但从计分角度看,签到题的确定性收益极高,而且是唯一一个你闭着眼睛都能拿到的分。我认识的稳定高分选手,没有一个会放弃签到题。先把签到题全部清完,把保底分装进口袋,再去冲中等题时你的心态完全不一样。

第三点是“比赛过程中所有半成品思路都要记录”。有时候你在一道题上花了两个小时,虽然没有完全解出来,但你已经确定了三个关键线索:某个参数可控、某个字符串是加密后的数据、某个接口返回了异常内容。这些线索如果你不记录,等比赛后半段队友提醒你时,你可能已经忘了。准备一个简单的比赛日志,每十五分钟更新一次卡点状态,能让你在最后冲刺阶段迅速接上之前的思路。我个人的感觉是,稳定拿分和偶然拿分之间的差距,往往就是这一步。

说到底,CTF 拿高分这件事,并没有多少人是因为智商被碾压落败,更多是输在策略、细节和复盘机制上。把评分规则吃透,把每种题型的高频考点和常见失误点刻在脑子里,再配合一套纪律化的训练节奏,哪怕你现在还是新手,下一个赛季的分数也一定会给你惊喜。

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

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

立即咨询