M系列Mac搭建Pwn环境
虚拟机使用UTM,系统为Ubuntu 20.04
其他虚拟机还试过Multipass、Parallels Desktop,
还有Docker,但是都会遇到一些问题。
而UTM是基于QEMU的,可以模拟ARM、x86、x86_64等架构,
1. 安装UTM和Ubuntu
UTM官方地址:https://github.com/utmapp/UTM
Mac版本地址:https://mac.getutm.app/
因为要模拟x86_64架构,所以选择模拟,
选择操作系统:
浏览镜像:
配置硬件,一般保持默认就好
设置硬盘大小
修改下虚拟机名称,然后保存就可以了。
配置系统
系统安装好之后因为桌面环境巨卡,建议关掉桌面环境,
使用命令行模式。
1. 配置远程ssh
1 | # 安装net-tools |
更换apt源
1 | cd /etc/apt |
添加清华源
1 | deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse |
更新源
1 | sudo apt update |
安装proxychains
安装proxychains,使得UTM虚拟机内的网络可以通过本地mac的代理上网
这样git clone、apt install等命令的速度就会快很多。
1 | sudo apt install proxychains |
配置代理
1 | mkdir ~/.proxychains |
vim proxychains.conf
编辑proxychains.conf
添加如下内容:
1 | strict_chain |
其中,192.168.105.1: 7890 是本地mac的ip和代理端口。
clash中要勾选“允许局域网连接”。
测试:
1 | # 不使用代理查看ip |
安装工具
1. 安装pwntools
1 | # 安装基础工具 |
2.安装peda、pwndbg、Pwngdb
将peda、pwndbg、Pwngdb放到tools目录下
1 | mkdir tools; |
安装pwndbg,这里有两个坑:
setup.sh脚本使用如下语句检测python的位置
1
PYTHON=${PWNDBG_VENV_PATH}/bin/python
而ubuntu22.04 的/usr/bin目录下并没有python,而是python3,
所以需要在添加一个软链接1
2cd /usr/bin;
sudo ln -s python3 python安装pwndbg时,会卡在
setup.sh
的pip install
处,需要修改setup.sh
文件。1
2cd pwndbg
vi setup.sh在第194行位置的
pip install
后面加上-i https://pypi.tuna.tsinghua.edu.cn/simple
,如下所示:1
2194 #${PWNDBG_VENV_PATH}/bin/pip install -e .
195 ${PWNDBG_VENV_PATH}/bin/pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple否则
setup.sh
会卡住,无法安装成功。
然后执行setup.sh
脚本安装就可以了。
如果报错,pip重新安装指定的包就可以了。
1 | pip install -i https://pypi.tuna.tsinghua.edu.cn/simple launchpadlib |
配置Pwngdb
1 | cd ~/tools/Pwngdb |
添加如下内容
1 | #source ~/tools/peda/peda.py |
3. 安装seccomp-tools
seccomp-tools是一个用于查沙盒的工具。
1 | sudo apt install gcc ruby-dev |
4. 安装ropper
1 | pip install ropper |
5. 安装qemu(系统内核题)
1 | sudo apt install qemu-user qemu-system |
6. glibc-all-in-one
1 | git clone https://github.com/matrix1001/glibc-all-in-one.git |
添加下载脚本并执行
1 |
|
执行完成之后,会在libs目录下生成对应的libc文件。
1 | #更新最新版本的glibc |
7. 安装patchelf
patchelf可以修改elf文件的依赖库路径,可以用来解决libc版本不一致的问题。
1 | git clone https://github.com/NixOS/patchelf.git |
8. 安装zstd
1 | sudo apt install zstd |
9. 安装radare2
1 | proxychains git clone git@github.com:radareorg/radare2.git |
其他工具
1 | one_gadget |
pwn常用命令
nm
查看程序中的符号信息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16nm timu
U atoi@@GLIBC_2.2.5
0000000000202010 B __bss_start
0000000000202038 b completed.7696
0000000000000a94 T create
w __cxa_finalize@@GLIBC_2.2.5
0000000000202000 D __data_start
0000000000202000 W data_start
0000000000000b5f T delete
0000000000000840 t deregister_tm_clones
00000000000008d0 t __do_global_dtors_aux
0000000000201d80 d __do_global_dtors_aux_fini_array_entry
0000000000202008 D __dso_handle
0000000000201d88 d _DYNAMIC
0000000000202010 D _edata
0000000000202078 B _endchecksec
查看程序的保护机制1
2
3
4
5
6
7geekhour@geekhour:~/ctf$ checksec timu
[*] '/home/geekhour/ctf/timu'
Arch: amd64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabledstrings
查看程序中的字符串1
strings timu
objdump
查看程序的汇编代码1
objdump -d timu
readelf
查看程序的elf头信息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21geekhour@geekhour:~/ctf/xctf$ readelf -h hello_pwn
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x400590
Start of program headers: 64 (bytes into file)
Start of section headers: 4488 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers: 64 (bytes)
Number of section headers: 29
Section header string table index: 28ltrace
查看程序的库函数调用1
geekhour@geekhour:~/ctf/xctf$ ltrace ./hello_pwn
strace
查看程序的系统调用1
geekhour@geekhour:~/ctf/xctf$ strace ./hello_pwn
生成pwn脚本
1
2
3
4# 生成pwn脚本
pwn template ./hello_pwn
# 生成pwn脚本并连接远程服务器
pwn template ./hello_pwn --host localhost --port 9999