ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CTF入门工具全解:五大方向实战清单与避坑指南

CTF入门工具全解:五大方向实战清单与避坑指南 平时群里总有新人问CTF入门到底要装哪些工具每次比赛复盘大家发现丢分往往不是思路不行而是手边缺个趁手的工具。这篇文章直接把我这几年打比赛、带新人、做靶场攒下来的工具清单掏出来按CTF的几大方向分类整理每个工具都会标注使用场景和我的实际感受。适合刚接触CTF的入门者也适合需要查漏补缺的老手。先说结论CTF工具不存在集齐一套就无敌的说法关键是理解工具解决的问题知道每条命令在干什么。所以下面不光列名字我尽量把使用逻辑和避坑经验写出来。这篇文章同时是我个人工具箱的整理很多工具不是某一场比赛才用而是长期积累后觉得确实值得留下。你看的时候不用急着全装先找到自己主攻的方向把对应工具装熟再逐步扩展成自己的“武器库”。1. CTF工具链的总体思路与方向划分1.1 五个方向三套逻辑CTF题目主要分成Web网络安全、Reverse逆向工程、Pwn二进制漏洞利用、Crypto密码学、Misc杂项与取证五大方向近几年又多了区块链、AI安全等新方向。从工具使用的角度看可以压缩成三套逻辑第一类是“找线索”的工具负责信息收集、编码识别、文件类型判断、隐藏数据提取第二类是“打点”的工具负责漏洞探测、注入、逆向分析和漏洞利用第三类是“算答案”的工具负责哈希爆破、密码破解、协议还原、自动化计算。所以我不建议按“工具名”去背清单而是按“解题阶段”去选工具。拿到一道题先判断它属于哪个方向再判断当前处于哪个阶段信息收集阶段用什么漏洞分析阶段用什么拿到数据后清洗解码阶段用什么。想通这一点工具清单就不会显得杂乱无章。1.2 工具环境怎么搭所有CTF工具我强烈建议装在独立虚拟机或Docker容器里不要直接装在日常主力机系统里。原因有三个CTF题目文件经常是特意构造的恶意样本尤其是Misc和Pwn方向在本机直接跑容易出事工具的依赖冲突非常常见不同脚本可能要求不同版本的Python库装在一起互相打架比赛环境需要随时复制、备份、迁移虚拟机快照比什么都省事。我自己的习惯是准备一个Kali Linux虚拟机再配一个Ubuntu专用工作目录遇到需要特定运行环境的题再用Docker临时起。比如题目给了PHP源码要求本地跑起来观察行为我一般直接拉一个指定版本的PHP镜像docker run -it --rm -p 8080:80 -v $(pwd):/var/www/html php:7.4-apache这样既能控制PHP版本又不会污染宿主机环境。虚拟机磁盘建议至少给80G快照做两个一个是刚装完系统的基础快照一个是装好常用工具的快照。比赛前把两个快照都确认一遍能正常恢复安全感会强很多。2. 网络与Web方向的常用工具拆解2.1 抓包与请求改写的三件套Web方向最常用的三件套是Burp Suite、抓包工具Fiddler、浏览器DevTools。Burp Suite做代理抓包、改包、重放、爆破基本都是行业标准免费版足够打大部分比赛。第一次使用要配置浏览器代理指向127.0.0.1:8080并安装Burp证书这样才能解开HTTPS流量。不少新手卡在证书安装这一步其实只需要把导出的der证书导入到系统受信任的根证书列表然后再重启浏览器。Fiddler在Windows下调试HTTPS请求很顺手特别适合分析桌面应用、小程序和某些不常见客户端的请求。它的脚本系统和Composer功能在某些场景下比Burp更轻量。浏览器DevTools则是最快的工具适合看接口、看Cookie、改前端逻辑、在Console里执行JavaScript。我遇到过一道题前端JS里有一个明显混淆过的函数后端校验全靠它用DevTools在函数入口下断点逐步看变量值直接把最终校验参数抄了出来。2.2 目录扫描与漏洞探测信息收集阶段目录扫描是必经之路。dirsearch负责扫隐藏目录和备份文件nikto扫Web服务配置问题nmap做端口与服务版本探测sqlmap自动检测SQL注入。这里有个心得不要一上来就无脑扫先看题目提示和响应头。真正的CTF题目入口往往藏在robots.txt、备份文件、Git泄露、页面注释里扫描只是辅助手段。我一般先在浏览器里完整看一遍页面源码和响应头发现可疑注释或者路径再手动访问确认没有收获之后才上扫描器。工具命令也比较固定python3 dirsearch.py -u http://target -e php,txt,zip,bak nmap -sC -sV -p- 10.10.10.10 sqlmap -u http://target/?id1 --batch --dbs如果扫出.git目录可以用git_dumper之类的小工具把整个仓库拉下来经常能恢复到开发版本里面藏着源码和flag。2.3 命令注入、文件上传与PHP伪协议实战要点命令执行类的题是Web方向的高频考点。如果题目代码里用了passthru、system、exec这类函数我们就要考虑管道符、分号、换行符、反引号是否被过滤。常见绕过思路包括空格被过滤时用${IFS}或Tab代替关键字被过滤时用变量拼接、base64编码后交给shell执行参数被包裹时尝试闭合引号再拼命令。# 空格被过滤时 ;{IFS}cat${IFS}/flag ;cat$IFS$1/flag # 关键字被过滤时 ;echo$IFSY2F0IC9mbGFn|base64$IFS-d|bash文件上传题目的考法我见过很多种前端校验、MIME校验、扩展名黑名单、Content-Type校验、图片头校验、文件内容包含木马特征检测等。对应思路是能直传WebShell就直接传不能的话利用.htaccess、.user.ini这类配置文件配合图片马。后缀绕过也有套路比如php3、php5、phtml大小写混写加空格、加点、加::$DATA等。PHP伪协议是另一个重点。php://filter可以读源码php://input可以提交原始数据data://协议可以把字符串当文件内容执行。做题时一般先读源码找到过滤规则再决定构造什么payload。推荐本地搭一个PHP环境把这几种协议都跑一遍原理通了题目再变也不怕。2.4 Nginx安全加固与AI安全题“CTF nginx安全加固”这类题已经不是单纯找flag而是给你一个有配置问题的服务要你指出并修复。常见问题包括server_tokens开启暴露版本号、目录列表开启、错误页信息泄露、alias路径穿越、location规则写错导致限制被绕过。做题思路是逐项检查配置再根据漏洞修复。AI安全CTF是这两年兴起的方向常见考点有提示词注入、模型输出越狱、训练数据投毒、模型服务端SSRF等。做这类题除了常规Web手段还要会构造对话上下文让模型在对话里泄露系统提示词或内置规则。工具层面依然依赖Burp Suite和脚本分析核心思路是把模型当作“一个会说话的程序”漏洞点往往在输入输出的边界上。3. 密码学与杂项题的常用工具组合3.1 编码识别与解密第一站CyberChef遇到任何可疑字符串第一反应先扔进CyberChef。它是一个浏览器端编码解码工具支持Base64、Base32、Hex、URL编码、Unicode、ROT13、栅栏、培根等几十种常见编码。它有一个Magic操作可以自动猜编码类型CTF新手拿到一串不知道是什么的字符用Magic往往能一键解开。我的使用习惯是先复制原始字符串添加一个“Magic”节点再根据输出结果手动叠加“From Base64”“From Hex”“From Base32”等节点对比。因为自动Magic有时会选错路径人工确认能少走弯路。遇到多轮编码时CyberChef的Recipe功能可以把多个操作串成流水线一遍遍解码效率比一个一个试高太多。3.2 哈希爆破与RSA分解密码学题目可以粗分为古典密码和现代密码两类。古典密码靠识别特征凯撒、维吉尼亚、栅栏、培根这些在线工具就能解。现代密码常见涉及哈希、RSA、AES、ECC。哈希爆破工具推荐hashcat和John the Ripper配合字典和掩码攻击能解决大部分弱口令哈希。hashcat -m 0 hash.txt rockyou.txt hashcat -m 1000 ntlm_hash.txt rockyou.txt hashcat -a 3 -m 0 hash.txt flag{?d?d?l?l?l}RSA题目拿到一个n如果n很小或者两个不同的n有公约数可以用factorDB在线分解也可以本地用yafu跑再算私钥d、还原明文。我做过一道题给了两组RSA参数求gcd发现共享同一个素数直接解出了两组消息。这种题工具不复杂关键是意识到要取公约数。3.3 文件隐写binwalk、foremost与StegsolveMisc里最常碰到的是图片藏文件、图片藏字符串、音频藏摩斯电码、压缩包伪加密、文件尾追加数据。第一步先识别文件类型用file命令不要只看扩展名第二步用binwalk扫有没有隐藏压缩包或分区信息第三步用foremost把隐藏文件分离出来。file flag.png binwalk -e flag.png foremost flag.png -o output strings flag.png | grep -i flag exiftool flag.png图片看色板异常就要用Stegsolve打开后逐通道逐位平面检查LSB隐写在这种视图下非常直观。音频文件必查Audacity看波形和频谱摩斯码、拨号音、双音多频都在频谱里清晰可见。还有一个冷门但好用的技巧把文件扔进HxD或010 Editor看文件头和尾部空闲区域往往直接写着flag。3.4 流量分析Wireshark与USB流量脚本流量分析是Misc的高频题型Wireshark是绝对主力。使用关键是会过滤过滤HTTP请求看POST数据导出HTTP对象拿文件追踪TCP流看明文内容过滤WebSocket看实时消息。很多题的flag就藏在POST参数、Set-Cookie、重定向Location或者TCP连接的某个数据包里。http.request.method POST http.response.code 302 tcp.stream eq 5热搜词里提到“CTF中USB流量分析脚本”这是USB协议抓包题常见两种USB键盘流量和USB鼠标流量。键盘流量需要把USB HID键值映射回ASCII键值在Linux内核文档里有标准说明鼠标流量需要根据位移数据还原画图全网有现成脚本可以直接用。我的建议是流量题先看Protocol Hierarchy统计再按协议过滤最后对可疑流做Follow TCP Stream很多flag就是明文POST数据或者在WebSocket首包里。3.5 内存取证与取证框架Misc方向越来越喜欢出内存取证题给一个raw内存镜像要你找到进程、文件、命令记录甚至密钥。Volatility是标配新项目Volatility3也值得装支持更多系统和格式。volatility -f memory.raw imageinfo volatility -f memory.raw --profileWin7SP1x64 pslist volatility -f memory.raw --profileWin7SP1x64 filescan volatility -f memory.raw --profileWin7SP1x64 cmdline这类题考的是对操作系统内部结构的理解工具只是把PDB符号和内存结构解析出来。做多了你会发现flag经常不在磁盘上而在内存里的记事本、浏览器缓存、剪贴板、或者某个进程环境变量中。4. 逆向与二进制方向的工具实战4.1 静态分析IDA Pro、Ghidra与radare2拿到可执行文件第一步是查壳、查架构、查保护file和checksec解决基础问题。复杂程序用IDA Pro做反汇编和反编译免费的老版本够用不想用盗版就用Ghidra开源而且反编译效果不差。命令行环境下radare2和rizin也很好用尤其快速看符号、字符串和交叉引用时比图形界面更轻。静态分析最重要的习惯是先用strings看可打印字符串再查找引用这些字符串的代码位置往往能直接定位主逻辑。遇到看不懂的加密算法不要硬逆先搜特征常量。比如MD5的初始常量、AES的S盒、CRC的查表数据看到这些基本上可以确定调用了哪个库函数再去查可能的密钥。4.2 动态调试gdb、pwndbg与调试习惯动态调试主要用gdb搭配pwndbg或gef插件体验会好很多。设置断点、单步执行、查看寄存器和内存是基本功pattern create和pattern offset用来快速找栈溢出偏移x/20gx $rsp这类命令用于查看栈上数据。Pwn题里还要学会用checksec识别NX、PIE、Canary、RELRO这些决定了漏洞利用思路。比如没有PIE可以直接用固定地址有Canary可能需要先泄漏Canary再覆盖开启NX则考虑ret2libc或者ROP。调试时遇到断点不生效先确认是否加载了正确符号再看是不是PIE导致断点地址需要按运行时基址计算。4.3 利用辅助工具pwntools、checksec、ROPgadget与one_gadgetPwn方向的“写漏洞利用脚本”离不开pwntools它把连接、发送、接收、ELF解析、ROP构造都封装得很顺手。一个小脚本的骨架长这样from pwn import * context.arch amd64 io remote(target, 10001) elf ELF(./pwn) offset 72 payload bA * offset p64(elf.plt[system]) p64(0) p64(next(elf.search(b/bin/sh))) io.sendline(payload) io.interactive()ROPgadget可以帮你在二进制文件里找gadgetROPgadget --binary ./pwn --only pop|ret one_gadget ./libc.so.6checksec是检查二进制安全属性的小工具pwntools自带命令行里也可以直接跑。我的建议是每道Pwn题都先把这几个命令跑一遍再决定是否深入逆向。工具能帮你省掉大量重复劳动但漏洞利用的思路还是得靠自己理清。4.4 固件与镜像提取boot.img与通用解包题目偶尔给一个完整的固件镜像第一反应是binwalk -e解包解开之后再识别文件系统类型用firmware-mod-kit等工具重新打包或提取。热搜词里有一键提取boot.img工具这类工具通常是把Android boot镜像拆成kernel和ramdisk底层还是对二进制格式的分区解析理解格式本身比工具更重要。遇到无法直接解包的镜像先看文件头再对应格式找专用工具。例如SquashFS用unsquashfsJFFS2用jeffersonCPIO直接用cpio命令。很多时候卡住不是工具不行而是还没识别出目标格式。5. 终端、远程管理与效率工具5.1 SSH终端Tabby、MobaXterm与Xshell远程连靶机、连比赛服务器需要一个趁手的终端。Tabby是开源跨平台的颜值和插件生态都说得过去MobaXterm在Windows下集成文件传输和端口转发处理需要跳板机的场景很方便Xshell是经典老牌稳定且轻量。比赛时最怕的是临时找连接配置建议把SSH密钥、主机分组、会话管理都提前配好。如果有端口转发需求MobaXterm的隧道配置比命令行直观但也要记得赛后清掉避免下次误连。5.2 终端复用神器tmux比赛中经常需要同时开多个终端一个跑监听、一个跑脚本、一个翻源码。tmux分屏加会话保持能极大提升效率。关键是训练肌肉记忆Ctrlb加c新建窗口Ctrlb加%竖分屏Ctrlb加方向键切换Ctrlb加d断开会话下次ssh回来tmux attach就能恢复现场。一开始记不住快捷键很正常我建议在日常开发时也强制用tmux不要只在比赛时用。另外终端里输出乱码时先排查编码问题再考虑是不是字体或终端渲染问题不要一上来就重装工具。5.3 笔记、协作与命令速记做题最忌讳思路混乱。我习惯用一个Markdown笔记文件记录每道题的进展、尝试过的目录、线索字符串、候选flag。比赛时用Git维护这些笔记方便回滚和多人协作。文件命名建议按题目编号、方向、时间比如web_easy_mysql_001.md方便检索。我还会把常用命令写成alias放到终端配置文件里。例如alias servepython3 -m http.server 8000 alias ststrings | grep -iE flag|ctf|key|secret alias bdbinwalk -e这些看似零碎的配置真正比赛时能省下大量时间也是我把“效率工具”单独拿出来讲的原因。6. 常见问题与排查技巧实录6.1 常见问题速查表下面这张表是实战中遇到频率最高的问题基本都是可以快速处理的。问题现象常见原因排查思路题目文件运行没反应缺运行库、位数不对file看架构ldd看依赖确保系统位数一致Python脚本报编码错误文件编码、终端编码不一致文件头加# -- coding: utf-8 --终端用UTF-8Wireshark看不到流量网卡选错、没权限、过滤器太严格用sudo启动先清空过滤器再看统计hashcat跑得很慢没有用GPU、字典太大带--force试GPU先跑小字典验证思路binwalk解不出内容文件类型不常见、被魔改看文件头搜索已知签名考虑自定义提取工具装上就崩依赖版本冲突用虚拟环境或Docker重新装6.2 工具环境隔离的细节我吃过一个亏有一次为跑Misc题在主力机直接点开了一个exe样本机器里的杀软立刻把它当病毒处置题目环境也被破坏。从那以后所有可疑文件一律在虚拟机里运行。日常带题给新人我也只通过共享文件夹或网盘拷贝文件不再直接拖到宿主机。还有一个教训是多版本Python并存导致的包冲突。pip安装的包互相干扰所有脚本突然跑不了排查了半天才发现是dist-packages路径的问题。现在我的做法是给每个CTF项目单独建虚拟环境或者直接用requirements.txt固定版本配合Docker镜像打包基本不会再出现这类问题。6.3 用搜索引擎与知识库查漏补缺遇到没见过协议、没见过的编码先搜关键字再对照已经公开的Writeup和工具源码。很多时候不是工具不够而是不知道这类题目的套路。我推荐维护一个自己的“工具笔记”每个工具配一两句话记录适合场景、常用参数和踩坑点下次比赛直接复制命令。比如“zsteg”适合PNG/BMP的LSB隐写“steghide”适合带密码的隐写“pngcheck”适合校验PNG结构异常。这些经验靠一道题一道题积累比临时查文档可靠得多。6.4 赛后复盘工具清单每次比赛结束我会把用了哪些工具、哪个命令最有效、哪个方向工具准备不足集中记到同一份笔记里。久而久之收藏的工具清单就从“别人推荐的”变成“自己验证过的”。复盘时也会顺手更新alias和脚本把高频操作自动化。工具的更新版本也一样赛后看到新版本发布不要急着装上先看更新日志确认会不会破坏现有脚本。团队协作时工具版本要尽量统一否则一个人说“我这里跑通了”另一个人却因为环境差异复现不了。结尾上面这些工具不是一次装完就万事大吉工具数量也不是越多越好。我自己的体会是真正决定CTF成绩的是工具背后你对原理的理解和遇到题目时的判断力。建议从这份清单里挑自己主攻方向的3到5个工具先装熟用题目练再逐步扩展最后把常用命令写进终端配置形成肌肉记忆。最后再分享一个小技巧把常用HTTP服务命令设置成alias几乎每场比赛都能用到。这算是我自己的“保命键”。希望这份工具整理对你有用比赛见。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进