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 pwntools

2.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 ~/.bashrc

2.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-socks

Part 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 --version

3.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 AWUS036ACHRTL8812AU2.4G + 5G经典选择
Alfa AWUS1900RTL8814AU2.4G + 5G四天线
Panda PAU09RTL8812AU2.4G + 5G性价比高
Alfa AWUS036HRTL8187L2.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 foundPATH 是否包含 ~/tools~/go/bin~/.cargo/bin
permission denied可执行权限 / 设备组权限(重新登录)
无线无法注入芯片是否支持、驱动是否安装、是否被 NetworkManager 接管
编译缺库安装对应开发包
Docker 权限被拒是否加入 docker 组并重新登录
pip 拒绝系统安装改用 pipx 或 venv

附录: 物理机要点

  1. 不要用 root 日常操作:需要特权的命令单独 sudo
  2. 组变更需要重新登录usermod -aG 不是立即生效
  3. 时刻注意网络边界:只对授权目标测试
  4. 硬件直通是物理机优势:无线、SDR、USB 串口是虚拟机做不了的
  5. 编译会占满 CPUcargo installmake 期间风扇狂转属正常
  6. 磁盘空间:全套工具 + 靶场镜像约占 30–50 GB
  7. 环境可重建:把安装步骤写成脚本,随时换机器

返回 实战教程总目录;工具获取细节见 工具获取与环境搭建