渗透测试工作站搭建:Kali + Wave + Zsh + Tmux + 工具集整合实践

前言

在开始任何渗透测试工作之前,搭建一个可靠高效的工作环境至关重要。这包括组织工具、配置系统,以及确保所有必要资源随时可用。通过尽早建立结构良好的测试基础架构,我们可以减少停机时间、最大程度地减少错误并简化评估流程。

一、虚拟化环境准备

推荐使用 VMware 专业版 创建 Kali 虚拟机,并安装 VMware Tools,以启用如剪贴板共享、文件拖拽、自动分辨率等增强功能,提升日常使用体验。专业版破解安装教程请自行搜索。

二、Linux

Linux 是渗透测试中使用最广泛的操作系统。因此,我们必须精通它(或者至少熟悉它)。为此目的设置操作系统时,最好建立标准化配置,以始终如一地营造一个舒适的工作环境。


2.1 安装kali linux

建议下载官方 Kali Linux 镜像 并导入 VMware 使用。安装教程请自行搜索。

2.2 APT包管理器和更新

在成功安装 Kali Linux 后,第一步应该是更新系统,确保你使用的是最新的内核、工具和安全补丁。Kali 基于 Debian,因此使用 APT(Advanced Packaging Tool)进行包管理。


2.2.1 APT 与包管理概述

APT 是 Debian 衍生系统的标准包管理工具,用于处理 .deb 格式的包。APT 会从你系统配置的 软件仓库(repositories) 获取可用软件列表,并自动解决依赖关系。

Kali 的仓库地址通常存储在以下路径:

bash 复制代码
/etc/apt/sources.list

我们可以通过以下命令查看非注释的仓库地址:

bash 复制代码
cat /etc/apt/sources.list | grep -v "^#"

输出如下所示

复制代码
deb http://http.kali.org/kali kali-rolling main contrib non-free non-free-firmware

2.2.2 使用 APT 更新系统

运行以下命令来完成系统更新、自动清理不必要的软件包:

bash 复制代码
sudo apt update -y && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo apt autoclean -y

说明:

  • update:同步本地包索引
  • full-upgrade:更新已安装的软件包
  • autoremove:删除不再使用的依赖
  • autoclean:清理无用的缓存包文件

2.3 渗透测试工具

虽然 Kali 自带了大量渗透测试工具,但你可能会根据实际需求拓展工具集。下面是常见的渗透测试工具清单,你可以在左上角的应用中搜索他们以确定是否已经安装。当然,有工具未自带是难免的,接下来我会介绍两种安装工具的方法。

bash 复制代码
# 网络扫描与嗅探
nmap
netcat
tcpdump
wireshark
ffuf
gobuster

# 攻击与利用
hydra
sqlmap
metasploit-framework
crackmapexec

# 信息收集
theharvester
spiderfoot
zaproxy

# Windows 渗透/远程控制
remmina
xfreerdp
rdesktop

# 通用工具
curl
git
vim
tmux
...

2.3.1 使用apt安装工具

✅ 方法一:直接手动安装

如果你只需要其中几个工具,可以手动安装:

bash 复制代码
sudo apt install netcat nmap wireshark tcpdump git vim tmux -y
✅ 方法二:使用列表批量安装

创建 tools.list 文件,将工具名按行列出,然后使用以下命令批量安装:

bash 复制代码
sudo apt install $(cat tools.list | tr "\n" " ") -y

这确保你在每次搭建 Kali 环境时都能一致地完成工具部署。


2.3.2 安装 GitHub 上的工具

Kali 官方仓库并不包含所有社区工具,有时我们需要从 GitHub 拉取

为了更好的管理github上下载的工具,建议新建一个统一的文件夹来管理所有从 GitHub 下载的工具。示例目录如下:

复制代码
/home/kali/tools/
├── linpeas/
├── winpeas/
├── AutoRecon/
├── PEASS-ng/
├── fuzzing-tools/
└── other-scripts/

新建文件夹~/tools

bash 复制代码
mkdir -p ~/tools
cd ~/tools

克隆需要的项目工具

bash 复制代码
git clone https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite.git

为了让这些脚本变成直接可用的命令(而不是需要cd到目录去使用工具),一般会采用软链接和写入$PAHT的方式

✅ 方法一:将可执行脚本链接到 /usr/local/bin/(系统级命令)

示例:将 linpeas.sh 设置为全局命令

