02 — 渗透测试工作环境搭建
前言:本文把一台普通的 Linux 机器变成渗透测试工作机。不依赖任何安全发行版,也不限定发行版——Ubuntu、Debian、Fedora、Arch、openSUSE 都可以,命令用你系统的包管理器等价替换即可。工具可以从包管理器、GitHub、语言生态或源码获取,也可以自己写。核心是搭出「可复现、可隔离、随时能重置」的工作环境。
Part 1: 环境形态与准备
1.1 选物理机、虚拟机还是容器
| 形态 | 何时选它 |
|---|---|
| 虚拟机 | 大多数 Web/内网练习;快照回滚,练坏了直接恢复 |
| 容器 | 临时试用工具、跑靶场;启动快、环境干净 |
| 物理机 | 无线网卡、SDR、USB 串口、固件读写等硬件操作 |
| 云主机 | 需要公网 IP 的在线练习与长期服务 |
建议:日常主机保持干净,练习环境与主机隔离。物理机做硬件方向时,再单独准备一台备用机或双系统。
1.2 基础准备
# 系统更新与基础工具(按发行版选择对应包管理器)
# Debian/Ubuntu: sudo apt update && sudo apt upgrade
# Fedora/RHEL: sudo dnf upgrade
# Arch: sudo pacman -Syu
# 通用基础工具
git --version
curl --version
python3 --version工具获取的完整方法(包管理器 / GitHub Releases / pipx / go install / cargo / 源码编译 / 自研)见 工具获取与环境搭建。本文只讲环境层面的配置。
Part 2: 语言运行时
很多安全工具是脚本或需要编译,准备好以下运行时基本够用。
2.1 Python
系统自带的 Python 不要直接 pip install(很多发行版会拒绝或污染系统环境)。使用 pipx 或虚拟环境:
# pipx:为每个工具创建独立环境,最适合安装安全工具
python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install sqlmap
pipx install impacket
pipx install volatility3
# 项目开发用 venv
python3 -m venv ~/venvs/pentest
source ~/venvs/pentest/bin/activate
pip install requests pwntools2.2 Go
# 安装 Go:用包管理器,或从 https://go.dev/dl/ 下载官方压缩包
# 配置模块代理(国内网络)
go env -w GOPROXY=https://goproxy.cn,direct
# 安装 Go 写的安全工具(自动编译到 ~/go/bin)
go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
go install github.com/ffuf/ffuf/v2@latest
# 确保 ~/go/bin 在 PATH 中
echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc2.3 Node.js
# 建议用 nvm 管理 Node 版本,避免系统包版本过旧
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
nvm install --lts
# 安装 JS 安全工具
npm install -g http-proxy-to-socksPart 3: Rust 红队工具链
Rust 工具以「单文件、无运行时依赖、性能高」著称,非常适合红队场景。
3.1 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh预期输出:
Current installation options:
default host triple: x86_64-unknown-linux-gnu
default toolchain: stable
1) Proceed with standard installation (default)
2) Customize installation
3) Cancel installation
> 1选 1 回车,安装完成后加载环境:
source $HOME/.cargo/env
rustc --version3.2 Cargo 安装安全工具
cargo install rustscan # 高速端口扫描
cargo install feroxbuster # 递归目录爆破
cargo install x8 # 参数模糊测试
cargo install subxtract # 子域名枚举cargo install 是从源码编译,第一次会花几分钟。若想更快,可先看项目 Releases 有没有现成二进制。
3.3 编译失败排查
| 症状 | 原因 | 解决 |
|---|---|---|
error: linker 'cc' not found | 缺少 C 编译器 | 用包管理器安装 gcc/build-essential |
cannot find -lxxx | 缺少开发库 | 安装对应的 -dev/-devel 包,如 openssl |
编译中途 Killed | 内存不足触发 OOM | 关闭其他程序,或增加 swap |
| 下载依赖慢 | crates.io 网络 | 配置镜像:~/.cargo/config.toml |
# ~/.cargo/config.toml 国内镜像示例
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"Part 4: 工具的组织与批量安装
工具多了以后,统一管理比逐个记忆重要。
4.1 目录约定
mkdir -p ~/tools ~/wordlists ~/pentest/{targets,scans,loot}
echo 'export PATH="$HOME/tools:$HOME/go/bin:$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc| 目录 | 用途 |
|---|---|
~/tools | 手动下载的二进制工具 |
~/wordlists | 字典与 payload |
~/pentest/targets | 目标信息与笔记 |
~/pentest/scans | 扫描结果 |
~/pentest/loot | 获取的数据(授权范围内) |
4.2 安装脚本示例
把「获取工具」写成脚本,换机器时一条命令重建环境:
#!/bin/bash
# setup-tools.sh — 按需增减;安装方式优先官方渠道
set -e
# 1) 语言生态工具
pipx install sqlmap impacket 2>/dev/null || true
go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
go install github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
cargo install rustscan 2>/dev/null || true
# 2) GitHub 二进制工具(示例:下载 ffuf)
cd ~/tools
curl -LO https://github.com/ffuf/ffuf/releases/latest/download/ffuf_2.1.0_linux_amd64.tar.gz
tar xzf ffuf_*_linux_amd64.tar.gz && rm ffuf_*_linux_amd64.tar.gz
# 3) 字典
[ -d ~/wordlists/SecLists ] || git clone --depth 1 \
https://github.com/danielmiessler/SecLists.git ~/wordlists/SecLists
echo "工具环境就绪"自己写脚本封装重复操作,是红队能力的核心之一。参见 Bash 武器化。
Part 5: 外接设备驱动
物理机的独特价值在于硬件直通:无线网卡、蓝牙、USB 串口、SDR。
5.1 无线网卡(monitor mode + 注入)
内置网卡(通常为 Intel 芯片)大多不支持监听模式与包注入,无线审计需要外接 USB 网卡。
| 型号 | 芯片 | 频段 | 备注 |
|---|---|---|---|
| Alfa AWUS036ACH | RTL8812AU | 2.4G + 5G | 经典选择 |
| Alfa AWUS1900 | RTL8814AU | 2.4G + 5G | 四天线 |
| Panda PAU09 | RTL8812AU | 2.4G + 5G | 性价比高 |
| Alfa AWUS036H | RTL8187L | 2.4G | 老款,兼容性好 |
安装驱动与固件(RTL8812AU 通常需要 DKMS 驱动):
# 方式一:发行版仓库或 AUR 等社区仓库中的 DKMS 包
# 方式二:从 GitHub 获取驱动源码,用 DKMS 编译安装
git clone https://github.com/aircrack-ng/rtl8812au.git
cd rtl8812au && sudo make dkms_install
# 验证
lsusb | grep -i realtek
ip link show # 应出现 wlanX 接口
sudo airmon-ng start wlan1 # 开启监听模式若
airmon-ng显示wlan1mon,说明监听模式启用成功。无法注入时先检查芯片型号与驱动,而不是换工具。
5.2 蓝牙
# 安装蓝牙工具(bluez 通常已随系统安装)
# 启动服务(systemd 系统)
sudo systemctl enable --now bluetooth
# bettercap 支持 BLE 侦察
bettercap -eval "ble.recon on"5.3 USB 串口与固件
# 串口终端工具
screen /dev/ttyUSB0 115200 # 退出:Ctrl+A 然后 K
# SPI 闪存读写(硬件级固件提取)
flashrom -p ch341a_spi -r firmware.bin需要硬件:CH341A 编程器 + SOP8 测试夹。串口设备权限问题:把用户加入
dialout(Debian/Ubuntu)或uucp(Arch)组后重新登录。
5.4 SDR(软件定义无线电)
# 安装 SDR 框架与工具(包管理器,名称随发行版略有差异)
# gnuradio、gqrx、rtl-sdr、urh 等推荐硬件:RTL-SDR Blog V3/V4(约 200 元),可接收 24MHz–1.7GHz 信号,适合入门射频分析。
Part 6: Docker 靶场
用容器快速起本地漏洞靶场,不需要联网,也不影响主机环境:
# 安装 Docker(用发行版包管理器),启动服务并加入用户组
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# 重新登录后生效# 常用靶场
docker run -d -p 80:80 vulnerables/web-dvwa # DVWA
docker run -d -p 3000:3000 bkimminich/juice-shop # OWASP Juice Shop
docker run -d -p 8080:8080 webgoat/goatandwolf # WebGoat访问地址:
- DVWA →
http://localhost - Juice Shop →
http://localhost:3000 - WebGoat →
http://localhost:8080/WebGoat
安全提醒:漏洞靶场只监听
localhost。不要用-p 0.0.0.0:80:80暴露到公网。练习结束用docker rm -f <容器名>清理。
Part 7: 环境自检与排查
# 一键自检
for t in git curl python3 go cargo docker nmap; do
command -v $t >/dev/null && echo "OK $t" || echo "MISS $t"
done| 问题 | 排查方向 |
|---|---|
工具 command not found | PATH 是否包含 ~/tools、~/go/bin、~/.cargo/bin |
permission denied | 可执行权限 / 设备组权限(重新登录) |
| 无线无法注入 | 芯片是否支持、驱动是否安装、是否被 NetworkManager 接管 |
| 编译缺库 | 安装对应开发包 |
| Docker 权限被拒 | 是否加入 docker 组并重新登录 |
| pip 拒绝系统安装 | 改用 pipx 或 venv |
附录: 物理机要点
- 不要用 root 日常操作:需要特权的命令单独
sudo - 组变更需要重新登录:
usermod -aG不是立即生效 - 时刻注意网络边界:只对授权目标测试
- 硬件直通是物理机优势:无线、SDR、USB 串口是虚拟机做不了的
- 编译会占满 CPU:
cargo install、make期间风扇狂转属正常 - 磁盘空间:全套工具 + 靶场镜像约占 30–50 GB
- 环境可重建:把安装步骤写成脚本,随时换机器