2、虚拟机搭建:VMware/VirtualBox安装、Ubuntu 20.04 LTS 系统安装与配置

好,咱们正式开始动手了。这一章说白了就是搭窝——把二进制漏洞利用的“实验室”给建起来。我见过太多新手,环境没配好就开始搞 exploit,结果各种莫名其妙的问题,最后发现是虚拟机配置的锅。嗯,咱们别走弯路,一次搞定。

2.1 选哪个虚拟机?VMware 还是 VirtualBox?

我个人习惯用 VMware Workstation Pro,原因很简单:稳定、快、对 Linux 内核支持好。但 VirtualBox 免费开源,也完全够用。怎么选?看下面这张表:

特性 VMware Workstation Pro VirtualBox
价格 付费(有试用期) 免费开源
性能 更优,尤其 I/O 密集场景 够用,但稍逊一筹
快照/克隆 支持,且速度快 支持,但稍慢
3D 加速 好 一般
调试兼容性 对 GDB、pwndbg 等工具兼容性好 偶尔有小坑

我建议:如果你只是学习,VirtualBox 完全够用。但如果你打算长期做二进制安全研究,甚至跑一些复杂的 fuzzer 或调试器,VMware 会让你少掉很多头发。我在项目中遇到过 VirtualBox 下 GDB 断点命中后虚拟机直接卡死的奇葩问题,换 VMware 就没事了。

2.2 安装 VMware Workstation Pro

咱们以 VMware 为例,因为它在二进制安全圈子里更常见。安装过程其实很简单,但有几个细节要注意。

  1. 下载:去 VMware 官网下载 Workstation Pro 最新版。别下 Player 版,功能阉割太多。
  2. 安装:Windows 下双击 exe,一路 Next。Linux 下给 .bundle 文件加执行权限然后运行。
  3. 许可证:试用期 30 天,到期后要么买,要么……嗯,你懂的。我个人建议支持正版。
避坑指南:安装路径不要有中文!不要有空格!我曾经因为路径带了个空格,导致 VMware Tools 死活装不上,折腾了两小时才发现。

2.3 创建 Ubuntu 20.04 LTS 虚拟机

Ubuntu 20.04 LTS 是我做二进制漏洞利用的首选系统。为什么?因为它的内核版本(5.4)和 glibc 版本(2.31)刚好卡在一个“经典”的位置——既支持现代漏洞利用技术,又有大量现成的 exploit 和 writeup 可以参考。你想想看,用太新的内核,很多老的利用技巧就失效了;用太老的,又缺乏代表性。20.04 是个黄金平衡点。

创建步骤:

  1. 下载 ISO:去 Ubuntu 官网下载 20.04.6 LTS 桌面版 ISO。
  2. 新建虚拟机:VMware 里点“创建新的虚拟机”,选“典型(推荐)”。
  3. 选择 ISO:浏览到你下载的 Ubuntu 20.04 ISO 文件。
  4. 配置硬件:
    • 内存:至少 4GB,建议 8GB。做漏洞利用时经常要开多个终端和调试器,内存不够会卡死。
    • CPU:至少 2 核,建议 4 核。有些 fuzzer 是多线程的,核多跑得快。
    • 硬盘:至少 40GB,建议 80GB。你后面会装各种工具、下载源码、编译,空间很快就吃完了。
    • 网络:选 NAT 模式。桥接模式虽然也能用,但 NAT 更安全,虚拟机不会直接暴露在局域网里。
  5. 启动安装:开机后按提示安装 Ubuntu,语言选中文,键盘布局选 English (US)。
我的小技巧:安装时勾选“为图形或无线硬件安装第三方软件”,这样显卡驱动和 Wi-Fi 驱动能自动装好,省得后面折腾。

2.4 安装 VMware Tools 或 Open VM Tools

这一步很多人会忽略,但非常重要。VMware Tools 能让你在宿主机和虚拟机之间自由拖拽文件、复制粘贴文本,还能自动调整分辨率。没有它,你会觉得像在隔着毛玻璃干活。

安装方法:

# 更新包列表
sudo apt update

# 安装 open-vm-tools(推荐,比官方 VMware Tools 更稳定)
sudo apt install open-vm-tools open-vm-tools-desktop -y

# 重启
sudo reboot

重启后,试试从宿主机拖一个文件到虚拟机里。能拖进去,说明成功了。如果不行,检查一下 VMware 的“虚拟机”菜单里“重新安装 VMware Tools”是否已勾选。

我曾经踩过的坑:有一次我装了 open-vm-tools 后,复制粘贴还是失效。后来发现是剪贴板共享没开启。在 VMware 的“虚拟机设置”->“选项”->“客户机隔离”里,把“启用拖放”和“启用复制粘贴”都勾上就好了。

2.5 系统基础配置

系统装好了,工具也装好了,接下来做几项基础配置。这些配置看似琐碎,但能让你后续的工作流畅很多。

