我用的环境是纯净的wsl的kali-linux子系统(现在还是强烈建议用Ubuntu22.04),什么也没有,接下来我们开始一步步搭建pwn环境,默认带的Python是3.12.7,建议读者也下载和我一样的python版本,避免后续环境由于版本不同出现问题
后文所有的Ubuntu-24.04下的安装命令都用蓝色标识,如果某条安装没有标明Ubuntu-24.04,则说明命令没有变化

换源
终端输入
sudo vim /etc/apt/sources.list
输入”i”,出现INSERT字样,此时可以插入

将下面内容任选其一复制进去,并将原本内容注释掉
中科大Kali镜像源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free non-free-firmware contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free non-free-firmware contrib
阿里云Kali镜像源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free non-free-firmware contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free non-free-firmware contrib
清华大学Kali镜像源
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free non-free-firmware

最后摁esc、冒号、wq退出
最后sudo apt update,sudo apt upgrade更新一下
Ubuntu22.04用下面的:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
Ubuntu-24.04用下方命令
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
sudo vim /etc/apt/sources.list.d/ubuntu.sources

注释掉原来的源,把下面的源写进去
清华源
Types: deb
URIs: http://mirrors.tuna.tsinghua.edu.cn/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
中科大源
Types: deb
URIs: http://mirrors.ustc.edu.cn/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
阿里云源
Types: deb
URIs: http://mirrors.aliyun.com/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
网易镜像源
Types: deb
URIs: http://mirrors.163.com/ubuntu/
Suites: noble noble-updates noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
保存配置后,执行如下代码
sudo apt update
sudo apt upgrade -y
修改python软连接(可选)
由于我个人习惯直接python而不是python3,所以我选择修改一下python的默认软连接

先查看一下,可以看到我压根就没有python2,只有一个python3
这个时候输入
sudo ln -s /usr/bin/python3 /usr/bin/python

再次查看已经有了
pip换源
切换根用户,进入根目录,查看一下隐藏文件,发现没有.pip文件夹

手动建一个,输入
mkdir /.pip #这个是在 / 目录下创建而不是 ~ 目录
cd / #进入 / 目录
la
vim pip.conf #创建配置文件
配置文件的内容如下
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=https://pypi.tuna.tsinghua.edu.cn
和上面一样的方式保存退出,查看一下,确保写进去了

Ubuntu-24.04
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config unset global.index-url
pip config unset global.index-url --user
pip install --upgrade pip
安装gdb
cd+空格回到~目录
直接输入
sudo apt install gdb
等待安装完毕即可

安装pwntools
首先创建一个tools文件夹,之后的工具我们都放到这里面
mkdir tools
cd tools
sudo apt install python3-pip
pip install pwntools -i https://pypi.tuna.tsinghua.edu.cn/simple/ # -i 指定源

提示我没有pip,按照提示安装一下即可
安装完后遇到报错

找到解决方案https://blog.csdn.net/qq_25439417/article/details/139485697,我用了文章里的方案一,直接暴力删掉,再次执行就好啦
sudo mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.bak

下载完毕,最后验证一下

没有报错就是安装成功了
后面如果遇到通过python脚本运行gdb运行不起来的话可以尝试
sudo apt update
sudo apt install -y xfonts-base xfonts-75dpi xfonts-100dpi
sudo mkfontdir
sudo mkfontscale
sudo fc-cache -fv
sudo rm /usr/bin/x-terminal-emulator
安装pwncli
cd ~/tools
git clone https://github.com/RoderickChan/pwncli.git
cd ./pwncli
sudo pip3 install --editable .

有个警告,问一下AI,根据AI说的去改一下就没有了


安装pwndbg
这里就涉及到用梯子了,自行研究,没有梯子很难装好的
进入tools目录下,终端输入
cd ~/tools
git clone https://github.com/pwndbg/pwndbg.git
#Ubuntu22.04(24.04也可以用)里我用的是git clone --branch 2025.04.18 https://github.com/pwndbg/pwndbg.git
cd pwndbg
sudo ./setup.sh