bash 复制代码
# 克隆项目到 ~/tools(可自定义)
mkdir -p ~/tools
cd ~/tools
git clone https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite.git

# 添加执行权限
chmod +x ~/tools/privilege-escalation-awesome-scripts-suite/linPEAS/linpeas.sh

# 创建软链接到 /usr/local/bin
sudo ln -s ~/tools/privilege-escalation-awesome-scripts-suite/linPEAS/linpeas.sh /usr/local/bin/linpeas

完成后你就可以直接在终端运行:

bash 复制代码
linpeas

适用于

  • 少量核心工具
  • 喜欢系统命令风格
  • 不介意使用 sudo
✅ 方法二:统一放入 ~/tools/bin/,并添加到 PATH 环境变量中

这种方式更适合集中管理大量脚本,不污染系统目录,也更易于迁移与备份

示例:将 linpeas.sh 链接到 ~/tools/bin

bash 复制代码
# 克隆项目到 ~/tools
mkdir -p ~/tools
cd ~/tools
git clone https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite.git

# 添加执行权限
chmod +x ~/tools/privilege-escalation-awesome-scripts-suite/linPEAS/linpeas.sh

# 创建 bin 目录(若不存在)
mkdir -p ~/tools/bin

# 链接主脚本到 ~/tools/bin/
ln -s ~/tools/privilege-escalation-awesome-scripts-suite/linPEAS/linpeas.sh ~/tools/bin/linpeas

# 添加 tools/bin 到 PATH(只需做一次),这里需要注意你用的shell是bash还是zsh,不同shell是分别管理各自的path的,可以用 echo $SHELL 确认你当前的shell
echo 'export PATH="$PATH:$HOME/tools/bin"' >> ~/.bashrc
source ~/.bashrc

echo 'export PATH="$PATH:$HOME/tools/bin"' >> ~/.zshrc
source ~/.zshrc

然后就可以全局运行:

bash 复制代码
linpeas

适用于

  • 维护多个工具脚本
  • 喜欢集中管理和易迁移
  • 不希望修改系统目录

2.4 快照

安装相关软件包和存储库后,强烈建议进行一次备份VM snapshot。如果在执行进一步的配置或测试时出现任何错误,我们可以简单地恢复快照并从工作状态继续。每次重大配置更改后,甚至在渗透测试期间定期拍摄快照都是很好的做法,以避免丢失宝贵的进展。

三、现代终端仿真器:Wave Terminal

Wave Terminal 是一款专为开发者设计的新型终端仿真器,旨在通过将现代 AI 驱动的功能与传统的命令行功能相结合来增强工作流程。该终端的最大优势之一是,您可以将所有内容(包括基于 Chromium 的浏览器)集中在一个地方(如下所示),从而减少了在不同窗口之间切换的麻烦。

1. 下载 .deb 安装包

我们可以在 wave官网下载安装包

2. 使用 APT 安装

bash 复制代码
sudo apt install ./waveterm.deb

注意:如果你放在桌面,路径应为 ~/Desktop/waveterm.deb

3. 启动 Wave Terminal

bash 复制代码
waveterm

首次运行会进入欢迎页面,可点击 "Get Started" 快速上手。

四、Shell 环境:Zsh + Oh My Zsh

Shell 是我们在渗透测试虚拟机中使用的主要环境。因此,我们需要确保该环境能够满足我们的所有需求,并按照我们想要的方式进行配置。

最具可定制性和功能丰富的 shell 之一是Z Shell (ZSH)

4.1 安装 Zsh

bash 复制代码
sudo apt install zsh -y

安装完你可以手动启动一次:

bash 复制代码
zsh

首次运行 Zsh 会出现「zsh-newuser-install」,即一个蓝色提示框,提示你进行初始配置。直接按 q 退出,因为你后面会用 Oh My Zsh 来管理配置。

4.2 安装 Oh My Zsh

bash 复制代码
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

执行完后你的默认提示符就会变成:

复制代码
➜ ~

4.3 安装两个核心插件

这两个插件非常常用:

bash 复制代码
# 命令补全建议
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# 语法高亮
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

这些插件默认会被克隆到:

复制代码
~/.oh-my-zsh/custom/plugins/

4.4 配置 .zshrc 启用插件

打开配置文件:

bash 复制代码
vim ~/.zshrc

找到:

bash 复制代码
plugins=(git)

修改为:

bash 复制代码
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

保存并重新加载:

bash 复制代码
source ~/.zshrc

