pwn 环境搭建-WSL(2025/04/05)
前言
ponder 在 4.5 凌晨为了图省事,想把 libc.so.6 从系统自带的地址搬到做题目录下,结果十分幽默地把
sudo cp /lib/x86_64-linux-gnu/libc.so.6 ./libc.so.6
写成了
sudo mv /lib/x86_64-linux-gnu/libc.so.6 ./libc.so.6
结果系统缺了 libc 直接炸了,ls 命令都执行不了……于是开始重装系统。顺便做下搭建 pwn 环境的入门手册,让初学者能少绕弯路。
1. 安装 WSL

首先启用 Hyper-V, Virtual Machine Platform, 适用于 Linux 的 Windows 子系统等虚拟机相关的功能,按要求重启,然后打开 cmd:
wsl --help
可以看到帮助信息。
wsl --list --online
可以看到可安装的有效分发列表(可能需要科学上网)。
打 pwn 题一般给的环境都是 Ubuntu 的,所以选择一款 Ubuntu 安装(建议 20.04/22.04):
wsl --install --location e:/wsl2_Ubuntu20.04 --name Ubuntu-20.04
--location 可以指定安装路径,避免安装在 C 盘导致系统盘过于臃肿 。
如果安装了多个版本的系统,可以通过
wsl --set-default Ubuntu-20.04
进行切换默认系统;
wsl --list
查询本地已安装的系统;
wsl -d Ubuntu-20.04
指定一个版本的系统启动。
系统第一次启动时会要求输入账户名和密码,这个可以随喜好设置。
2. 网络问题
为了在 wsl 上顺利地安装软件,首先要解决网络问题。最简单的方式就是使用虚拟机与物理机桥接(在这里又被成为Mirror镜像模式)的方式,这样只要物理机能科学上网,那 wsl 也能科学上网了。

目前网上一堆教程都是让你怎么改配置文件的,其实可以直接用官方的 GUI. 首先打开 wsl settings,选择网络,在网络模式里面选择 Mirrored 就可以切换到镜像模式了。(Windows 上科学上网软件推荐使用 Clash Verge)

当然,我太穷了,买不起高带宽的机场,下载软件的速度还是很慢。那么有没有什么不用代理也能高速下载到软件的方法呢?有的兄弟,有的,像这样的镜像站还有很多个,比如清华源、科大源。我们可以通过下面的操作来配置镜像源:
初始软件源的位置一般在这里(传统格式):
/etc/apt/sources.list
但在我的 Ubuntu-22.04 中打开这个文件会告诉我下面的信息:
# Ubuntu sources have moved to the /etc/apt/sources.list.d/ubuntu.sources
# file, which uses the deb822 format. Use deb822-formatted .sources files
# to manage package sources in the /etc/apt/sources.list.d/ directory.
# See the sources.list(5) manual page for details.
也就是让我们去 /etc/apt/sources.list.d/ubuntu.sources 这里进行修改(DEB822格式)。
具体修改方式可以参考清华镜像源官网的提示。
建议先
sudo mv /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
然后直接
sudo vim /etc/apt/sources.list.d/ubuntu.sources
(按 i 进入编辑模式)再把
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
# Types: deb-src
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: noble noble-updates noble-backports
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# Types: deb-src
# URIs: http://security.ubuntu.com/ubuntu/
# Suites: noble-security
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 预发布软件源,不建议启用
# Types: deb
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: noble-proposed
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# # Types: deb-src
# # URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# # Suites: noble-proposed
# # Components: main restricted universe multiverse
# # Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
这段粘贴进去(并依次按 Esc : w q ! Enter 保存编辑并退出,具体请查阅 vim 使用手册)。
然后 sudo apt update 一下冒出一堆 mirrors.tuna.tsinghua.edu.cn 就说明已经配置成功了。
3. 好看的 shell,好用的 shell
刚装完 ubuntu 一般都用的 bash,而 zsh 不仅更好看,也支持很多实用的插件。
sudo apt install zsh -y
设置默认终端为 zsh:
chsh -s /bin/zsh
在 cmd 命令行中输入
wsl --shutdown
来关掉整个 wsl 系统,再打开,我们会收到这样的提示:

按 1 会让你一步步手动配置,按 2 可以用它的推荐配置:

不过这样略显丑陋,我们还是用 oh-my-zsh 进行自动化配置来得省心:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
下载安装脚本并执行,我们会直接得到这样的界面:

下载命令语法校验软件:
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
(顺便一提,如果梯子突然坏了而且 github 还登不上,可以用 bgithub.xyz 来代替 github.com,这在后面遇到 github.com 的时候也有用)
下载命令提示插件(根据你之前输过的命令进行提示):
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
编辑 ~/.zshrc 文件,ZSH_THEME 可以修改为任意你喜欢的主题。(比如…“原神”主题?)