这里停留的时间比较长

执行失败了的话就多执行几次

连接错误,再重跑一次就行了
我一共是跑了三遍,最终成功后长这样


最后验证一下,没有问题,如果有问题的话就vim ~/.gdbinit,看一下里面的东西,没有东西就把
source ~/tools/pwndbg/gdbinit.py #你的路径
加进去,再次看一下gdb,应该就没问题了
安装pwngdb(和上面是两个东西哦)
cd ~/tools
git clone https://github.com/scwuaptx/Pwngdb.git
vim ~/.gdbinit
然后再gdbinit里面输入
source ~/tools/Pwngdb/pwngdb.py
source ~/tools/Pwngdb/angelheap/gdbinit.py
保存退出,再次运行gdb,在里面输入heapinfo,出现如下界面则证明安装成功

安装peda
cd ~/tools
git clone https://github.com/longld/peda.git
这里由于网络问题一直克隆不下来,所以直接到github上把压缩包下下来拖到wsl里面解压即可
这块后面也没怎么配好,但是也没啥用了,有gdb和dbg就够用
安装LibcSearcher
这个工具我本身不是很喜欢,因为每次跑脚本他都要联网搜索,有的时候还搜不到,所以我基本不用他了,有这时间还不如联网找一下libc-database
对这个工具感兴趣的自行搜索一下吧
安装ROPgadget
cd ~/tools
git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget/
sudo -H python3 setup.py install #我这里改过软连接所以用python跑,你没改过的话就用python3跑

等待一段时间后安装成功
安装seccomp-tools
cd ~
sudo apt install gcc ruby-dev
sudo gem install seccomp-tools
安装onegadget
sudo apt -y install ruby
sudo gem install one_gadget
安装glibc-all-in-one
这个我们装在主目录下,方便后续使用
cd ~
sudo git clone https://github.com/matrix1001/glibc-all-in-one.git
cd glibc-all-in-one/
sudo python update_list
发生报错

把request库装一下即可
sudo pip install requests
再次重新执行

执行成功后应该是这样的
安装patchelf
cd ~/tools
sudo apt install patchelf
patchelf -h #检查一下
至此,pwn环境全部搭建完毕
安装FirmAE
cd ~/tools
git clone --recursive https://github.com/pr0v3rbs/FirmAE
cd FirmAE
./download.sh
./install.sh
这个download执行的相当慢,等吧~(等了一晚上都没下完)
这条命令不要轻易ctrl+c取消掉,如果取消了需要手动吧download.sh里面的相关项给注释掉
从gdb那里开始实在是下不下来了,cat ./download.sh

摁住ctrl,点击相关网址,即可手动下载

把下载完的东西手动拖入~/tools/FirmAE/binaries

即可完成下载,其他下不下来的也可以按照同样方式操作
最后执行./install.sh即可,多跑几遍





一共有这么几个报错,我们从下到上依次解决
Error: Package ‘python’ has no installation candidate
解决方案:
sudo apt install python2
Error: Package ‘uml-utilities’ has no installation candidate
这个比较麻烦,不知道为什么kali就是找不到这个包,但这个很重要,必须要有
到阿里云镜像站下载安装包https://mirrors.aliyun.com/debian/pool/main/u/uml-utilities/
下载完之后拖到tools地下

终端进入tools文件夹下,输入
sudo dpkg -i uml-utilities_20070815.2-1_amd64.deb
发生报错,缺少依赖,那就缺啥补啥

sudo apt-get update
sudo apt-get install libfuse2
libreadline7在https://packages.debian.org/zh-cn/buster/amd64/libreadline7/download

最后再次执行sudo dpkg -i uml-utilities_20070815.2-1_amd64.deb
成功安装,有个警告不用管它

