引言
由于最近又需要重新复习pwn,但是之前的老电脑跑起来像一台拖拉机一样所以考虑尝试在Mac上搭建一套可以完美(并不)使用的pwn环境,思路依然是虚拟机+目录共享。
众所周知由于M1换了架构,所以x86的程序在本地根本跑不起来,参考之前大佬的的方法搭建了python2和python3两个docker环境,可以跑exp打远程,本地无法调试,显然不符合需求,优点是性能强,共享目录方便,确实是适合救急用,所以平时我会专门开一个桌面用于这两个docker pwn环境,细节可以参考大佬博客。
https://blog.csdn.net/qq_25755011/article/details/115541221
短暂使用过后发现还是搭一个完美(并不)的环境靠谱,于是开始了折腾之路。
注意:本方法对虚拟机性能会造成较大损失,请根据个人需求判断是否可以接受
配置
首先放一下我的配置,M1 pro 32g内存,已更macOS 13。
虚拟机选用UTM,ubuntu选用ubuntu20.04.1 LTS
安装虚拟机
想要搞到完美的x86模拟环境肯定需要一台可以模拟x86指令集的虚拟机,由于pd和vm暂时都没有对软件模拟x86进行支持,所以这里我们选择安装UTM进行软件模拟虚拟机。这里直接在github下载安装即可,同时需要准备好ubuntu镜像。https://github.com/utmapp/UTM/releases/latest/download/UTM.dmg #UTM虚拟机
https://releases.ubuntu.com/focal/ubuntu-20.04.5-desktop-amd64.iso #Ubuntu 20.04x86-64
安装完成之后,打开UTM,新建虚拟机,选择模拟(我这里已经安装完一个虚拟机,可能界面不同)
这里选择linux,继续往下走。
这里选择启动光盘镜像,随后选择你下载的ubuntu的镜像文件,下一步。
在这里的设置其实对虚拟机跑起来的性能影响不大,模拟出的cpu默认也不支持多核,所以默认即可,也可以把内存设置大一点、设置个4核图一个心理安慰,下一步。
这里影响也不大,我们后期会使用本地目录共享挂载到虚拟机使用,这里的驱动器大小设置64、128看个人情况,下一步。
在你的本机创建一个目录,然后在这里选择他,这个目录就是以后宿主机与虚拟机的文件共享的目录,具体后面会详细说明,暂时先设置,但是不会生效。
这里起一个自己喜欢的名字即可,保存后启动虚拟机,开始正常的ubuntu安装过程。
安装完毕后,取消CD/DVD的装载后,设置网络为桥接后进入系统。
提示:这里安装ubuntu的过程和vm安装的过程完全一样,就是非常非常非常慢,耐心等待安装即可,后面会对其进行优化
SSH连接
UTM自带的UI界面简直不能再卡,本身模拟就很卡,基本无法操作,所以暂时先忍受卡顿安装SSH服务,用本机的远程连接操作shell会好很多
1 | # sudo apt update |
出现提示一路回车,安装完毕后可以使用以下指令查看服务状态,该服务默认自启。
1 | # sudo systemctl status openssh-server |
然后查看虚拟机ip
1 | # ifconfig |
查看本机ip,第一个网卡里的ip就是我们虚拟机的ip,此时可以尝试用宿主机去ping一下,应该可以ping通。
随后我们就可以用mac的终端新建远程连接到ubuntu。
配置共享文件夹
这里我们采用WebDAV实现共享文件夹,安装SPICE、WebDAV。本节中建议所有操作先在root下进行,或者全程sudo。
1 | # apt update |
配置UTM共享选项,选择SPICE WebDAV
此时进入系统后,可以访问网络中其他位置找到共享文件夹,该文件内容与此前设置的共享路径一致,但是此时的问题是命令行无法访问到该目录,仅可通过网络访问,地址如下
1 | # http://localhost:9843 #默认端口为9843,这个链接指向UTM设置的共享路径 |
(由于写教程时已经卸载桌面,所以没有截图)
为了实现需求,我们安装davfs2实现挂载
1 | # sudo apt update |
安装完成后,可以直接使用以下指令挂载davfs
1 | # sudo mount -t davfs http://localhost:9843 <your path> |
此时便可以访问挂载点,该操作可能会要求输入用户名和密码,该步骤输入什么都可以,UTM的共享本身没有身份校验,可以一路回车,也可以输入任意值,建议输入1,1
实现开机免密自动挂载
首先开启用户锁,删除use_locks前面的#并把1改为0,命令如下。
1 | # sudo vim /etc/davfs2/davfs2.conf |
之后,保存用户名和密码,在最下面新起一行添加
1 | # sudo vim /etc/davfs2/secrets |
在这里由于我们没有身份验证,所以直接使用1进行占位,添加
1 | # http://localhost:9843 1 1 |
保存退出,此时可以取消挂载,并重新挂载试一下,不需要回车了,可以直接挂载成功
1 | # sudo umount <your path> |
随后开启开机自动挂载,添加配置信息到如下文件
1 | # sudo vim /etc/fstab |
保存后即可实现开机自动挂载
优化
由于我装的桌面版ubuntu,又不想直接用服务器版,两者差异比较难习惯,所以在此卸载桌面版臃肿的桌面系统,提高系统流畅度,具体流程如下:
1 | # sudo vim /etc/default/grub |
修改
GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash”
⬇️
GRUB_CMDLINE_LINUX_DEFAULT=“text”
执行
1 | # sudo update-grub |
使用
自此,你就拥有了一个X86架构的pwn环境,只需要在比赛前提前打开虚拟机,宿主机远程连接使用,赛题通过共享文件夹同步,pwn环境配置不再赘述,大佬们写了很多,可以自己选择搭配自己的环境。
后记
就个人使用而言,我感觉虽然有些卡顿,但是足以满足日常使用,各位大佬有更好的方法也欢迎分享跟我,目前这是我能想到的一个笔记本实现pwn环境的最优解。