服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-11-06 简米科技 3,613 字 9 分钟阅读

虚拟机安装pwn环境详细步骤是怎样的?,虚拟机怎么安装pwn环境

导读虚拟机安装pwn环境的完整流程是:先创建Ubuntu虚拟机并完成换源、SSH等基础配置,再依次安装Python3、pip、pwntools,随后部署pwndbg、ROPgadget等调试工具,最后通过运行测试脚本验证环境可用,全程约40分钟,虚拟机安装pwn环境,先用对“容器”才不会白折腾日常做CTF PWN题……

虚拟机安装pwn环境的完整流程是:先创建Ubuntu虚拟机并完成换源、SSH等基础配置,再依次安装Python3、pip、pwntools,随后部署pwndbg、ROPgadget等调试工具,最后通过运行测试脚本验证环境可用,全程约40分钟。

虚拟机安装pwn环境,先用对“容器”才不会白折腾

日常做CTF PWN题,大家几乎都在Linux下完成,而Windows宿主直接用虚拟机装Ubuntu是多数人的选择,这个环节纠结最少的是系统选型,但第一步走错后面处处别扭。

VMware和VirtualBox哪个适合装pwn环境

VMware Workstation Pro和VirtualBox是两款主流虚拟机,都支持嵌套虚拟化和快照功能,行业共识认为,前者在硬件直通和稳定性上更好,后者的优势是完全免费开源,对入门者来说,选VirtualBox足够应对90%的PWN场景,但如果你的电脑经常同时跑多个虚拟机,VMware的资源调度明显更平稳。

一个关键点在于快照功能,PWN题经常需要反复调试同一个二进制文件,配合快照可以随时回滚到干净状态,避免重复搭建,不论选哪款,安装完成后建议顺手建立第一个快照。

虚拟机安装pwn环境时的Ubuntu版本选择

Ubuntu 20.04和22.04是当前PWN圈使用率最高的两个版本,20.04的glibc版本是2.31,对应很多老题目的环境;22.04带的glibc是2.35,新题和各大比赛常用,如果你不确定打什么题,装22.04更合适,因为libc-database和pwninit等工具对新版本适配更积极。

镜像建议从国内高校源下载ISO,速度比官网快很多,中科大、清华的镜像站都有长期稳定地址,安装时勾选“为图形或无线硬件安装第三方软件”,省去一些驱动的麻烦。

Ubuntu虚拟机创建后的三项基础配置

系统装完先别急着装工具,三个配置不做,后面处处卡壳。

换国内apt源

Ubuntu默认源在国内拉包速度很慢,打开软件与更新,把下载服务器换成简米云或清华镜像,这一步做完后,sudo apt update的速度能提升十数倍。

安装SSH服务

后续很多PWN操作其实不需要图形界面,通过SSH从宿主机连进虚拟机反而更顺手,复制命令也比在虚拟机窗口里方便。

sudo apt install -y openssh-server
sudo systemctl enable ssh

用宿主机连接时,IP地址用 ip addr 查看,NAT模式下通常是192.168.x.x段。

设置共享文件夹

VMware菜单的“虚拟机设置”里,新增一个共享文件夹指向宿主机存放题目的目录,这样下载的题目直接放到该目录,虚拟机内用 /mnt/hgfs/共享名 访问,省去来回拷贝的麻烦。

在Ubuntu虚拟机中安装pwntools和调试工具

这是整个流程的核心部分,也是新手最容易踩坑的地方,推荐顺序是先装Python依赖、再装pwntools、最后装调试工具,每一步验证通过再继续。

通过pip安装pwntools的完整命令

Ubuntu 22.04自带Python 3.10,直接使用系统pip即可。

sudo apt install -y python3-pip python3-dev git gdb
pip3 install pwntools

如果你用的是Ubuntu 23.04以上版本,pip安装时提示“externally-managed-environment”,需要加参数:

