简介:CTF工具包.zip 面向网络安全竞赛参赛者与渗透测试初学者,聚焦抓包、分析与解密三大环节,帮助解决备赛阶段工具零散、环境搭建繁琐的问题。压缩包共132个文件,整体约84.72MB,以89个txt说明文档、15个zip子工具包、11个png截图、6个exe可执行程序、4个jar包及少量rar、7z、py脚本为主,涵盖抓包分析、编码转换、进制编辑、后台扫描、密码破解与逆向调试等常见用途。内容预览显示其中包含16进制编辑器、编码转换、御剑后台扫描、CTFcrack、Cknife等实用程序,可配合Wireshark、Burp Suite、John the Ripper、HashCat、IDA Pro等工具完成流量分析、请求拦截、哈希破解与二进制逆向等典型赛题任务。目前已有2703人学习下载,适合希望系统整理工具链、快速上手实战演练的CTF选手参考使用。
1. 从「CTF工具包.zip」说起:一个压缩包为什么能决定你能否入门
很多人第一次打 CTF,卡住的地方不是不会写脚本,而是环境没搭好。下载了一个「CTF工具包.zip」,解压出来一堆目录,不知道先装哪个、哪个是必须的、哪个装了反而冲突。更常见的情况是:比赛开始了,别人三分钟跑出 flag,你还在配 Python 环境、装 pwntools、调 Burp 证书。CTF 入门真正的门槛,从来不是题目难度,而是工具链的完整度和熟练度。
这个标题背后要解决的问题很具体:把散落在各处的 CTF 常用工具,整理成一套能直接上手、按题型分类、随取随用的本地环境。它适合三类人:刚接触 CTF 想系统搭建环境的新手、打杂项和密码学为主但逆向 Web 也想补一补的选手、以及需要给战队新人做统一环境分发的负责人。接下来我会按「工具包该装什么 → 怎么装 → 怎么按题型用 → 哪里容易翻车」的顺序,把一套可复现的 CTF 工具链讲清楚。
2. CTF工具包里到底该放什么:按题型拆解工具选型
2.1 先按六大题型分类,别按工具名堆目录
拿到一个工具包,最容易犯的错是按「工具名」建目录:tools/pwntools、tools/burp、tools/ida。这样建完,打比赛时你根本不知道该去哪个目录找东西。正确的做法是按题型分:Misc、Crypto、Web、Reverse、Pwn、Forensics。每个题型下面再放该题型高频使用的工具,这样比赛时按题目类型直接进对应目录。
我一般会这样组织:
ctf-kit/ ├── misc/ # 杂项:编码、隐写、流量 ├── crypto/ # 密码学:古典密码、RSA、格 ├── web/ # Web:代理、扫描、payload ├── reverse/ # 逆向:反汇编、调试 ├── pwn/ # 二进制利用:调试、ROP ├── forensics/ # 取证:磁盘、内存、日志 └── scripts/ # 自写通用脚本这个结构的好处是:比赛时看到题目分类,直接进对应目录,不用回忆「那个工具叫什么名字」。对于 ctf杂项题目 和 ctf密码学 这两类高频题型,目录里应该放的是「开箱即用」的脚本和命令,而不是需要编译半小时的源码。
2.2 每个题型的最小可用工具集
不是工具越多越好。装太多工具会导致依赖冲突,尤其是 Python 包版本。下面这张表是我实际用下来,每个题型真正高频、缺了会难受的工具:
| 题型 | 核心工具 | 用途 | 是否必装 |
|---|---|---|---|
| Misc | Python3 + Pillow + zsteg | 图片隐写、编码转换 | 必装 |
| Misc | Wireshark + tshark | 流量分析 | 必装 |
| Crypto | SageMath | 格密码、椭圆曲线 | 强烈建议 |
| Crypto | pycryptodome + gmpy2 | RSA、大数运算 | 必装 |
| Web | Burp Suite Community | 抓包改包 | 必装 |
| Web | sqlmap + dirsearch | 注入、目录扫描 | 必装 |
| Reverse | Ghidra 或 IDA Free | 反汇编 | 必装 |
| Reverse | Python + capstone | 脚本化分析 | 必装 |
| Pwn | pwntools + gdb + pwndbg | 漏洞利用 | 必装 |
| Forensics | Volatility3 + foremost | 内存、文件恢复 | 按需 |
提示:SageMath 在 Windows 上安装比较折腾,常见做法是用 WSL 或者 Docker 跑一个 Sage 环境,不要硬在 Windows 原生环境装。
选型理由很简单:CTF 比赛时间有限,工具的第一要求是「能快速跑起来」,第二才是「功能强大」。比如逆向,Ghidra 免费且反编译质量够用,没必要一上来就折腾 IDA Pro 的授权。Pwn 方向 pwntools 几乎是标配,配合 pwndbg 调试效率会高很多。
2.3 用 Docker 做环境隔离,避免依赖打架
工具包装在宿主机上最大的问题是:不同工具依赖不同版本的 Python 或库,装到最后pip install直接报冲突。我的做法是用 Docker 按题型分容器,每个容器只装该题型的工具。
# ctf-misc.Dockerfile FROM python:3.11-slim RUN apt-get update && apt-get install -y \ binwalk foremost exiftool \ && rm -rf /var/lib/apt/lists/* RUN pip install --no-cache-dir \ pillow pycryptodome gmpy2 zsteg WORKDIR /work构建和运行:
docker build -f ctf-misc.Dockerfile -t ctf-misc . docker run -it --rm -v $(pwd):/work ctf-misc bash逻辑说明:基础镜像用python:3.11-slim控制体积;binwalk、foremost、exiftool是杂项题里处理文件隐写和恢复的常用命令;Python 包只装高频的,不装全量。参数上,-v $(pwd):/work把当前目录挂进容器,这样容器里生成的脚本和结果文件在宿主机也能看到,不用来回拷贝。
这样做的好处是:Misc 容器里 Python 包版本固定,不会因为装了别的工具被升级;Pwn 容器单独装 pwntools 和 gdb,互不影响。坏处是镜像占磁盘,但对现代开发机来说,几个 GB 的镜像换环境稳定,值。
3. 从零搭一套能打的 CTF 环境:命令、配置与验证
3.1 Python 侧:pwntools、pycryptodome、gmpy2 一次装对
Python 是 CTF 里用得最多的语言,但几个关键包的安装顺序和依赖有讲究。pwntools 依赖pwnlib,pycryptodome 和旧的pycrypto不能共存,gmpy2 需要系统级的 GMP 库。下面是我在 Ubuntu 22.04 上验证过的安装流程:
# 先装系统依赖,gmpy2 编译需要 sudo apt-get update sudo apt-get install -y python3-pip python3-dev libgmp-dev libmpfr-dev libmpc-dev # 装 Python 包,注意 pycryptodome 不要和 pycrypto 混装 pip3 install --upgrade pip pip3 install pwntools pycryptodome gmpy2 requests装完后验证:
# verify_env.py from pwn import * from Crypto.Util.number import long_to_bytes, bytes_to_long import gmpy2 # 验证 pwntools 能正常加载 context.log_level = 'error' print("pwntools ok:", p32(0xdeadbeef).hex()) # 验证 pycryptodome 大数转换 n = 0x123456789abcdef print("pycryptodome ok:", long_to_bytes(n).hex()) # 验证 gmpy2 大数运算 print("gmpy2 ok:", gmpy2.is_prime(2**127 - 1))逻辑说明:p32验证 pwntools 的打包功能正常,这是 Pwn 题里最基础的操作;long_to_bytes验证 Crypto 题里 RSA 解密后的整数转字节;gmpy2.is_prime验证大数运算库可用,格密码和 RSA 题里经常需要判断素数或做模逆。三个都打印出预期结果,说明 Python 侧环境没问题。
参数上,context.log_level = 'error'是为了在验证脚本里不输出 pwntools 的冗余日志,实际打题时通常设为debug方便看交互。2**127 - 1是梅森素数,用来测试 gmpy2 的素数判断,这个数在 Crypto 题里也常作为模数出现。
3.2 Web 侧:Burp 证书配置与 sqlmap 联动
Web 题的第一步是能抓到 HTTPS 流量。Burp 默认只抓 HTTP,要抓 HTTPS 必须导入 CA 证书。很多人卡在这里,浏览器一直提示证书不受信任。
步骤:
- 启动 Burp,进入 Proxy → Options → Proxy Listeners,确认监听
127.0.0.1:8080。 - 浏览器访问
http://burp,下载 CA 证书。 - Firefox:设置 → 隐私与安全 → 证书 → 查看证书 → 导入,勾选「信任由此 CA 标识的网站」。
- Chrome:需要在系统证书里导入,或者启动时加
--ignore-certificate-errors(仅测试用)。
配置好代理后,用 sqlmap 联动 Burp 的抓包结果:
# 把 Burp 抓到的请求保存为 request.txt,然后: sqlmap -r request.txt --batch --level=3 --risk=2 --dbs逻辑说明:-r直接从文件读取 HTTP 请求,省去手动填 URL、Cookie、POST 数据的麻烦;--batch让 sqlmap 自动选择默认选项,不交互;--level=3提高测试等级,会测试更多注入点;--risk=2允许使用一些可能影响数据的 payload;--dbs列出数据库名。
参数上,--level默认是 1,只测 GET 和 POST 参数;调到 3 会测 Cookie、User-Agent 等头部。--risk默认 1,调到 2 会加入基于时间的盲注 payload。比赛里如果时间紧,先用--level=2 --risk=1快速跑一遍,没结果再调高。
注意:sqlmap 的
--risk=3会使用 OR 类型的 payload,可能修改数据库内容,比赛环境里慎用,除非你确认题目允许。
3.3 逆向与 Pwn:Ghidra 无头模式 + pwndbg 调试配置
逆向题如果只靠 GUI 点,效率很低。Ghidra 支持无头模式(headless),可以用脚本批量分析二进制。下面是一个用 Ghidra 无头模式导出函数列表的例子:
# 假设 Ghidra 安装在 /opt/ghidra /opt/ghidra/support/analyzeHeadless \ /tmp/ghidra_proj myproject \ -import ./challenge \ -postScript ExportFunctions.java \ -deleteProject逻辑说明:analyzeHeadless是 Ghidra 的无头入口;第一个参数是项目目录,第二个是项目名;-import指定要分析的二进制;-postScript指定分析完成后执行的脚本;-deleteProject分析完删除项目,避免占磁盘。
参数上,ExportFunctions.java需要自己写或从 Ghidra 脚本库找,作用是遍历所有函数并打印地址和名称。这个流程适合批量处理逆向题,比如比赛里给了 10 个二进制,先用无头模式跑一遍,快速定位关键函数,再针对性用 GUI 细看。
Pwn 方向,pwndbg 的安装和配置:
# 安装 pwndbg git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh # 在 ~/.gdbinit 里确认加载 echo "source $(pwd)/gdbinit.py" >> ~/.gdbinit验证:
gdb -q ./challenge # 进入 gdb 后输入 pwndbg> checksec逻辑说明:checksec是 pwndbg 提供的命令,用来查看二进制的保护机制(NX、PIE、Canary、RELRO)。Pwn 题第一步就是看保护,决定用哪种利用方式。如果checksec报错,说明 pwndbg 没加载成功,检查~/.gdbinit路径是否正确。
参数上,setup.sh会自动安装依赖并配置,但如果你之前装过其他 GDB 插件(比如 peda),需要先清理~/.gdbinit,否则会冲突。我一般会保留一个干净的~/.gdbinit,只加载 pwndbg。
4. 避坑与排查:CTF工具包最常见的 5 个翻车现场
4.1 现象:pwntools 装完 import 报错No module named 'pwnlib'
原因:pip 装到了 Python 2 的 site-packages,或者系统里有多个 Python 版本,pip和python3指向不同版本。
解决:用python3 -m pip install pwntools明确指定 Python 版本,装完后用python3 -c "import pwn"验证。如果还报错,检查which python3和which pip3是否在同一环境。
4.2 现象:Burp 抓不到 HTTPS,浏览器提示证书错误
原因:CA 证书没有导入到浏览器的信任列表,或者导入到了「服务器」标签而不是「颁发机构」标签。
解决:Firefox 里导入时一定要勾选「信任由此 CA 标识的网站」,并且确认证书在「颁发机构」列表里。Chrome 在 Linux 下需要把证书导入系统证书库:sudo cp burp.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates。
4.3 现象:Ghidra 无头模式报Java heap space错误
原因:Ghidra 默认 JVM 内存不够,分析大二进制时溢出。
解决:编辑support/analyzeHeadless脚本,找到MAXMEM变量,从默认的1G调到4G或8G。或者设置环境变量MAXMEM=4G再运行。
4.4 现象:pwndbg 加载后 gdb 启动极慢
原因:pwndbg 在启动时会加载大量符号和配置,如果.gdbinit里还加载了其他插件,会叠加延迟。
解决:清理~/.gdbinit,只保留 pwndbg 的加载行。如果还是慢,检查是否有网络请求(比如自动更新),可以在 pwndbg 配置里关闭自动更新。
4.5 现象:Docker 容器里跑 pwntools 连不上本地题目
原因:容器网络隔离,localhost在容器里指向容器自身,不是宿主机。
解决:用--network host让容器共享宿主机网络,或者用host.docker.internal(Docker Desktop)作为宿主机地址。Linux 下更推荐--network host,简单直接。
5. 让工具包真正提速:脚本化与赛前检查清单
工具包装好只是第一步,真正拉开差距的是「把重复操作脚本化」。我打 CTF 这几年,最大的习惯改变是:每道题做完,如果发现某个操作重复了三次以上,就把它写成脚本丢进scripts/目录。比如杂项题里经常要批量提取图片的 LSB 信息,我就写了一个lsb_extract.py,输入图片路径,自动输出最低位平面。密码学题里经常要试常见的 RSA 攻击(小公钥指数、共模攻击、Wiener 攻击),我整理了一个rsa_attacks.py,把参数填进去自动跑一遍。
赛前检查清单也是血泪经验。有一次比赛开始后才发现 pwntools 没装,现场装又遇到依赖冲突,白白浪费二十分钟。现在我的习惯是:赛前半小时跑一遍verify_env.py,确认 pwntools、pycryptodome、gmpy2、sqlmap、Burp 代理、pwndbg 全部可用。检查清单不长,但能避免「工具没准备好」这种低级翻车。
最后一个具体技巧:把常用命令做成 shell 别名。比如alias pwn='python3 -c "from pwn import *; context.log_level=\"debug\""',或者alias listen='nc -lvnp'。这些别名看起来小,但比赛时能省下大量敲命令的时间。工具包的价值不在于装了多少工具,而在于你多快能调用到正确的工具。希望帮到你。
本文还有配套的精品资源,点击获取