现在你会看到输入历史建议、命令高亮都启用了

4.5 安装 Powerlevel10k 主题

Powerlevel10k 是一个为 Zsh 设计的 高性能、可高度定制的 Shell 主题 ,以其美观、信息丰富、响应迅速而著称。可以使用以下命令安装:

bash 复制代码
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc
exec zsh

第一次运行会弹出图形化配置引导,全程按提示选择你喜欢的图标、Git 显示等即可,之后它会自动保存为 .p10k.zsh 并在 .zshrc 中引用。如果有不懂的提示就问问 ai 大人吧。

如果以后想重配,运行:

bash 复制代码
p10k configure

4.6 设置 zsh 为默认 Shell

在安装Oh My Zsh时会询问你是否设置zsh为默认shell,如果当时没有选择确认,可以用以下命令设置:

bash 复制代码
chsh -s $(which zsh)

重启终端或注销再登录,默认就进 zsh。

五、终端多路复用:Tmux

Tmux(Terminal Multiplexer) 是一款运行于终端的 多路复用器 ,允许用户在一个终端窗口中同时运行、管理多个会话(Session)、窗口(Window)和窗格(Pane)。

除去在一个终端中拆分多个窗格,实现多任务并行的优势外,更重要的是其持久会话的功能,可以使得运行长时间任务(如爆破/抓包),断线后无损恢复。


5.1 安装 Tmux 和 TPM(插件管理器)

bash 复制代码
sudo apt update && sudo apt install tmux -y

# 克隆 TPM(Tmux Plugin Manager)
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

5.2 创建并配置 .tmux.conf

执行:

bash 复制代码
vim ~/.tmux.conf

然后粘贴以下配置(后续可按需修改):

tmux 复制代码
# Config Management
unbind r
bind r source-file ~/.tmux.conf \; display "Config reloaded."

# Control
set -g prefix C-space
set -g mouse on

# History
set-option -g history-limit 50000

# Numbering & Naming
set -g base-index 1
setw -g pane-base-index 1
set-option -g automatic-rename on
set-option -g automatic-rename-format '#{b:pane_current_path}'

# Windows
unbind W
bind-key W command-prompt -p "Window name:" "new-window -n '%%'" # New Window
bind-key t command-prompt -p "New name:" "rename-window '%%'"   # Rename Window

# Switch Windows
bind-key 0 select-window -t 0
bind-key 1 select-window -t 1
bind-key 2 select-window -t 2
bind-key 3 select-window -t 3
bind-key 4 select-window -t 4
bind-key 5 select-window -t 5
bind-key 6 select-window -t 6
bind-key 7 select-window -t 7
bind-key 8 select-window -t 8
bind-key 9 select-window -t 9

# Panes
bind-key P command-prompt -p "Rename pane:" "select-pane -T '%%'"

bind x split-window -v
bind y split-window -h

bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R

# List of plugins
set -g @plugin 'tmux-plugins/tpm'

# Theme
set -g @plugin 'catppuccin/tmux#v2.1.3'
run ~/.config/tmux/plugins/catppuccin/tmux/catppuccin.tmux

# Options to make tmux more pleasant
set -g mouse on
set -g default-terminal "tmux-256color"

# Configure the catppuccin plugin
set -g @catppuccin_flavor "mocha"
set -g @catppuccin_window_status_style "rounded"

#----------------------------- Custom Theme
# Define color variables inspired by Catppuccin Mocha, mapped to HackTheBox colors
set -g @rosewater "#ffffff"       # BrightWhite
set -g @flamingo "#ff8484"        # BrightRed
set -g @pink "#c16cfa"            # BrightPurple
set -g @mauve "#9f00ff"           # Purple
set -g @red "#ff3e3e"             # Red
set -g @maroon "#ff8484"          # BrightRed
set -g @peach "#ffcc5c"           # BrightYellow
set -g @yellow "#ffaf00"          # Yellow
set -g @green "#9fef00"           # Green
set -g @teal "#2ee7b6"            # Cyan
set -g @sky "#5cecc6"             # BrightCyan
set -g @sapphire "#5cb2ff"        # BrightBlue
set -g @blue "#004cff"            # Blue
set -g @lavender "#ffffff" #"#c16cfa"        # BrightPurple
set -g @text "#a4b1cd"            # Foreground
set -g @subtext1 "#666666"        # BrightBlack
set -g @subtext0 "#313f55"        # SelectionBackground
set -g @overlay2 "#666666"        # BrightBlack
set -g @overlay1 "#313f55"        # SelectionBackground
set -g @overlay0 "#313f55"        # CursorColor
set -g @surface2 "#666666"        # BrightBlack
set -g @surface1 "#313f55"        # SelectionBackground
set -g @surface0 "#313f55"        # CursorColor
set -g @base "#1a2332"            # Background
set -g @mantle "#000000"          # Black
set -g @crust "#000000"           # Black
set -g @thm_bg "#1a2332"

