ARM_PWN环境搭建(ubuntu16.04)

经过上海大学生网络安全比赛,意识到现在的pwn题已经在往arm方向出题了,真是让人感到头凉,是时候学习arm下的相关知识,然而学arm pwn的第一步是先搭建好一个环境,光是这一步都够坑人了,我的虚拟机是Ubuntu16.04的,就根据我的遇坑情况,写一下我搭环境的过程:

环境:Ubuntu16.04

gdb插件:gef

测试题目:2018上海大学生网络安全比赛babyarm(aarch64)

以下是执行的命令:

$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:pwntools/binutils
$ sudo apt-get update
$ sudo apt-get install binutils-$aarch64-linux-gnu
以后如果用其他架构需要把上面这条命令中的arrch64相应的改一下
安装好binutils用来识别文件类型,是为了能够后面pwntools能识别出你的指令架构,从而产生能对应的shellcode
官方文档:https://docs.pwntools.com/en/stable/install/binutils.html

$ sudo apt-get install git gdb gdb-multiarch
安装gdb的多架构

sudo apt-get install qemu-use
通过 qemu 模拟 arm/mips 环境,进而进行调试

$ sudo apt-cache search "libc6" | grep arm
$ sudo apt-get install libc6-arm64-cross
接着安装好相应架构的libc,只需安装类似 libc6-ARCH-cross 形式的即可
如果以后想安装mips架构的就按照上面进行相应的修改

至此该安装的就安装完了
可以直接使用如下命令执行了:

#使用 -L 指定共享库(适用于动态链接的程序,如果是静态链接的话直接匹配不需要加)
qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./arm_pwn
注意这里的命令需要根据具体的架构进行修改
qemu-ARCH -L /usr/相应的libc目录/ ./ARCH_elf

如果要对程序进行调试的话就使用如下命令:
首先开一个命令窗口:
qemu-aarch64 -g 1234 -L /usr/aarch64-linux-gnu/ ./arm_pwn
然后在另一个命令窗口:
$ gdb-multiarch ./add -q
gef➤  set architecture aarch64 (一般可以省略,因为前面安装了可自动识别的东西)
gef➤  target remote 127.0.0.1:1234

以上的操作参考了以下大佬的博客:

1mpossible

m4x(该大佬写了一个脚本可以直接通过exp进行调试的,可以说是很秀了)

我跟他们的做法不太一样,他们直接安装了deepin系统,我嫌麻烦,直接用Ubuntu搞,如果有跟我一样环境的朋友可以直接参考一哈