环境与工具最小准备
环境与工具最小准备
本文适合
准备开始做 CTF 题,但还不确定 Windows、WSL、Docker、Python 和常用工具该装到什么程度的新手。学完你能:搭出一套覆盖 80% 入门题的最小环境,并用命令检查它是否真的能支撑 Web、Misc、Crypto、逆向和 Pwn 起手分析。
一句话判断
CTF 入门环境的合格标准不是"工具装得多",而是遇到题目时能完成最小观察、最小验证和最小记录。
最小环境只要求先覆盖四件事:
Linux/WSL 可用
Python 可用
浏览器抓包可用
文件/二进制基础观察工具可用后续工具按题目需要补,不要把入门时间耗在"全家桶安装"上。
题目中常见信号
看到不同材料时,先判断需要哪一类环境:
优先环境/工具:浏览器、Burp、curl
先验证什么:请求能否重放,参数变化是否有反馈
优先环境/工具:file、xxd、strings、7-Zip、binwalk
先验证什么:文件真实类型和是否有嵌入内容
优先环境/工具:Python、CyberChef、pycryptodome
先验证什么:能否完成编码转换和脚本验证
优先环境/工具:WSL/Linux、gdb、checksec、pwntools
先验证什么:程序能否运行、崩溃和保护机制
优先环境/工具:JADX、Ghidra/IDA、strings
先验证什么:能否找到字符串和判断逻辑
优先环境/工具:Wireshark、tshark、grep
先验证什么:能否筛选会话和关键字段
如果题目还没有开始分析,就已经卡在路径、权限、编码、代理或包版本,说明环境还没有达到最小可用。
核心概念
工具准备要围绕"做题闭环"组织,而不是围绕工具名收集。
对应的环境能力是:
- 查看能力:能看文件类型、文本、十六进制、元数据、网络请求。
- 运行能力:能运行脚本、程序、容器或本地服务。
- 交互能力:能发 HTTP 请求、连接远程端口、重放数据包。
- 记录能力:能保存命令、输出、截图文字和环境版本。
入门阶段不追求"一次装全",只追求"一道题能从观察走到验证"。
最小分析流程
第一步:准备基础目录
建议固定一个工作目录,按题目存放材料和记录:
mkdir -p ~/ctf/{challenges,tools,notes}
mkdir -p ~/ctf/challenges/demo
cd ~/ctf/challenges/demo每道题至少保留:
题目附件
关键脚本
做题记录或 WP
环境问题记录第二步:确认 Linux/WSL 可用
Windows 用户建议保留 Windows 主环境,同时准备 WSL2 或 Linux 虚拟机。Web、Crypto、Misc 的入门题在 Windows 上也能做,但 Pwn、部分逆向和脚本调试在 Linux 环境里更顺。
PowerShell 中安装 WSL:
wsl --install -d Ubuntu-22.04WSL 内更新系统并安装基础工具:
sudo apt update
sudo apt install -y build-essential gcc g++ gdb \
python3 python3-pip python3-venv \
file xxd binwalk \
netcat-openbsd socat curl wget \
unzip p7zip-full git注意:strings 通常来自 binutils,如果命令不存在,安装:
sudo apt install -y binutils第三步:确认 Python 可用
Python 是为了快速处理字符串、字节、编码、爆破和网络交互,不是为了写大型程序。
python3 --version
python3 -m venv ~/ctf/venv
source ~/ctf/venv/bin/activate
python -m pip install --upgrade pip
pip install requests pycryptodome pwntools z3-solver最小 bytes 检查:
python3 - <<'PY'
import base64
data = b"flag"
print(data.hex())
print(base64.b64encode(data).decode())
print(bytes(x ^ 0x23 for x in data))
PY第四步:准备浏览器和抓包
Web 题至少要能完成三件事:
- 用浏览器开发者工具看 Network。
- 用 Burp Repeater 重放请求。
- 用
curl保存一条可复制请求。
最小验证:
curl -i http://example.com/
curl -i -X POST http://example.com/ -d 'a=1&b=2'Burp 代理失败时先检查:
- 浏览器代理是否指向
127.0.0.1:8080。 - HTTPS 证书是否导入浏览器。
- 目标是否走了系统代理以外的客户端。
第五步:准备 Docker
Docker 不是第一天必须掌握所有细节,但它对复现题目环境很重要。
安装 Docker Desktop 后验证:
docker --version
docker run hello-world常用镜像:
docker pull ubuntu:20.04
docker pull ubuntu:22.04
docker pull php:7.4-apache
docker pull python:3.11-slim
docker pull node:20-alpine运行一个临时 Linux 环境:
docker run --rm -it ubuntu:22.04 bash运行题目服务的最小 Dockerfile 示例:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y socat
COPY challenge /home/ctf/challenge
RUN chmod +x /home/ctf/challenge
EXPOSE 10001
CMD ["socat", "TCP-LISTEN:10001,reuseaddr,fork", "EXEC:/home/ctf/challenge"]第六步:准备方向工具
先装通用工具,再按方向补专项工具:
起手工具:浏览器、Burp、curl、httpie
暂时不用急着装:大型扫描器
起手工具:file、strings、xxd、binwalk、exiftool、Wireshark
暂时不用急着装:冷门隐写 GUI 全家桶
起手工具:Python、CyberChef、pycryptodome、sympy、gmpy2
暂时不用急着装:大型数学环境,除非题目需要
起手工具:strings、Ghidra/IDA、JADX、x64dbg
暂时不用急着装:多个反编译器同时深学
起手工具:checksec、gdb、pwndbg、pwntools、ROPgadget
暂时不用急着装:复杂堆工具,入门后再补
起手工具:Python、numpy、pillow、onnxruntime、torch
暂时不用急着装:大模型训练环境,除非题目要求
最小验证示例
环境搭好后,用下面这组检查判断是否达到"能开始做题"的标准。
文件题检查
printf 'hello flag{test}\n' > sample.txt
file sample.txt
strings -a sample.txt
xxd -l 32 sample.txt合格结果:
能看到文件类型
能提取可读字符串
能查看十六进制内容Python 检查
python3 - <<'PY'
from Crypto.Util.number import long_to_bytes
print(long_to_bytes(0x666c6167))
PY合格结果:
b'flag'Web 检查
curl -i 'http://example.com/?id=1'
curl -i -A 'ctf-test' 'http://example.com/?id=1'合格结果:
能看到状态码、Header 和响应体
能修改请求头或参数Pwn 起手检查
cat > hello.c <<'EOF'
#include <stdio.h>
int main() { puts("hello"); return 0; }
EOF
gcc hello.c -o hello
file hello
./hello如果安装了 checksec:
checksec ./hello合格结果:
能编译、运行、识别 ELF,并查看基础保护机制常见利用 / 解题路线
路线总览:
题目开始后,环境使用顺序建议如下:
- 未知附件:
file->strings->xxd->binwalk。 - Web 入口:浏览器观察 -> DevTools Network -> Burp Repeater ->
curl复现。 - Crypto 参数:手动识别类型 -> Python 写最小验证 -> 再考虑工具。
- 逆向程序:
file->strings-> Ghidra/IDA 找交叉引用 -> 动态调试。 - Pwn 程序:运行交互 ->
checksec-> 崩溃输入 -> offset -> 利用链。 - AI 题目:确认输入输出 -> 记录 prompt/文件/模型边界 -> 做对照实验。
环境不是单独的学习任务,而是为这些路线服务。
常见失败原因
原因:包没装或 PATH 不对
排查动作:which command / where command,再安装对应包
原因:路径体系混用
排查动作:Windows 盘用 /mnt/c/...,WSL 文件用 \\wsl$ 访问
原因:全局安装太乱
排查动作:每个方向使用 venv,记录 pip freeze
原因:证书或代理没配置
排查动作:检查代理、证书和浏览器独立代理设置
原因:WSL2 后端或虚拟化问题
排查动作:检查 Docker Desktop、WSL 状态和 BIOS 虚拟化
原因:libc/架构不一致
排查动作:记录 file、ldd、Docker 环境
原因:编码/换行/权限问题
排查动作:换 WSL 解压,检查文件名和权限
原因:没有明确验证目标
排查动作:写下"我希望这个工具证明什么"
环境问题也要记录,而不是反复口头描述"跑不了":
系统:
命令:
完整报错:
我已经尝试:
当前卡点:迷你案例
题目给了一个 misc.zip,解压后得到 image.png,但图片打不开。
最小环境闭环:
- 看类型:
file image.png- 看文件头:
xxd -l 32 image.png- 搜可读线索:
strings -a image.png | head -30- 扫嵌入内容:
binwalk image.png如果 file 显示 data,但 xxd 看到文件头接近 PNG,只是前几个字节损坏,就可以修复文件头再打开。如果 binwalk 发现尾部 ZIP,就提取后继续分析。
这道题用到的不是复杂工具,而是一套最小观察顺序。