M1/M2 Pwn环境配置

0、前言

​ 今年4月份参加某某杯线下赛的时候,尝试去做pwn的基础题目结果环境报错落败而逃😂,在M1/M2芯片的MacBook上因为arm架构的原因,搭建pwn环境并不是那么顺利,于是回来以后就尝试搞了下相关环境。

​ 结合在B站看到的UP主:Retr0的寄存器的视频「零基础向」有趣的Pwn博主的Mac x86虚拟机Pwn环境搭建教程,成功使用UTM虚拟机搭建了x86架构下的Pwn环境;然后再结合UP主BOYcc1的视频pwn环境安装成功安装了相关工具。

​ 在搭建、安装的过程中,顺便截图记录了一下,4月写的,今天整理文件的时候翻到了,顺便传上来,希望能对有需要的师傅提供些帮助。

1、虚拟机选择:UTM

UTM
https://github.com/utmapp/UTM

2、镜像选择

阿里云镜像站下载utuntu 20.04.5

(这里用的是桌面版的,然后删除了桌面环境。也可以尝试直接取下载服务器版的,能更方便些👀)

About us
ubuntu-releases安装包下载_开源镜像站-阿里云

image.png

3、导入UTM

选择模拟CPU
image.png

image.png
image.png
image.png
image.png
image.png
image.png
打开刚创建的虚拟机 等待加载至桌面后选择install Ubuntu
image.png

image.png

image.png

image.png
image.png
image.png
image.png
image.png
安装完成后点击重启
image.png
按提示删除刚才的iso文件后 输入ENTER键 等待进度条读取加载完成后看到图形界面然后关机
image.png
关机完成后 清除iso路径后再打开虚拟机 等待
image.png
image.png
更新的都不更新 一律跳过/下一步
image.png
image.png
image.png
image.png
image.png
image.png
image.png
移除桌面环境
打开终端
安装git

1
sudo apt install git

image.png
下载Retr0做好的脚本
脚本链接https://github.com/DDizzzy79/Reg-Retr0.git

1
2
3
4
5
6
7
8
9
10
git clone https://github.com/DDizzzy79/Reg-Retr0.git
cd Reg-Retr0/
cd Mac_x86_Pwn_Build_Up/
#换源
sudo ./execute_to_change_apt_source.sh
#更新源
sudo apt update
#为移除GNOME桌面环境做重启前准备
sudo ./execute_to_prepare_for_gnome_remove.sh
sudo reboot

image.png
image.png
image.png

1
2
3
4
5
6
7
8
9
10
11
12
#输入用户名密码后 进入之前的目录
cd /Desktop/Reg-Retr0/Mac_x86_Pwn_Build_Up/
#需要注意删除前需要修改/etc/default/grub
可以先安装vim 方便使用
sudo apt install vim
需要修改 /etc/default/grub 中的
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_CMDLINE_LINUX_DEFAULT="text"
vim /etc/default/grub
#删除和GNOME桌面环境有关的依赖项
sudo ./execute_to_remove_gnome.sh

image.png
image.png
image.png
安装ssh 方便连接

1
2
3
4
sudo apt install openssh-server
sudo systemctl status ssh
sudo apt instlal net-tools
ifconfig

image.png
image.png
image.png

4、工具安装

ubuntu20自带python版本为3.8.10
image.png

pip

1
sudo apt-get install python3-pip

pwntools

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

image.png
安装好后终端内输入python3 然后输入

1
from pwn import *

如果没有报错就证明安装成功了
image.png
并且会得到俩个工具 checksec 和 ROPgedget
添加环境变量后即可运行checksec

1
2
3
4
5
6
#安装pwntools后checksec在~/.local/bin下
#查看当前环境变量
echo $PATH
#在~/.bashrc内添加
export PATH=$PATH:/home/patrik/.local/bin
source ~/.bashrc

image.png
image.png

gdb

1
2
mkdir tools
cd tools

下载peda

1
git clone https://github.com/longld/peda.git

下载Pwngdb

1
git clone https://github.com/scwuaptx/Pwngdb.git 

下载pwndbg

1
2
3
4
git clone https://github.com/pwndbg/pwndbg
#若网络存在问题可直接本机下载上传至虚拟机内解压
#sudo apt install unzip
#unzip xxx.zip

image.png

安装pwndbg

1
2
3
4
vim pwndbg/setup.sh
修改源为国内源 添加
-i https://pypi.tuna.tsinghua.edu.cn/simple
./setup.sh

image.png
image.png
image.png
最后报错 pip重新安装指定的包和版本即可

1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple launchpadlib

image.png
image.png
image.png
配置Pwngdb

1
2
3
4
5
6
7
cd ..
#tools目录下
cp Pwngdb/.gdbinit ~
vim ~/.gdbinit
#打开文件后文件内容修改如下,这里要注意source ~/pwndgb/gdbinit.py
#一定要在source ~/Pwngdb/angelheap/gdbinit.py前面,要不然会使用默认配置。

image.png

1
2
3
4
5
6
7
8
9
10
11
#source ~/tools/peda/peda.py
source ~/tools/pwndbg/gdbinit.py
source ~/tools/Pwngdb/pwngdb.py
source ~/tools/Pwngdb/angelheap/gdbinit.py

define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end

image.png

seccomp-tools(查沙盒)

1
2
sudo apt install gcc ruby-dev
sudo gem install seccomp-tools

image.png

ropper

1
pip install ropper

image.png

qemu(系统内核题)

1
sudo apt-get install qemu-user qemu-system

glibc-all-in-one

1
2
3
4
git clone https://github.com/matrix1001/glibc-all-in-one.git
cd glibc-all-in-one
vim update_list
改为#!/usr/bin/python3

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#更新最新版本的glibc
./update_list
#查看可下载的glibc
cat list
#根据题目所给的libc,找对应版本的连接器,并下载该连接器
./download 2.23-0ubuntu11.3_amd64
#下载好的libc就在libs目录下
ls libs/2.23-0ubuntu11.3_amd64/
#把ld文件和libc复制到pwn题目录下

#一般来说使用时把标记的ld-2.23.so和libd-2.23.so拷贝在程序目录下即可
#.debug文件用于gdb调试
#在gdb设置setdebugf

image.png
image.png

patchelf(修改可执行程序的libc版本)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
git clone https://github.com/NixOS/patchelf.git
cd patchelf
./bootstrap.sh
#autoreconf是需要最小化安装的 直接apt是get不下来的
sudo apt install -y dh-autoreconf
./bootstrap.sh
./configure
make
make check
sudo make install
#使用
#查看题目原来的libc和ld “easyheap”为可执行程序 此处为例子
ldd easyheap
#替换libc
patchelf --replace-needed libc.so.6 ./libc-2.23.so ./easyheap
#设置ld文件
patchelf --set-interpreter ./ld-2.23.so ./easyheap

image.png

image.png
image.png
image.png

zstd

预防报错(extract脚本在解压的时候用到了zstd解压命令)提前安装

1
sudo apt-get install zstd

LibcSearcher用来泄露libc库中函数的偏移的库,
one_gadget用来寻找libc库中的execve(‘/bin/sh’, NULL, NULL)可以一个gadget就可以getshell