Error: Unable to locate package qt5base-dev
sudo apt update
sudo apt install qtbase5-dev
Error: Unable to locate package fusecram
这个也很麻烦,同样采用deb安装http://launchpadlibrarian.net/363148179/fusecram_20051104-0ubuntu4_amd64.deb

安装fuse-module
sudo apt-get update
sudo apt-get -y install fuse
到这卡死了,可能是因为安装的是Ubuntu的deb导致不兼容问题,我也没办法了,因为网上找不到kali的包
Building wheel for python-lzo (pyproject.toml) did not run successfully.
sudo apt install liblzo2-dev
pip install python-lzo
ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
selenium 4.27.1 requires urllib3[socks]<3,>=1.26, but you have urllib3 1.24.3 which is incompatible.
AI查了一下说要升级
pip install --upgrade urllib3
升级完又报错,发现是request版本低了

再把requests升级一下
pip install --upgrade requests
搞定

最后执行
python3 -m pip install selenium
重新装一下

至此所有bug解决完毕
如果实际运行过程中,出现如下报错,参见binwalk如果出现解压之后squafs-root文件夹下面为空的解决方案,执行相关命令

安装binwalk
sudo apt install binwalk

出现报错,于是我执行sudo pip uninstall capstone,他就莫名其妙的好了,我也不知道为啥,反正能用就行。。。
如果uninstall也不行的话,还有一种方法,直接打开/usr/lib/python3/dist-packages/binwalk/modules/disasm.py这个文件,利用全局替换功能,把CS_ARCH_ARM64替换成CS_ARCH_ARM。这样做可以让binwalk正常运行解包,唯一的问题就是binwalk无法判断是32位的arm还是64位的arm,但是对我们后续的分析完全不影响,因为我们靠file命令确定架构
如果出现解压之后squafs-root文件夹下面为空,并且有如图所示报错

sudo apt update
sudo apt install build-essential git liblzma-dev liblzo2-dev liblz4-dev libzstd-dev zlib1g-dev
git clone https://github.com/devttys0/sasquatch
cd sasquatch
./build.sh
运行build.sh之前,先把build.sh最后一行改成
make EXTRA_CFLAGS="-Wno-error=dangling-pointer -Wno-error=misleading-indentation" && $SUDO make install
第一遍运行会报错,然后输入如下命令
cd squashfs4.3/squashfs-tools/
cp error.h error.h.bak
cp unsquashfs.c unsquashfs.c.bak
sed -i 's/^int verbose;/extern int verbose;/' error.h
awk '/#include "error.h"/ && !found { print; print "int verbose = 0;"; found=1; next } { print }' unsquashfs.c > unsquashfs.c.tmp && mv unsquashfs.c.tmp unsquashfs.c

有回显即安装成功
另一种方法from AttackLin
sed -i ‘s/-Werror//g’ patches/patch0.txt
CFLAGS=’-fcommon’ ./build.sh
第三种方法:binwalk源码安装
export RUSTUP_UPDATE_ROOT=https://mirrors.aliyun.com/rustup/rustup export RUSTUP_DIST_SERVER=https://mirrors.aliyun.com/rustup curl --proto '=https' --tlsv1.2 -sSf https://mirrors.aliyun.com/repo/rust/rustup-init.sh | sh . "$HOME/.cargo/env"

这里直接回车即可
cd ~/tools
git clone https://github.com/ReFirmLabs/binwalk
sudo ./binwalk/dependencies/ubuntu.sh
cd binwalk
cargo build --release
sudo ln -s $(pwd)/target/release/binwalk /bin/binwalk
安装qemu
sudo apt-get install qemu-user-static
sudo apt-get install qemu-system

安装firmwalker
cd ~/tools
git clone https://github.com/craigz28/firmwalker
安装upx
sudo apt-get install upx
目前我能想到的东西就这么写,后面会不断更新的