2.5.1 更换软件源

Ubuntu 默认的软件源在国外,下载速度很慢。换成国内镜像源,比如阿里云或清华的。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 编辑源文件
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

# 更新
sudo apt update && sudo apt upgrade -y

2.5.2 安装常用开发工具

做二进制漏洞利用,下面这些工具是标配:

sudo apt install -y \
  build-essential \
  gdb \
  gcc-multilib \
  g++-multilib \
  git \
  vim \
  curl \
  wget \
  net-tools \
  python3 \
  python3-pip \
  python3-dev \
  libssl-dev \
  libffi-dev \
  zlib1g-dev \
  libncurses5-dev \
  libgdbm-dev \
  libnss3-dev \
  libreadline-dev \
  libsqlite3-dev \
  libbz2-dev

这里面有几个重点:gcc-multilib 和 g++-multilib 是编译 32 位程序用的,很多 CTF 题目和旧版 exploit 都是 32 位的,没有这个你编译都过不了。gdb 是调试器,后面我们会装 pwndbg 或 gef 插件,但基础版先装上。

2.5.3 配置 Python 环境

Python 3 是必须的,很多漏洞利用脚本都用 Python 写。我建议用虚拟环境管理,避免包冲突。

# 安装 pip 和虚拟环境
sudo apt install python3-pip python3-venv -y

# 创建一个专门用于漏洞利用的虚拟环境
python3 -m venv ~/exploit_env

# 激活环境
source ~/exploit_env/bin/activate

# 安装常用库
pip install pwntools
pip install ropper
pip install capstone
pip install unicorn

pwntools 是 CTF 和漏洞利用的瑞士军刀,后面你会天天用到它。ropper 用来找 ROP gadget,capstone 是反汇编引擎,unicorn 是 CPU 模拟器。这些工具在后面的章节都会用到。

2.5.4 关闭 ASLR(可选,但建议)

做漏洞利用调试时,ASLR(地址空间布局随机化)会干扰你的分析。我建议在虚拟机里暂时关闭它,等学完了再打开。

# 临时关闭(重启后失效)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# 永久关闭
echo 'kernel.randomize_va_space = 0' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
注意:关闭 ASLR 只建议在虚拟机里做。真实环境或生产服务器上千万不要关,否则漏洞利用会变得太容易,安全风险极高。

2.6 验证环境

配置完了,咱们验证一下环境是否正常。写一个简单的 C 程序,编译并调试:

// test.c
#include <stdio.h>
#include <string.h>

void vulnerable(char *input) {
    char buffer[64];
    strcpy(buffer, input);
    printf("Hello, %s\n", buffer);
}

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("Usage: %s <input>\n", argv[0]);
        return 1;
    }
    vulnerable(argv[1]);
    return 0;
}

编译并调试:

# 编译(关闭栈保护,方便调试)
gcc -fno-stack-protector -z execstack -no-pie -g -o test test.c

# 用 GDB 调试
gdb ./test
(gdb) break vulnerable
(gdb) run AAAA
(gdb) info registers
(gdb) x/20x $rsp

如果 GDB 能正常启动、断点能命中、寄存器能显示,说明环境没问题。如果报错说缺少某个库,用 apt search 找到并安装即可。

我的经验:第一次调试时,如果发现 strcpy 没有触发栈溢出,别慌。检查一下编译选项是否加了 -fno-stack-protector。Ubuntu 20.04 默认开启了栈保护(canary),不加这个选项的话,strcpy 会被编译器自动替换成安全的 __strcpy_chk,你就看不到经典的栈溢出了。

2.7 快照:你的后悔药

环境配好了,第一件事就是拍快照。快照相当于游戏里的存档,万一你后面把系统搞崩了(相信我,你一定会搞崩的),一键恢复,不用重装。

在 VMware 里:虚拟机 -> 快照 -> 拍摄快照。命名成“初始环境已配置”。

以后每装一个重要的工具或库,都拍一个快照。我个人的习惯是:

  • 快照 1:初始系统(刚装完 Ubuntu)
  • 快照 2:基础工具(GCC、GDB、Python 等)
  • 快照 3:漏洞利用工具(pwndbg、pwntools、ROPgadget 等)
  • 快照 4:特定实验环境(比如装了特定版本的 glibc)

这样你可以在不同快照之间来回切换,非常灵活。

2.8 本章小结

嗯,到这一步,你的虚拟机环境就搭好了。我们装了 VMware,建了 Ubuntu 20.04 LTS,配了开发工具和 Python 环境,还拍了快照。整个过程大概需要 30-60 分钟,取决于你的网速和电脑性能。

下一章,我们会在这个环境里安装 pwndbg、gef 等调试插件,并配置一个完整的漏洞利用工作流。到时候你会发现,前面这些“苦力活”都是值得的。

记住:环境搭得好,漏洞挖到老。别偷懒,每一步都做扎实了。