最近准备再重新搭建一下Pwn环境,之前我的环境是搭建在Kali里面的(版本是2019.1amd64的),安装pwndbg的时候有点问题,所以当时使用的gdb插件是peda,但是感觉没有pwndbg好用,有些提示不太全,而且有些pwndbg提供的小工具也没有。
最要命的是某一次Vmware Tools自动更新之后突然不能从物理机复制文件了,拖拽文件也不行,剪贴板也不共享了。重装了几次Vmware Tools也没用,十分生气。听说Ubuntu对pwntools的支持是最好的,看到大佬们的pwn环境基本上都是Ubuntu的,所以这次准备搭一个Ubuntu的本地环境。
搭建过程中出了好多各种问题,搞了好几天,最后很多问题也没解决,但是凑合算是能用了,在此记录一下。
我对环境的初步想法是这样:
1. Ubuntu系统,版本16.04及以上
据说Ubuntu对pwntools的支持是最好的,先后尝试了 20.04,18.04,14.04,最后使用的是16.04版本。
对于 Ubuntu 12.04 到 15.10,必须首先添加 pwntools 某些存储库。而Ubuntu Xenial (16.04) 有大部分架构的官方包,不需要这一步。
经过尝试,高版本比如 20.04 已经移除了系统自带的Python2,而低版本比如 14.04 自带的Python2版本又太低,对应的pip版本才1点几,还不能往上升,要升级Python版本很麻烦,还得解决一系列问题。所以最后选择了 16.04 版本。
2. 使用Python2安装pwntools,版本2.7.12及以上
虽然pwntools的维护者不建议使用Python2来进行安装,但是个人觉得Python2写exp真的方便一点,因为有自动类型转换,能够省掉很多时间。然后就是推荐版本最好在2.7.12及以上,老版本的可以不用尝试了,会有各种报错。。。
3. Vmware Tools正常使用
这也是我重装环境的原因,不能共享剪贴板真的太难受了,特别是打比赛的时候,一键粘贴进环境真的方便,怀疑是我之前的Kali版本太老了。
名称 | 版本 |
---|---|
Vmware Workstation Pro | 16.2.2 |
Ubuntu | 16.04.7 |
Python | 2.7.17 |
pip | 20.3.4 |
Python3 | 3.5.2 |
pip3 | 20.3.4 |
gdb | 7.11.1 |
(1) 安装Vmware和Ubuntu虚拟机
这个正常安装就行了,应该没啥难点。我安装过程中是不断网的,虽然慢一点,但是好多软件就自动装好了。
(2)换源
安装成功之后进入虚拟机,首先进行换源,这一步可选,这样在进行软件安装的时候能稍微快一点,不换也可以,直接进入(3)。换源之前记得备份一下,我这里使用的是阿里的源。
然后自带的vi不太好用,我也懒得升级了,这里直接使用gedit编辑器打开。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo gedit /etc/apt/sources.list
贴一下清华源:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
保存退出,然后更新一下。
sudo apt-get update
(3)安装Python以及pip等基础环境
然后我看了一下Python版本,Ubuntu16是原装的有Python2的,没截图,我记得版本好像是2.7.12。低版本的 Ubuntu 的 Python 版本太低了,升级很麻烦。高版本的话已经没有系统自带的 Python2 了。
然后装一下pip以及其他的一些软件。
sudo apt-get install python python-pip python-dev git libssl-dev libffi-dev build-essential
看了一下安装后的pip版本,好像是10点几,由于pip不再支持 Python2,因此必须安装特定版本的pip来安装pwntools。
python2 -m pip install --upgrade pip==20.3.4
安装完成pip之后,看了一下python版本,也自动升级到最新的2.7.17了。
(4)安装pwntools
安装pwntools,这里使用-i
参数指定了使用清华的镜像源,能够稍快一些。
python2 -m pip install --upgrade pwntools -i https://pypi.tuna.tsinghua.edu.cn/simple
然后开一个Python的shell,from pwn import *
试一下,我这里报错了,看到试因为找不到pathlib2的库,然后再装一下就行了。
python2 -m pip install pathlib2 -i https://pypi.tuna.tsinghua.edu.cn/simple
(5)安装pwndbg
gdb调试插件,可选的还有gdb-peda等,可以自行选择,本人比较习惯pwndbg。
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
运行安装脚本时可能会报错:
Traceback (most recent call last):
File "/usr/bin/pip3", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python3.5/dist-packages/pip/__init__.py", line 11, in main
from pip._internal.utils.entrypoints import _wrapper
File "/usr/local/lib/python3.5/dist-packages/pip/_internal/utils/entrypoints.py", line 4, in <module>
from pip._internal.cli.main import main
File "/usr/local/lib/python3.5/dist-packages/pip/_internal/cli/main.py", line 57
sys.stderr.write(f"ERROR: {exc}")
^
SyntaxError: invalid syntax
解决方法:
不要使用apt安装pip,手动下载安装脚本安装即可。
首先卸载python3的pip。
sudo apt-get remove python3-pip
下载安装脚本并安装
wget https://bootstrap.pypa.io/pip/3.5/get-pip.py
python3 ./get-pip.py
进入gdb显示pwndbg表示安装成功。
(6)安装ROPgadget
这个安装 pwntools 时自带,如果没有的话可以再手动安装。
git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget/
sudo -H python3 setup.py install
执行安装脚本后,可以使用命令试一下,我这里报错了,详情如下:
Traceback (most recent call last):
File "/usr/local/bin/ROPgadget", line 4, in <module>
__import__('pkg_resources').run_script('ROPGadget==6.7', 'ROPgadget')
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 667, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1452, in run_script
raise ResolutionError(
pkg_resources.ResolutionError: Script 'scripts/ROPgadget' not found in metadata at '/usr/local/lib/python3.8/dist-packages/ROPGadget-6.7.dist-info'
这里需要再执行一条命令,将ROPgadget的脚本文件拷贝到Python3的目录下,路径需要根据自己的环境修改一下:
sudo cp -r scripts /usr/local/lib/python3.8/dist-packages/ROPGadget-6.7.dist-info
然后安装成功:
部分小问题已在文章中说明,还有一些问题花费时间比较长,另开一篇记录一下:
搭建Ubuntu16.04系统下Pwn环境的几个疑难问题