前言
眼看奔着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主机是相对更加“完美”的方案。
VSCode 插件设置
某些VSCode扩展需要在settings.json文件中指定可执行路径。在这种情况下,需要更改shellcheck.executablePath
:
"shellcheck.executablePath": "/usr/local/homebrew/Cellar/shellcheck/0.7.2/bin/shellcheck",
以下是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
#更新最新版本的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