# Plugins
set -g @plugin 'tmux-plugins/tmux-online-status'
set -g @plugin 'tmux-plugins/tmux-battery'

# Configure Online
set -g @online_icon "ok"
set -g @offline_icon "nok"

# Status bar position and transparency
set -g status-position bottom
set -g status-style "bg=#{@thm_bg},fg=#{@text}"  # Transparent background

# Status left: Session name, pane command, and path
set -g status-left-length 100
set -g status-left ""
set -ga status-left "#{?client_prefix,#{#[bg=#{@red},fg=#{@base},bold]  #S },#{#[bg=default,fg=#{@mauve}]  #S }}"
set -ga status-left "#[bg=default,fg=#{@overlay0}] │ "
set -ga status-left "#[bg=default,fg=#{@blue}]  #{pane_current_command} "
set -ga status-left "#[bg=default,fg=#{@overlay0}] │ "
set -ga status-left "#[bg=default,fg=#{@teal}]  #{=/-32/...:#{s|$USER|~|:#{b:pane_current_path}}} "
set -ga status-left "#[bg=default,fg=#{@overlay0}]#{?window_zoomed_flag, │ ,}"
set -ga status-left "#[bg=default,fg=#{@yellow}]#{?window_zoomed_flag,  zoom ,}"

# Status right: Battery, online status, VPN status, date/time
set -g status-right-length 100
set -g status-right ""
set -ga status-right "#{?#{e|>=:10,#{battery_percentage}},#{#[bg=#{@red},fg=#{@base}]},#{#[bg=default,fg=#{@peach}]}} #{battery_icon} #{battery_percentage} "
set -ga status-right "#[bg=default,fg=#{@overlay0}] │ "
set -ga status-right "#[bg=default]#{?#{==:#{online_status},ok},#[fg=#{@sapphire}] 󰖩 on ,#[fg=#{@red},bold] 󰖪 off }"
set -ga status-right "#[bg=default,fg=#{@overlay0}] │ "
set -ga status-right "#[bg=default,fg=#{@green}]  #(~/vpn_status.sh) "
set -ga status-right "#[bg=default,fg=#{@overlay0}] │ "
set -ga status-right "#[bg=default,fg=#{@sky}] 󰭦 %Y-%m-%d 󰅐 %H:%M "

# Window status with rounded tabs and extra padding
set -g window-status-format "#[fg=#{@overlay0}]#[fg=#{@text},bg=#{@overlay0}]  #I:#W  #[fg=#{@overlay0},bg=default]"
set -g window-status-current-format "#[fg=#{@green}]#[fg=#{@base},bg=#{@green}]  #I:#W  #[fg=#{@green},bg=default]"
set -g window-status-style "bg=default"
set -g window-status-last-style "bg=default,fg=#{@green}"
set -g window-status-activity-style "bg=#{@red},fg=#{@base}"
set -g window-status-bell-style "bg=#{@red},fg=#{@base},bold"
set -gF window-status-separator "  "  # Add space between window tabs

# Pane borders
setw -g pane-border-status off  # Hide pane border status
setw -g pane-active-border-style "bg=default,fg=#{@green}"
setw -g pane-border-style "bg=default,fg=#{@surface0}"
setw -g pane-border-lines single

# Automatic window renaming
set -wg automatic-rename on
set -g automatic-rename-format "Window"

# Justify window status
set -g status-justify "absolute-centre"

# Simulate bottom padding by adding a blank line
set -g status-format[1] ""

# Bootstrap tpm
if "test ! -d ~/.tmux/plugins/tpm" \
   "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'"

# Initialize TMUX plugin manager
run '~/.tmux/plugins/tpm/tpm'

然后按:

text 复制代码
Ctrl + Space
Shift + i

你会看到插件安装提示。Tmux 将提示您按下ESCAPE以继续您的会话。如果一切成功,状态栏会更新为主题样式,表示插件生效了。

