搭建跨平台架构PWN环境
|字数总计:3.2k|阅读时长:17分钟|阅读量:
前言
由于目前互联网上关于 CTF PWN 环境搭建的教程并不是什么详细完整,作者因此也阅读了多篇 PWN 的搭建的文章,并在各位师傅的文章上进行总结完善,加以亲自操作验证写下了这篇笔记。如有不足之处,劳烦师傅们前往博客评论区留言补充~
系统安装
Ubuntu
请参考博客中关于 Ubuntu 安装教程的文章~
Kali Linux
请参考博客中关于 Kali Linux 安装教程的文章~
环境准备
基础工具
1 2 3
| sudo apt install -y vim git gcc tree sudo apt install -y gdb gdb-multiarch sudo apt install -y "binfmt*"
|
安装 Python3
1
| sudo apt install -y python3 python3-pip python3-dev
|
pip 换源
此方法仅适用 Linux 下换源,其他系统请手动创建配置文件换源!
1 2
| pip config set global.index-url http://pypi.doubanio.com/simple/ pip config set install.trusted-host pypi.doubanio.com
|
安装 Python2
1 2 3 4 5 6
| sudo apt install -y python2 python2-dev
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py -O get-pip2.py python2 get-pip2.py rm -rf get-pip2.py python2 -m pip install --upgrade pip==20.3.4
|
python-is-python3
1
| sudo apt install -y python-is-python3
|
openssh-server
1
| sudo apt install -y openssh-server
|
Python3
1 2 3 4
| sudo apt update sudo apt install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential python3 -m pip install --upgrade pip python3 -m pip install --upgrade pwntools
|
Python2
虽说 python2 用的不多了,但是还是建议安装一下,毕竟有时候可能还会用到~
1 2 3 4 5 6 7
| sudo apt update sudo apt install python2 python2-dev git libssl-dev libffi-dev build-essential
python2 -m pip install --upgrade pip==20.3.4 python2 -m pip install --upgrade pwntools python2 -m pip install --upgrade pathlib2 python2 -m pip install --upgrade setuptools
|
1 2 3 4 5 6 7 8
| root@Ubuntu:~ Python 2.7.18 (default, Mar 8 2021, 13:02:45) [GCC 9.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import pwn >>> pwn.asm("xor eax,eax") '1\xc0' >>>
|
1 2 3 4 5 6 7 8
| root@Ubuntu:~ Python 3.8.10 (default, Sep 28 2021, 16:10:42) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from pwn import * >>> asm("xor eax,eax") b'1\xc0' >>>
|
如果返回结果如上,则 pwntools 已经安装好了
GDB 插件
1 2
| mkdir -p /opt/pwnenv/tools cd /opt/pwnenv/tools
|
pwndbg
1 2 3
| git clone https://github.com/pwndbg/pwndbg.git cd pwndbg ./setup.sh && cd ..
|
peda
1
| git clone https://github.com/longld/peda.git
|
gef
1
| git clone https://github.com/hugsy/gef.git
|
peda-heap
1
| git clone https://github.com/Mipu94/peda-heap.git
|
peda-arm
1
| git clone https://github.com/alset0326/peda-arm.git
|
Pwngdb
1
| git clone https://github.com/scwuaptx/Pwngdb.git
|
配置 gdbinit
先删除根目录下 pwndbg 生成的~/.gdbinit
文件
然后再使用下面的命令重新配置,不要一行一行使用,一起复制粘贴到终端,追加写入文件~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| cat >> ~/.gdbinit <<EOF source /opt/pwnenv/tools/pwndbg/gdbinit.py #source /opt/pwnenv/tools/peda/peda.py #source /opt/pwnenv/tools/gef/gef.py #source /opt/pwnenv/tools/peda-heap/peda.py #source /opt/pwnenv/tools/peda-arm/peda-arm.py
# Pwngdb config Start #source /opt/pwnenv/tools/Pwngdb/pwngdb.py #source /opt/pwnenv/tools/Pwngdb/angelheap/gdbinit.py
define hook-run python import angelheap angelheap.init_angelheap() end end # Pwngdb config END EOF
|
当前配置是在 root 权限下配置的,普通用户使用 gdb 没有插件,请在普通用户根目录下创建此配置文件~
验证 gdb 插件
修改 ~/.gdbinit
文件,需要使用那个插件就取消哪个插件的注释~
ROPgadget
1 2 3 4 5
| sudo apt install python3-pip sudo -H python3 -m pip install capstone sudo -H python3 -m pip install ROPgadget ROPgadget --help ROPgadget -v
|
Ropper
1 2 3 4
| sudo pip install capstone sudo pip install filebytes sudo pip install keystone-engine sudo pip install ropper
|
one_gadget
1 2
| sudo apt install -y ruby ruby-dev sudo gem install one_gadget
|
1 2
| sudo apt install -y gcc ruby ruby-dev sudo gem install seccomp-tools
|
LibcSearcher
1 2 3 4 5 6 7 8 9 10 11
| cd /opt/pwnenv/ git clone https://github.com/lieanu/LibcSearcher.git cd LibcSearcher/ python setup.py develop
rm -rf libc-database/ git clone https://github.com/niklasb/libc-database.git cd libc-database apt install zstd ./get ubuntu cd ../..
|
glibc-all-in-one
1 2 3 4 5
| cd cd /opt/pwnenv/ git clone https://github.com/matrix1001/glibc-all-in-one.git apt install python-is-python3 ./glibc-all-in-one/update_list cat ./glibc-all-in-one/list && cat ./glibc-all-in-one/old_list
|
angr
1
| python3 -m pip install capstone angr
|
radare2
Ubuntu 可以使用下面命令安装,Kali 自带
1 2 3 4
| apt install radare2
r2pm update r2pm install [pkg]
|
或者前往Github官方文档使用 git 安装
patchelf
1
| sudo apt install patchelf
|
edb-debugger
Ubuntu 可以使用下面命令安装,Kali 自带
1
| apt install edb-debugger
|
或者使用源码编译安装
1 2 3 4 5 6
| cd /opt/ sudo apt install cmake build-essential libboost-dev libqt5xmlpatterns5-dev qtbase5-dev qt5-default libqt5svg5-dev libgraphviz-dev libcapstone-dev git clone --recursive https://github.com/eteran/edb-debugger.git cd edb-debugger && mkdir build && cd build cmake .. && make ./edb
|
ghidra
参照 GitHub上的安装方法即可,Kali 已经安装~
1 2 3 4 5 6
| cd /opt/ wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_10.0.4_build/ghidra_10.0.4_PUBLIC_20210928.zip unzip ghidra_10.0.4_PUBLIC_20210928.zip mv ghidra_10.0.4_PUBLIC/ ghidra/ sudo apt install default-jdk ./ghidra/ghidraRun
|
安装 32 位库
1 2
| sudo apt install -y libc6-dev-i386 sudo apt install -y lib32z1
|
跨平台架构环境配置
Qemu
安装 qemu-user
1
| sudo apt install -y qemu qemu-user qemu-user-static
|
安装 qemu-system
1 2 3
| sudo apt install -y qemu qemu-user-static qemu-system uml-utilities bridge-utils
|
提示:如 aarch64 安装好的库在/usr/aarch64-linux-gnu/lib/
目录下qemu-aarch64
执行时通过-L
指定/usr/aarch64-linux-gnu
目录即可,如:
1
| qemu-aarch64 -L /usr/aarch64-linux-gnu ./pwn
|
不想手动安装的可以看最后的命令合集~
Mips
mipsel 小端序 32 位
1
| sudo apt install gcc-mipsel-linux-gnu g++-mipsel-linux-gnu libc6-mipsel-cross binutils-mipsel-linux-gnu
|
mips 大端序 32 位
1
| sudo apt install gcc-mips-linux-gnu g++-mips-linux-gnu libc6-mips-cross binutils-mips-linux-gnu
|
mips64el 小端序 64 位
1
| sudo apt install gcc-mips64el-linux-gnuabi64 g++-mips64el-linux-gnuabi64 libc6-mips64el-cross binutils-mips64el-linux-gnuabi64
|
mips64 大端序 64 位
1
| sudo apt install gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 libc6-mips64-cross binutils-mips64-linux-gnuabi64
|
mipsisa32r6el 小端序 64 位
1
| sudo apt install gcc-mipsisa32r6el-linux-gnu g++-mipsisa32r6el-linux-gnu libc6-mipsr6el-cross binutils-mipsisa32r6el-linux-gnu
|
mipsisa32r6 大端序 64 位
1
| sudo apt install gcc-mipsisa32r6-linux-gnu g++-mipsisa32r6-linux-gnu libc6-mipsr6-cross libc6-mipsr6-cross binutils-mipsisa32r6-linux-gnu
|
注:参考文章中关于 libc6-dbg-mips*
现已无法安装,本文将去除此包~
mipsrop 插件
参照 GitHub 上的安装方法即可~
1
| https://github.com/devttys0/ida/tree/master/plugins/mipsrop
|
Arm
armel 软浮点 小端序 32 位
1
| sudo apt install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc6-armel-cross libc6-dbg-armel-cross binutils-arm-linux-gnueabi
|
armhf 硬浮点 小端序 32 位
1
| sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-armhf-cross libc6-dbg-armhf-cross binutils-arm-linux-gnueabi
|
aarch64 小端序 64 位
1
| sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-arm64-cross libc6-dbg-arm64-cross binutils-aarch64-linux-gnu
|
hppa(PA-RISC)
hppa 大端序 32 位
1
| sudo apt install gcc-hppa-linux-gnu g++-hppa-linux-gnu libc6-hppa-cross libc6-dbg-hppa-cross binutils-hppa-linux-gnu
|
hppa64 大端序 64 位
1
| sudo apt install gcc-hppa64-linux-gnu binutils-hppa64-linux-gnu
|
m68k
m68k 大端序 32 位
1
| sudo apt install gcc-m68k-linux-gnu g++-m68k-linux-gnu libc6-m68k-cross libc6-dbg-m68k-cross binutils-m68k-linux-gnu
|
ppc
powerpc 大端序 32 位
1
| sudo apt install gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc6-powerpc-cross libc6-dbg-powerpc-cross binutils-powerpc-linux-gnu
|
powerpc64 大端序 64 位
1
| sudo apt install gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc6-ppc64-cross libc6-dbg-ppc64-cross binutils-powerpc64-linux-gnu
|
powerpc64le 小端序 64 位
1
| sudo apt install gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc6-ppc64el-cross libc6-dbg-ppc64el-cross binutils-powerpc64le-linux-gnu
|
注:原博主的文章中 powerpcspe 信号处理引擎 大端序 32 位 现已无法安装,已经去除
s390x
s390x 大端序 64 位
1
| sudo apt install gcc-s390x-linux-gnu g++-s390x-linux-gnu libc6-s390x-cross libc6-dbg-s390x-cross binutils-s390x-linux-gnu
|
sh4
sh4 小端序 32 位
1
| sudo apt install gcc-sh4-linux-gnu g++-sh4-linux-gnu libc6-sh4-cross libc6-dbg-sh4-cross binutils-sh4-linux-gnu
|
sparc64
sparc64 大端序 64 位
1
| sudo apt install gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc6-dbg-sparc64-cross
|
alpha
alpha 小端序 64 位
1
| sudo apt install gcc-alpha-linux-gnu g++-alpha-linux-gnu libc6.1-alpha-cross libc6.1-dbg-alpha-cross binutils-alpha-linux-gnu
|
x86_64
i686 小端序 32 位
1
| sudo apt install gcc-i686-linux-gnu g++-i686-linux-gnu libc6-i386-cross libc6-dbg-i386-cross binutils-i686-linux-gnu
|
x86_64x32 小端序 32 位
1
| sudo apt install gcc-x86-64-linux-gnux32 g++-x86-64-linux-gnux32 libc6-x32-cross libc6-dbg-x32-cross binutils-x86-64-linux-gnux32
|
riscv64
riscv64 小端序 64 位
1
| sudo apt install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libc6-riscv64-cross libc6-dbg-riscv64-cross binutils-riscv64-linux-gnu
|
ia64
ia64 小端序 64 位
只有类似 readelf 和 objdump 这种工具可以用,莫得 libc 和 gcc 以及 g++
1
| sudo apt install binutils-ia64-linux-gnu
|
跨平台配置命令合集
适用于 Ubuntu 20.04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| sudo apt install -y \ gcc-mipsel-linux-gnu g++-mipsel-linux-gnu libc6-mipsel-cross binutils-mipsel-linux-gnu \ gcc-mips-linux-gnu g++-mips-linux-gnu libc6-mips-cross binutils-mips-linux-gnu \ gcc-mips64el-linux-gnuabi64 g++-mips64el-linux-gnuabi64 libc6-mips64el-cross binutils-mips64el-linux-gnuabi64 \ gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 libc6-mips64-cross binutils-mips64-linux-gnuabi64 \ gcc-mipsisa32r6el-linux-gnu g++-mipsisa32r6el-linux-gnu libc6-mipsr6el-cross binutils-mipsisa32r6el-linux-gnu \ gcc-mipsisa32r6-linux-gnu g++-mipsisa32r6-linux-gnu libc6-mipsr6-cross libc6-mipsr6-cross binutils-mipsisa32r6-linux-gnu \ gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc6-armel-cross libc6-dbg-armel-cross binutils-arm-linux-gnueabi \ gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-armhf-cross libc6-dbg-armhf-cross binutils-arm-linux-gnueabi \ gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-arm64-cross libc6-dbg-arm64-cross binutils-aarch64-linux-gnu \ gcc-hppa-linux-gnu g++-hppa-linux-gnu libc6-hppa-cross libc6-dbg-hppa-cross binutils-hppa-linux-gnu \ gcc-hppa64-linux-gnu binutils-hppa64-linux-gnu \ gcc-m68k-linux-gnu g++-m68k-linux-gnu libc6-m68k-cross libc6-dbg-m68k-cross binutils-m68k-linux-gnu \ gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc6-powerpc-cross libc6-dbg-powerpc-cross binutils-powerpc-linux-gnu \ gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc6-ppc64-cross libc6-dbg-ppc64-cross binutils-powerpc64-linux-gnu \ gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc6-ppc64el-cross libc6-dbg-ppc64el-cross binutils-powerpc64le-linux-gnu \ gcc-s390x-linux-gnu g++-s390x-linux-gnu libc6-s390x-cross libc6-dbg-s390x-cross binutils-s390x-linux-gnu \ gcc-sh4-linux-gnu g++-sh4-linux-gnu libc6-sh4-cross libc6-dbg-sh4-cross binutils-sh4-linux-gnu \ gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc6-dbg-sparc64-cross \ gcc-alpha-linux-gnu g++-alpha-linux-gnu libc6.1-alpha-cross libc6.1-dbg-alpha-cross binutils-alpha-linux-gnu \ gcc-i686-linux-gnu g++-i686-linux-gnu libc6-i386-cross libc6-dbg-i386-cross binutils-i686-linux-gnu \ gcc-x86-64-linux-gnux32 g++-x86-64-linux-gnux32 libc6-x32-cross libc6-dbg-x32-cross binutils-x86-64-linux-gnux32 \ gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libc6-riscv64-cross libc6-dbg-riscv64-cross binutils-riscv64-linux-gnu \ binutils-ia64-linux-gnu
|
适用于 Ubuntu 18.04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| sudo apt install -y \ gcc-mipsel-linux-gnu g++-mipsel-linux-gnu libc6-mipsel-cross binutils-mipsel-linux-gnu \ gcc-mips-linux-gnu g++-mips-linux-gnu libc6-mips-cross binutils-mips-linux-gnu \ gcc-mips64el-linux-gnuabi64 g++-mips64el-linux-gnuabi64 libc6-mips64el-cross binutils-mips64el-linux-gnuabi64 \ gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 libc6-mips64-cross binutils-mips64-linux-gnuabi64 \ libc6-mipsr6el-cross binutils-mipsisa32r6el-linux-gnu \ libc6-mipsr6-cross libc6-mipsr6-cross binutils-mipsisa32r6-linux-gnu \ gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc6-armel-cross libc6-dbg-armel-cross binutils-arm-linux-gnueabi \ gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-armhf-cross libc6-dbg-armhf-cross binutils-arm-linux-gnueabi \ gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-arm64-cross libc6-dbg-arm64-cross binutils-aarch64-linux-gnu \ gcc-hppa-linux-gnu g++-hppa-linux-gnu libc6-hppa-cross libc6-dbg-hppa-cross binutils-hppa-linux-gnu \ gcc-hppa64-linux-gnu binutils-hppa64-linux-gnu \ gcc-m68k-linux-gnu g++-m68k-linux-gnu libc6-m68k-cross libc6-dbg-m68k-cross binutils-m68k-linux-gnu \ gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc6-powerpc-cross libc6-dbg-powerpc-cross binutils-powerpc-linux-gnu \ gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc6-ppc64-cross libc6-dbg-ppc64-cross binutils-powerpc64-linux-gnu \ gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc6-ppc64el-cross libc6-dbg-ppc64el-cross binutils-powerpc64le-linux-gnu \ gcc-s390x-linux-gnu g++-s390x-linux-gnu libc6-s390x-cross libc6-dbg-s390x-cross binutils-s390x-linux-gnu \ gcc-sh4-linux-gnu g++-sh4-linux-gnu libc6-sh4-cross libc6-dbg-sh4-cross binutils-sh4-linux-gnu \ gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc6-dbg-sparc64-cross \ gcc-alpha-linux-gnu g++-alpha-linux-gnu libc6.1-alpha-cross libc6.1-dbg-alpha-cross binutils-alpha-linux-gnu \ gcc-i686-linux-gnu g++-i686-linux-gnu libc6-i386-cross libc6-dbg-i386-cross binutils-i686-linux-gnu \ gcc-x86-64-linux-gnux32 g++-x86-64-linux-gnux32 libc6-x32-cross libc6-dbg-x32-cross binutils-x86-64-linux-gnux32 \ gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libc6-riscv64-cross libc6-dbg-riscv64-cross binutils-riscv64-linux-gnu \ binutils-ia64-linux-gnu
|
适用于 Kali Linux
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| sudo apt install -y \ gcc-mipsel-linux-gnu g++-mipsel-linux-gnu libc6-mipsel-cross binutils-mipsel-linux-gnu \ gcc-mips-linux-gnu g++-mips-linux-gnu libc6-mips-cross binutils-mips-linux-gnu \ gcc-mips64el-linux-gnuabi64 g++-mips64el-linux-gnuabi64 libc6-mips64el-cross binutils-mips64el-linux-gnuabi64 \ gcc-mips64-linux-gnuabi64 g++-mips64-linux-gnuabi64 libc6-mips64-cross binutils-mips64-linux-gnuabi64 \ gcc-mipsisa32r6el-linux-gnu g++-mipsisa32r6el-linux-gnu libc6-mipsr6el-cross binutils-mipsisa32r6el-linux-gnu \ gcc-mipsisa32r6-linux-gnu g++-mipsisa32r6-linux-gnu libc6-mipsr6-cross libc6-mipsr6-cross binutils-mipsisa32r6-linux-gnu \ gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc6-armel-cross binutils-arm-linux-gnueabi \ gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-armhf-cross binutils-arm-linux-gnueabi \ gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-arm64-cross binutils-aarch64-linux-gnu \ gcc-hppa-linux-gnu g++-hppa-linux-gnu libc6-hppa-cross binutils-hppa-linux-gnu \ gcc-hppa64-linux-gnu binutils-hppa64-linux-gnu \ gcc-m68k-linux-gnu g++-m68k-linux-gnu libc6-m68k-cross binutils-m68k-linux-gnu \ gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc6-powerpc-cross binutils-powerpc-linux-gnu \ gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc6-ppc64-cross binutils-powerpc64-linux-gnu \ gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc6-ppc64el-cross binutils-powerpc64le-linux-gnu \ gcc-s390x-linux-gnu g++-s390x-linux-gnu libc6-s390x-cross binutils-s390x-linux-gnu \ gcc-sh4-linux-gnu g++-sh4-linux-gnu libc6-sh4-cross binutils-sh4-linux-gnu \ gcc-sparc64-linux-gnu g++-sparc64-linux-gnu \ gcc-alpha-linux-gnu g++-alpha-linux-gnu libc6.1-alpha-cross binutils-alpha-linux-gnu \ gcc-i686-linux-gnu g++-i686-linux-gnu libc6-i386-cross binutils-i686-linux-gnu \ gcc-x86-64-linux-gnux32 g++-x86-64-linux-gnux32 libc6-x32-cross binutils-x86-64-linux-gnux32 \ gcc-riscv64-linux-gnu g++-riscv64-linux-gnu libc6-riscv64-cross binutils-riscv64-linux-gnu \ binutils-ia64-linux-gnu
|
参考文章
跨平台架构的环境配置与调试 | binLep’s Blog
ubuntu18 安装各种 pwn 工具-Pwn-看雪论坛-安全社区|安全招聘|bbs.pediy.com
mips pwn 环境搭建 | A1ex’s Blog
arm pwn 环境搭建 | nocbtm’s Blog