随记体验 · 2025年8月23日

鱼与熊掌就要兼得!M芯片使用pwntools&PWN环境搭建

file

前言

眼看奔着50的人了,体力和精力是愈发不能和年轻人比了,作为十多年前的一名前CTFer,打CTF的本事是越来越不咋滴了,能做的唯有将以前整理的笔记逐渐分享吧。

首先是 Apple M芯片的pwntools工具使用,如果你是x86_64的Ubuntu环境,可直接跳过第一小节,从第二小节开始看。

M芯片的pwntools安装

这种方法属于一种取巧的方式,众所周知,M芯片的底层是ARM架构,在安装pwntools工具时就会报错。因此我们可以利用Apple 的 Rosetta 2工具实现pwntools工具的顺利安装与使用。

安装Apple Rosetta 2:

/usr/sbin/softwareupdate --install-rosetta

安装 Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

这将把Homebrew安装在/opt/homebrew/bin/brew目录下。当使用Homebrew安装应用程序时,它会将它们安装到/opt/homebrew/Cellar目录,并在/opt/homebrew/bin目录下创建一个符号链接。

使用Homebrew安装Intel APP:

创建一个~/downloads/homebrew 目录,并下载Homebrew Tarball,然后将其放入到~/Downloads/HomeBrew 目录中。

cd ~/Downloads mkdir homebrew curl -L [https://github.com/Homebrew/brew/tarball/master](https://github.com/Homebrew/brew/tarball/master) | tar xz --strip 1 -C homebrew

将homebrew目录移至/usr/local/homebrew,需要sudo命令:

sudo mv homebrew /usr/local/homebrew

将路径添加到.zshrc文件中:

export PATH=$HOME/bin:/usr/local/bin:$PATH

设置别名

到目前为止,可以使用arch -x86_64 /usr/local/homebrew/bin/brew将应用程序安装到/usr/local/homebrew/cellar目录。

~/.zshrc 文件中添加一个别名和路径:

# If you come from bash you might have to change your $PATH. 
# need this for x86_64 brew 
export PATH=$HOME/bin:/usr/local/bin:$PATH 
# for intel x86_64 brew 
alias axbrew='arch -x86_64 /usr/local/homebrew/bin/brew'

# 为 pwntools 相关命令创建别名
alias pwn='arch -x86_64 pwn'
alias python3-pwn='arch -x86_64 python3'

重新加载配置:

source ~/.zshrc

然后就可以使用axbrew来安装适配Intel处理器的相关应用程序了:

axbrew install pwntools
#如果python3中使用from pwn import * 仍然提示未找到库的话,使用
arch -x86_64 pip3 install pwntools

之后就可以使用设置好的别名使用pwntools了:

pwn checksec binary
python3-pwn exploit.py

展示

⚠️注:由于操作系统的不同,pwntools工具只能使用remote连接远程服务器去pwn,而不能使用process,这个要特别留意。因此骨哥强烈建议要么配一台x86_64的VPS主机作为pwn主机,又或者使用UTM安装
Ubuntu 18.04 for X86_64作为pwn主机是相对更加“完美”的方案。

UTM环境

VSCode 插件设置

某些VSCode扩展需要在settings.json文件中指定可执行路径。在这种情况下,需要更改shellcheck.executablePath:

"shellcheck.executablePath": "/usr/local/homebrew/Cellar/shellcheck/0.7.2/bin/shellcheck",

参考来自:https://medium.com/mkdir-awesome/how-to-install-x86-64-homebrew-packages-on-apple-m1-macbook-54ba295230f


以下是Ubuntu 18.04 PWN环境搭建

Gadget工具:

one_gadgert

sudo apt -y install ruby
sudo gem install one_gadget

gem install bundler SSL证书错误 解决办法:

Linux上,请修改 ~/.gemrc 文件,增加 :ssl_verify_mode: 0 配置,以便于 RubyGems 可以忽略 SSL 证书错误。

ROPgadget

sudo -H python3 -m pip install ROPgadget
ROPgadget --help

GDB插件:

gef

wget -O ~/.gdbinit-gef.py -q https://gef.blah.cat/py
echo source ~/.gdbinit-gef.py >> ~/.gdbinit

pwndbg

cd ~/
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

peda

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit

Pwngdb**

主要是因为Pwngdb中有fmtarg工具,对于格式化字符串漏洞,可以直接算出offset。

cd ~/
git clone https://github.com/scwuaptx/Pwngdb.git 
cp ~/Pwngdb/.gdbinit  ~/

Pwngdb 与pwndbg的联合使用:

vim ~/.gdbinit
#source ~/peda/peda.py
source ~/Desktop/pwndbg/gdbinit.py #路径要写对
source ~/Downloads/Pwngdb/pwngdb.py #路径要写对
source ~/Downloads/Pwngdb/angelheap/gdbinit.py #路径要写对

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

Patchelf

sudo apt-get install patchelf

命令使用(更改elf文件的ld和libc):

patchelf --set-interpreter ~/glibc-all-in-one/libs/2.27-3ubuntu1.6_amd64/ld-2.27.so --set-rpath ~/glibc-all-in-one/libs/2.27-3ubuntu1.6_amd64 YOUR_PROGRAM

Pwntools

sudo apt update
sudo apt install python3 python3-pip python3-dev libssl-dev libffi-dev build-essential git
python3 -m pip install --upgrade pip
pip3 install --upgrade pwntools

测试:

python3

>>>from pwn import *
>>>

无报错就表示OK了。

glibc-all-in-one**

git clone https://github.com/matrix1001/glibc-all-in-one.git
cd glibc-all-in-one
vim update_list

改为#!/usr/bin/python3

file

#更新最新版本的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