
CTF圈子里混久了你会发现一个很有意思的现象新手想入门第一件事永远是“找个平台练手”但搜来搜去要么是国外的平台顶着全英文界面劝退要么是某个比赛官网只能打比赛的不能日常刷题。我这两年带过不少新人被问得最多的就是“bugku和qsnctf到底选哪个”这俩平台也确实是在国内CTF学习者嘴边出现频率最高的两个名字。先说结论两个平台我都重度刷过bugku适合那些想体系化入门、按方向逐个击破的人qsnctf则更适合目标明确、想通过实战检验自己、甚至冲着比赛去的选手。但如果你以为它们俩只是“题库不同”那就理解浅了。这篇文章我想把这俩平台的题目风格、刷题路线、常见题型套路、以及我踩过的那些坑从头到尾捋一遍特别是那些你在题目页面看不到的“潜规则”能给正准备入坑的人少走很多弯路。内容不算短但每一段都是我从一个Web题死活过不去、到后来能稳定在比赛中拿分这个过程中攒下来的经验希望能帮你把刷题这件事做得更高效。1. 初识两个平台bugku和qsnctf到底在刷什么1.1 bugku的平台定位与题目风格bugkuBugKu CTF在国内CTF学习者圈子里算得上是老牌平台了最吸引人的一点是它的题目分类非常完整从Web、Reverse逆向、Pwn二进制漏洞利用、Crypto密码学到Misc杂项几乎是照着大学里网络安全专业的课程体系来铺的。我个人的感受是bugku的题目设计有一种很明显的“教学导向”。每一道题考察的知识点相对单一比如有的题就只考SQL注入的报错回显有的题只考文件上传的黑名单绕过不会像真实比赛的题目那样把好几个漏洞点叠在一起给你玩“套娃”。这对入门者是极大的友好因为你做不出某道题时能很清楚地知道自己到底是哪块知识点缺了。在bugku刷题最经典的打开方式是“按分类刷”也就是先死磕Web把Web题全部过一遍再去碰Misc和Crypto最后才考虑Reverse和Pwn。原因很简单Web和Misc对新手来说正反馈来得最快而且需要的前置知识相对独立而Reverse和Pwn一上来就要接触汇编、调试器甚至内核基础很容易挫败。1.2 qsnctf的平台风格与出题逻辑qsnctf青少年网络安全竞赛平台和bugku最大的区别在于它更强调“从解题到比赛”的过渡。整个平台带有浓厚的赛事服务属性周期性会有线上挑战赛题目会模拟真实攻防或者接近一线CTF比赛的难度梯度。qsnctf的题目给我最深的印象是“出其不意”。它很喜欢在常规考法里加一点点变形比如一道签到题不是直接给你一串flag而是要先从网页源码的注释里找到一段编码解码后又是一段坐标最后根据坐标拼出flag。整个过程不需要高深的技术但非常考验你“见招拆招”的临场思维。如果说bugku像是教科书配套的章节练习那qsnctf就更像单元测试和期中考试。你可以在bugku学好知识点然后去qsnctf检验自己碰到变形题时能不能活学活用。这两个平台不是二选一的关系而是先后递进的关系。1.3 两个平台的核心差异对比我根据自己的刷题体验整理了一张对比表方便你根据自己当前的情况做选择对比维度bugkuqsnctf平台定位教学刷题、体系化入门赛事训练、实战检验题目分类Web、逆向、Pwn、Crypto、Misc很齐全分类清晰但更侧重综合实战题难度曲线平缓从零基础到进阶都有梯度明显部分题目偏竞赛化适合人群刚入门的初学者、想系统学某方向的人有一定基础、想打比赛或检验水平的人题目标签与Writeup社区Writeup很多查答案方便Writeup相对少一些更考验独立解决能力赛事属性偶尔有活动以刷题为主周期性比赛多氛围更像竞技场有一点需要提醒两个平台的社区活跃度和Writeup数量是动态变化的上面这张表是基于我长期使用体验的总结可能会随时间变化。不过这并不影响选型逻辑学习期主攻bugku检验期转战qsnctf这个思路基本不会出错。2. 刷题路线规划别一上来就乱点鸳鸯谱2.1 新手第一周的正确打开方式我最常看到的新人误区是注册当天就冲进Pwn题被一堆寄存器、栈溢出搞到怀疑人生第二天就放弃了。刷CTF不是打怪升级不是“越难的题越能锻炼人”而是“能持续给你正反馈的题才能让你坚持下去”。如果你是零基础或者刚接触CTF不久我建议第一周只做两件事。第一在bugku把Web方向里涉及“GET/POST传参”的题全部刷一遍这些题会逼你学会用Burp Suite抓包改包也会让你搞清楚HTTP请求最基础的结构。第二把Misc方向里所有和“图片隐写”相关的题过一遍因为这些题不用写代码靠的是细心和工具使用几乎不需要编程经验。第一周不要碰Reverse和Pwn也不要急着看高手的Writeup。你可以先自己尝试2到3个小时实在没思路再去看看完之后必须自己重新做一遍不要出现“眼睛会了手不会”的情况。2.2 Web方向是大多数人的主战场既然绝大多数刷题者的目标是入门Web安全那就要清楚Web方向的题目类型其实高度集中。我刷了几百道Web题后总结了一下真正高频出现的考点就那么几类SQL注入、XSS、文件上传、命令执行、代码审计、反序列化、SSRF和XXE。在bugku上Web题会把这几个考点拆得很细。比如SQL注入它会单独出一道“数字型注入”、一道“字符型注入”、一道“报错注入”、一道“布尔盲注”让你把每一种注入类型都练到手熟。这种拆解式的训练方式能让你在短时间内把某类漏洞的所有变种都过一遍建立起肌肉记忆。到qsnctf之后同样的知识点会被包装得更隐蔽。比如它会在一道看似是登录功能的题里同时藏了SQL注入和弱口令两个考点你先要用弱口令进入后台然后才在后台某个功能点里发现注入点。这种综合度就是在提前模拟真实场景。2.3 从Misc到Crypto的过渡思路Misc方向经常被新人当作“福利区”因为很多初级的Misc题真的就是看看图片属性、解个Base64、binwalk分离一下文件。但我劝你千万别小看这个方向Misc是训练“信息收集能力”的最佳场所。我做题时候的一个体会是Misc题本质上是在考“你能否注意到别人注意不到的细节”。比如图片的LSB隐写需要用工具提取GIF动图里一帧一帧藏着二维码甚至音频文件的频谱图里画着flag。刷Misc的过程会帮你养成一种“一切皆可可疑”的思维习惯这种习惯在后期打比赛时非常有用。Crypto方向则建议放到刷了一两百道题之后再开始。因为密码学题在CTF里考的是“识别密码类型调用现成工具”的能力两者都需要你已有一定的编码敏感度。你至少要能一眼分辨出Base64、Hex、URL编码、凯撒密码的变形看到一串字符能下意识判断“这大概是哪种编码”这些敏感度不从题里练出来光看书是记不住的。3. 高频题型原理拆解与实操笔记3.1 SQL注入的黄金三连判断、注入、绕过先说SQL注入因为它是最经典的Web漏洞也是平台里出现频率最高的考点。看到一个参数我从来不直接上sqlmap而是先按“黄金三连”手动确认一遍。第一步是判断是否存在注入。最常见的招数是输入单引号看报错或者输入1 and 11和1 and 12对比页面变化。第二步是确定注入类型数字型还是字符型闭合方式是什么。第三步才是根据回显情况尝试注入。有一个细节很多人会忽略报错的SQL语句本身也在泄露信息。MySQL的报错会直接告诉你语法错误的位置由此可以推断出查询语句的大致结构这是你构造下一步payload的基础。绕过技巧是比赛中真正拉开差距的地方。空格被过滤就尝试用注释符/**/代替关键字被过滤就尝试用大小写变体、双写关键字甚至内联注释/*!...*/。这些技巧看起来简单但如果你不知道它们的存在做题时会卡到怀疑人生。我建议你准备一个自己的“绕过速查表”每遇到一种过滤方式就记下来慢慢就会形成条件反射。3.2 命令执行类题目的三板斧命令执行题在bugku和qsnctf里都属于“看着难、上手后其实很有套路”的类型。它的核心场景是后台代码把用户的输入拼接到系统命令中执行比如ping功能、写shell的功能。这类题我一般固定用三板斧。第一板斧是看“符号”分号;、管道符|、与符号、换行符%0a逐个试过去看哪个符号能让系统执行多条命令。第二板斧是看“空格”很多题目会过滤空格这时候要用${IFS}、$IFS$9或者来替代。第三板斧是看“输出”如果命令执行了但结果不显示最常见的方式是把结果重定向到文件然后再通过Web访问那个文件或者用curl配合外带平台把数据传出来。我见过太多人在命令执行题上栽跟头不是因为不会写payload而是因为没理解后台代码到底过滤了什么。建议你在做题时先在目标机器上试一下ls能不能执行再试ls /能不能执行通过逐个尝试来摸清过滤规则的边界这比盲目猜payload高效得多。3.3 文件上传黑名单逻辑是核心考点文件上传漏洞在CTF中更多考察的是“黑名单思维”也就是你要能推测出后台用了什么样的黑名单过滤方式。有的过滤了.php后缀那你试试.php3、.phtml、.php5有的只过滤了后缀那你试试大小写绕过.pHp如果上传目录可执行还可以试试上传.htaccess来让图片解析成PHP代码。在bugku的upload系列题目里几乎每一道就是专门针对一种绕过的。做这些题时我建议你养成一个习惯每上传一个文件就用Burp Suite抓包看一眼响应包里的提示信息。很多题目的后端会用JSON返回“文件类型不允许”或“后缀名不正确”的提示这里面的关键词能直接告诉你过滤的是什么。而到qsnctf的比赛题里文件上传很少单独出现通常是和其他漏洞打配合的比如上传点本身存在路径穿越控制上传路径后结合日志包含来getshell。遇到这种综合题反而要把心态放平一步步来先找到上传点再看看能不能改上传路径最后才考虑怎么让上传的文件被解析执行。3.4 密码学题型识别和脚本齐头并进密码学题在CTF里被我划分为“送分题和送命题的混合体”。送分的是那些直接告诉你加密方式的题比如题目给了你一段看似随机的字符串并提示“RSA”那你只需要用脚本跑一下送命的是那些只给你一段密文让你自己去猜是什么加密。我刷了这么多密码学题最大的体会是识别密文的编码格式是第一能力。看到一串只有0和1的字符优先想到二进制转ASCII看到大量字母且频率不高优先想到Base家族看到很多和/那大概率是Base64看到一堆看起来乱码的内容试着用栅栏、凯撒、维吉尼亚等古典密码去碰撞。这些识别能力完全靠刷题量堆出来没有捷径。第二个能力是会用现成的脚本和工具。Python的pycryptodome库、在线工具CyberChef、以及各种RSA专用脚本都要像吃饭喝水一样熟练。遇到RSA题先看模数n能不能分解常见套路再看加密指数e是不是太小最后看有没有共模攻击的可能。这些经典考法在qsnctf的题目里基本上都出现过刷多了你甚至能猜到出题人的套路。4. 工具选型与本地环境搭建别让工具拖你后腿4.1 从Burp Suite到CyberChef的必备清单做CTF题最痛苦的事情之一是思路全对结果工具不会用。我见过太多人连Burp Suite的代理开关都没打开就刷Web题抓不了包自然无从下手。我自己的必装工具清单大概是这样的工具用途熟练度要求Burp SuiteHTTP抓包改包、重放请求精通每天都会打开Python requests库写脚本处理需要计算的题目熟练能快速写小脚本CyberChef编码解码、数据格式转换、加解密熟练当常用计算器用Stegsolve / zsteg图片隐写、LSB提取熟练Misc必备Wireshark流量包分析入门即可遇到流量题现查都行sqlmap自动化SQL注入会用但不依赖Burp Suite是Web题的核心建议把它的代理、Repeater、Intruder这几个模块练熟。很多题目需要你快速修改Cookie或请求头不用Burp而用浏览器开发者工具效率会低很多。4.2 我推荐的一套本地解题环境很多新手会纠结“要不要装Kali”我的建议是不要为了刷题专门装Kali直接在你自己常用的操作系统上装好必要工具就行。CTF刷题不像渗透测试那样需要对工具链有很全面的掌握你只需要浏览器、Burp Suite、Python和CyberChef这四个核心组件就能覆盖90%以上的Web和Misc题目。Python环境建议直接装Anaconda因为你早晚要处理各种数据分析和加解密脚本。实测下来Anaconda自带的科学计算库在处理RSA、图片处理等场景时非常好用省去了一堆pip安装报错的时间。还有一个小建议不要忽视脚本能力。很多密码学题和Misc题是必须写脚本的比如遍历几百个文件找flag或者把一段密文按特定规律重排手算完全不现实。你至少要学会用Python写“读取文件、按行处理、输出结果”这种基本脚本这是最省时间的能力投资。4.3 关于渗透测试工具“应急载荷”的提醒这里要特别提醒一句最近在相关搜索词里经常看到“应急载荷”这个说法这个词在CTF圈里其实是用来指代某些紧急状态下为了快速getshell而准备的攻击载荷但在公共平台上一旦被误读很容易引发不必要的联想。我的观点是CTF刷题归刷题所有操作都在平台提供的靶机环境内完成这是规则允许的。但任何脱离平台环境、针对真实目标的行为都不在讨论范围内。学习网络安全最重要的边界就是“只在授权的环境里做测试”这一点在bugku和qsnctf这类平台上体现得特别清晰因为平台本身就是给你合法练手的靶场。5. 刷题过程中的常见问题与排查技巧实录5.1 写了payload没反应问题到底出在哪刷题时最崩溃的场景莫过于你的payload在本地测试没问题一放到平台上就没反应。根据我的经验这类问题90%出在以下三个地方。第一个是URL编码问题。你没把payload里的特殊字符进行URL编码导致服务端解析时直接报错。解决办法很简单不要在浏览器地址栏里手输payload而是用Burp Suite的Repeater去发送它会自动帮你处理一部分编码问题。第二个是Cookie或Session缺失。很多题目需要你先登录或者先访问某个页面拿到特定Cookie才能触发漏洞。我的习惯是先用Burp Suite完整地走一遍正常流程观察请求头里的Cookie变化再决定要不要带上额外的Cookie。第三个是你理解错了后台代码逻辑。比如你以为是数字型注入实际却是字符型且需要闭合单引号。这时候最好的排查方法是“分级测试”先测试最简单的1和1观察回显差异再逐步构造复杂payload而不是一上来就丢一个很长的payload。5.2 平台提交flag的格式坑和大小写问题每个平台的flag提交规则都不一样bugku一般会告诉你flag格式但qsnctf的比赛题里flag格式可能千奇百怪。我踩过最冤枉的一次坑是明明已经拿到了正确的flag字符串结果因为大小写不对一直提交失败我整整浪费了半个小时。所以拿到一段疑似flag的字符串时先别急着提交按这几个顺序检查一遍格式前缀如flag{}、ctf{}、qsnctf{}等、大小写、是否有多余的空格或换行、是否需要URL解码后再提交。这个检查习惯能帮你省下大量无效尝试时间。还有一个技巧是很多题目的flag不是一眼能看全的可能需要你从源码、响应头、Cookie、图片属性等多个位置拼接而成。遇到费尽心思解出来的东西却不像flag的情况不妨回头重新审视题目描述和提示很多时候出题人已经把所有线索放在那里了只是你漏看了一条。5.3 刷题心态管理和时间分配建议CTF刷题这件事有一个反直觉的规律卡住的时间越长越应该停下手来。我见过很多人死磕一道题三四个小时越磕越急躁最后看Writeup才发现考点是一个他完全不知道的函数。这种投入产出比极低的做法除了让你记住了这道题对你的知识体系帮助非常有限。我的建议是一道题独立思考上限设为一个小时超过一个小时没有实质进展就该看Writeup了。但看Writeup不是“抄答案”而是“查漏补缺”。你要注意区分这道题你是因为某个工具不会用卡住的还是某个知识点完全不知道还是只是思路没想到。三者的补强方式完全不同。心态上还有一个很重要的点就是不要和别人比刷题数量。bugku上有几百道题qsnctf的比赛一场接一场刷得快不代表学得好。我见过只刷了50道题但每道题都认真复盘的人水平比刷了500道题但全是浮于表面的人高出好几个档次。质量永远比数量重要。5.4 复盘是水平提升的真正分水岭最后想专门聊聊复盘。我在带人的时候发现绝大多数人刷完一道题就直接下一题了这个习惯是水平提升的最大阻碍。一道题做对了不代表你就完全掌握了一道题做错了看了Writeup也不代表你下次就能自己做出来。我自己的复盘方法是每道题做完不管有没有做出来都在本地建一个Markdown笔记记清楚“考点是什么、我的思路错在哪、正确解法是什么”。一周之后再把这周的题不查任何资料重新做一遍。如果还能做出来说明真的吸收了如果做不出来说明当时只是“眼睛会了”需要再补一遍。群友经常在讨论“为什么我看了一百篇Writeup还是不会做题”本质上就是因为缺少这一轮“重做”的步骤。知识从“看过”到“会用”中间必须经历你自己动手解决的全过程跳过这一步看再多Writeup都是空中楼阁。两个平台都只是工具真正把你水平拉上去的永远是“独立思考正确复盘”这套笨办法。根据我个人的经验能在bugku上稳定刷完Web和Misc的全部题目再去qsnctf打两三场比赛就已经能覆盖绝大多数一线CTF比赛中入门级到进阶级的考点了。剩下的就是在实战里继续积累手感而已。