pip3 install pwntools --break-system-packages

验证是否装好,在终端输入:

python3 -c "from pwn import ; print(elf_check('ls'))"

能正常输出ls的架构信息就说明pwntools核心模块可用。

安装pwndbg增强GDB调试体验

GDB本身不带PWN题常用的peda或pwndbg插件。pwndbg是目前社区维护最活跃的GDB增强插件,对堆调试支持完善。

git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

安装脚本会自动下载依赖并写入~/.gdbinit,完成后输入gdb,出现pwndbg提示符即成功。

配套安装ROPgadget和one_gadget

这两个工具用于查ROP链和one gadget地址,同样通过pip安装:

pip3 install ROPgadget
gem install one_gadget

one_gadget需要Ruby环境,如果系统没装,先执行 sudo apt install ruby-full,平时做题时,checksec自带在pwntools里,不用额外装,直接命令行输入checksec即可。

用一块实际PWN题目验证虚拟机环境是否就绪

工具装完不代表环境没问题,最稳妥的验证方法是用一道真实的PWN题跑一遍流程,下面这个例子采用的是一道典型的ret2text题目,代码逻辑是把栈溢出后返回地址改成后门函数。

用checksec快速识别防护机制

checksec ./pwn_test

输出会显示ARCH、RELRO、Stack Canary、NX、PIE等字段,看到NX enabled和PIE enabled,就要考虑ROP或者利用partial overwrite等方式。

用pwntools写本地验证脚本

from pwn import 
context.log_level = 'debug'
context.arch = 'amd64'
p = process('./pwn_test')
elf = ELF('./pwn_test')
payload = b'A'  0x18 + p64(elf.symbols['backdoor'])
p.sendline(payload)
p.interactive()

脚本能成功执行并弹出shell交互界面,就说明pwntools的process启动、ELF符号解析、payload发送全链路正常,GDB断点调试也和pwndbg配合无冲突。

调试工具的联动测试

在gdb中运行:

b main
r

pwndbg会自动打印反汇编、寄存器快照和栈布局,如果看到context窗口正常输出,说明调试环境没问题。

常见问题排查方法

pip安装时提示找不到包版本,多数是网络问题,换成清华PyPI源:

pip3 install pwntools -i https://pypi.tuna.tsinghua.edu.cn/simple

pwndbg的setup.sh执行到一半报错,通常是因为系统缺少编译链,先执行 sudo apt install -y build-essential cmake 再重跑。

gdb启动时提示“not in executable format”,说明当前目录下的文件不是可执行文件,用 file 文件名 确认一下。

pwn题打不通,本地验证没问题但远程不行,大概率是libc版本不匹配,用 libc-database 匹配远程版本,再结合one_gadget找到可用的gadget地址。

q&a问答

q1:虚拟机安装pwn环境后性能很卡怎么办?

给虚拟机分配内存建议不低于4GB,CPU核心数分配2-4个,如果你用VirtualBox,在“设置-系统-处理器”里开启 “启用PAE/NX” 和 “启用嵌套VT-x/AMD-V”,平时做题关掉虚拟机内的桌面动画效果,能明显感觉更流畅。

q2:宿主机是macOS,用虚拟机装pwn环境有区别吗?

macOS用VMware Fusion或UTM都可以,流程与Windows完全一致,Ubuntu镜像也是通用x86_64版本,唯一需要注意的是Apple Silicon芯片的Mac需要找ARM版Ubuntu镜像,部分pwndbg功能在ARM下有兼容问题,建议购题集中练习的选手优先用云服务器代替虚拟机,按小时计费价格也不高。

q3:不想看教程,有没有一键安装pwn环境的脚本?

网上有一些自动脚本,比如pwndocker镜像项目封装了大部分工具,但脚本也会出问题,而且调试工具报错时,如果你不清楚底层是哪个组件出了问题,修起来更费劲,自己动手装一遍,出错时还能定位到具体环节。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