5.3 常用快捷键备忘

注意不是一起按,是先按Ctrl Space松开,再按功能键

快捷键 功能说明
Ctrl + Spacex 垂直拆分窗格
Ctrl + Spacey 水平拆分窗格
Ctrl + Spaceh/j/k/l 窗格间导航
Ctrl + Spacer 重载配置文件
Ctrl + SpaceShift + i 安装所有插件(TPM)

六、效率工具推荐

在本节中,我们将介绍一些其他工具,以进一步提高生产力和效率。

6.1 FZF

FZF 是一个基于终端的模糊查找器,旨在通过模糊匹配以交互方式过滤和搜索列表。它允许我们搜索字符串以匹配散布在另一个字符串中的项目,并立即获得反馈。基本上,它取代了 find 命令,因为 find 命令通常会产生大量的输入,需要我们筛选,而无法过滤掉某些字符串。

要安装 FZF,我们可以使用以下命令:

shell 复制代码
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

安装后,我们可以编辑.zshrc文件并为fzf命令分配别名为ff

复制代码
vim .zshrc

加入以下内容

复制代码
# Aliases
alias ff="fzf --style full --preview 'fzf-preview.sh {}' --bind 'focus:transform-header:file --brief {}'"

重新加载.zshrc文件。

复制代码
source ~/.zshrc

在终端输入ff,它将打开一个交互式界面,您可以在其中看到当前目录的内容以及特定文件的内容

6.2 EZA

Eza 是命令 的现代替代品ls。它提供丰富多彩、详细的文件列表,其中包含 Git 状态、图标以及超链接等高级功能。此外,如果您使用Nerd 字体,它还会使用颜色和可选图标来区分文件类型。我们甚至可以编辑 Eza 使用的主题和颜色。

由于它ls是我们在 Linux 系统上使用的最常用命令之一,因此拥有一个更好、更高效的工具可以让我们的生活长期变得更加轻松。要安装它,我们可以运行以下命令:

复制代码
sudo apt install eza -y

现在,我们可以为eza命令分配不同的别名来获取列表的不同表示。

复制代码
vim ~/.zshrc

加入以下内容

bash 复制代码
# Aliases
alias ff="fzf --style full --preview 'fzf-preview.sh {}' --bind 'focus:transform-header:file --brief {}'"
alias ls='eza $eza_params'
alias l='eza --git-ignore $eza_params'
alias ll='eza --all --header --long $eza_params'
alias llm='eza --all --header --long --sort=modified $eza_params'
alias la='eza -lbhHigUmuSa'
alias lx='eza -lbhHigUmuSa@'
alias lt='eza --tree $eza_params'
alias tree='eza --tree $eza_params'

编辑.zshrc文件后我们需要重新加载它。

复制代码
source ~/.zshrc

现在,我们可以测试不同的命令并检查结果,简单来说:

  • 简洁查看(ls
  • Git 感知(l
  • 详细列表(ll, llm, la, lx
  • 树状结构(lt, tree

6.3 Btop

Btop 是一款终端系统监控工具,可以替代htoptop工具。它色彩丰富,并可根据您的需求和偏好进行自定义。它可以监控 CPU、内存、磁盘、网络和进程,是调试性能问题的绝佳工具。可以使用以下命令安装该工具:

复制代码
sudo apt install btop -y

七、HTTP工具:Curlie

Curlie

Curlie 是一个结合了 curl 的强大功能和 httpie 的易读输出格式的命令行 HTTP 客户端,旨在提供更直观、更美观、更高效的 API 调试体验。我们可以使用以下命令下载该工具:

复制代码
curl -sS https://webinstall.dev/curlie | bash

现在,让我们通过请求相同的 API 端点curlie进行比较。

如您所见,它以用户友好的方式提供了丰富多彩且结构化的输出,并比curl 提供了更多信息,使请求分析和调试变得更加容易。


通过以上配置,你的 Kali 虚拟机已经具备了一个高效、稳定、可扩展的基础环境。后续可以根据实际需求逐步添加工具和插件,保持环境整洁、可控,将极大提升日常的渗透测试体验。

参考资料

Hack The Box: Setting Up Module

宇宙安全声明

本博客所提供的内容仅供学习与交流,旨在提高网络安全技术水平,谨遵守国家相关法律法规,请勿用于违法用途,博主不对任何人因使用博客中提到的技术或工具而产生的任何后果负责。如果您对文章内容有疑问,可以留言私信。