plugins 里面填入需要启用的插件:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting z extract web-search)

oh-my-zsh 内置了 z 插件。z 是一个文件夹快捷跳转插件,对于曾经跳转过的目录,只需要输入最终目标文件夹名称,就可以快速跳转,避免再输入长串路径,提高切换文件夹的效率。
oh-my-zsh 内置了 extract 插件。extract 用于解压任何压缩文件,不必根据压缩文件的后缀名来记忆压缩软件。使用 x 命令即可解压文件。
oh-my-zsh 内置了 web-search 插件。web-search 能让我们在命令行中使用搜索引擎进行搜索。使用搜索引擎关键字+搜索内容 即可自动打开浏览器进行搜索。(个人感觉没什么大用)
source ~/.zshrc
启用修改过后的配置。
4. 安装 PwnTools 等软件
如果发现新系统有 python3 但没有 pip 指令,可以通过如下命令安装 pipx:
sudo apt install pipx
pipx 会为每个包单独创建虚拟环境,适合需要全局访问的命令行工具。
为什么不推荐安装 pip 呢?因为会在使用 Python 的 pip 安装包时遇到 externally-managed-environment 错误。这是 Ubuntu/Debian 系统的新特性(Python 3.11+),目的是防止用户直接通过 pip 全局安装 Python 包(可能破坏系统依赖)。
如果第一次用 pipx 会报提示:
⚠️ Note: '/home/ponder/.local/bin' is not on your PATH environment variable. These apps will not be globally
accessible until your PATH is updated. Run `pipx ensurepath` to automatically add it, or manually modify your PATH
in your shell's config file (i.e. ~/.bashrc).
done! ✨ 🌟 ✨
输入
pipx ensurepath
就可以自动帮你加入环境变量。
如果直接使用
python3 -m pip install --upgrade pwntools
安装 pwntools,系统会阻止你:
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.12/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
这时候就有 3 种应对方法:第一种方法是开一个虚拟环境,第二种方法就是用 pipx,第三种方法就是忽略所有风险,强制安装!
需要注意的是,用 pipx 装你 python 导入不了 pwntools 的库(名字叫 pwn),第一种方法虽然安全,但你每次进入 wsl 都要再进入一遍虚拟环境才能正常工作。我最终还是使用了第三种方法,目前似乎没啥大问题。(有没有更好的方案?)
装完 pwntools,checksec、ROPgadget 等命令行小工具也会一并安装完毕,可以输入这几个命令执行一下看看有没有反应。
看到 Lilac 的大佬喜欢用 pwncli,大家也可以直接用这个,总体跟 pwntools 大差不差,有些功能更强一些。
安装 one_gadget
sudo apt install ruby
sudo apt install ruby-dev
sudo gem install one_gadget
安装 seccomp-tools
sudo gem install seccomp-tools
安装 patchelf
sudo apt install patchelf
5. 安装调试环境
最重要的调试工具 gdb. 就算你不学 pwn,大二上计算机系统也要用到。现在学习直接赢在起跑线!
sudo apt install gdb
但是只有 gdb 调试会十分麻烦,我们需要两个重要插件 Pwndbg 和 Pwngdb.
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
git clone https://github.com/scwuaptx/Pwngdb.git
把
source ~/Pwngdb/pwngdb.py
source ~/Pwngdb/angelheap/gdbinit.py
define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end
粘贴到 ~/.gdbinit 末尾(此时你的 ~/.gdbinit 应该只包含 source /home/ponder/pwndbg/gdbinit.py)
6. 安装 glibc-all-in-one
https://github.com/cnwangjihe/glibc-all-in-one
cd glibc-all-in-one
./update_list
./download all
下载过程十分漫长是正常现象……
7. 安装 libc-database
我觉得 LibcSearcher 不好用,还是通过 libc-database 搜索出准确的 libc 版本再继续做比较好。线上赛可以直接在 https://libc.rip/ 查询,但线下赛最好还是备一份 libc-database 比较好。
git clone https://github.com/niklasb/libc-database
cd libc-database
./get ubuntu
8. 安装 docker
事实上,在 wsl 里使用 docker 不需要单独安装,只需要安装 Windows 上的 Docker Desktop,再在里面打开相关设置即可。

docker 镜像源也得换,网上可能是过时的资源,请仔细甄别。

{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker-0.unsee.tech",
"https://docker.1panel.live",
"https://docker.imgdb.de",
"https://hub.firefly.store"
]
}
9. 安装 VS Code
什么,你跟我说你还没装 vs code??? 赶紧上官网下一个,一路 next 应该就能装完。
Ctrl K + Ctrl O 打开工作文件夹,Ctrl tab 拉起/隐藏 终端,一般终端是 Windows 的 Powershell,输入 wsl 或者点击右上角 “+” 右边的下箭头号选择目标系统,即可进入上面配置好的 Linux 系统。