文章首发于安全客 ,本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/199112
安全客 – 有思想的安全新媒体

0x01 写在前面

本文作为”Multi-arch Pwn 系列”中的文章之一,因为篇幅过长,只能分架构来总结了。

多架构Pwn的题目虽然不多,但还是想要在这里总结一些常见的思路。

本文的部分内容引用了大佬的博客原文,已在文章末尾的参考链接中注明了原作者。

0x02.1 前置环境(基于Mac OS的环境搭建)

我们如果要使用多架构进行利用,我们一般需要安装qemu进行调试。

在 Mac OS 下我们可以使用brew install qemu来安装我们所需要的qemu。

但是,我们会发现我们无法使用大多数博客所述的qemu-arm来运行静态链接的其他架构程序。

经过查阅官方文档,我们发现官网中已经做了明确说明

5. QEMU User space emulator

5.1 Supported Operating Systems

The following OS are supported in user space emulation:

  • - Linux (referred as qemu-linux-user)
  • - BSD (referred as qemu-bsd-user)

也就是说,仅限Linux系统和BSD系统才能进行用户级别的仿真运行。那么我们尝试进行系统级别的仿真。

此处我们使用树莓派的系统镜像进行模拟。

准备qemu kernel

Kernel下载链接:https://github.com/dhruvvyas90/qemu-rpi-kernel

System Image下载链接:https://www.raspberrypi.org/downloads/raspbian/

此处因为网络原因导致镜像下载受阻,于是采用另一位大佬给出的替代方案~

关于启动选项的说明

-kernel kernel-qemu:指定启动所加载的内核文件类型,此处使用下载的内核映像类型kernel-qemu

-cpu arm1176:指定启动所使用的CPU文件,此处模拟ARM1176 CPURaspberry Pi板上搭载了Broadcom BCM2835,这个处理器用的是ARM1176JZ-F

-m 256:指定仿真系统可使用的内存大小,此处RAM的大小是256MB. 设定成比256MB大的值板子好像不能启动.

-M versatilepb:设定模拟的开发板类型。versatilepbARM Versatile Platform Board

-kernel kernel-qemu-4.4.34-jessie:指定启动所加载的内核镜像,此处使用下载的内核映像kernel-qemu-4.4.34-jessie

-append "root=/dev/sda2":指定内核的命令行。

-hda 2013-09-25-wheezy-raspbian.imgHarddisk 0使用2013-09-25-wheezy-raspbian.img

0x02.2 前置环境(基于Deepin4的环境搭建)

本部分全文基本全文引用如何 pwn 掉一个 arm 的binary——m4x,故做二次版权声明。

虚拟机前期准备工作——更新apt源、安装必备软件

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install screenfetch git vim python python-pip python3 python3-pip gdb gdb-multiarch cmake time
wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.sh | sh
pip3 install --user unicorn keystone-engine capstone -i https://pypi.tuna.tsinghua.edu.cn/simple
git clone https://github.com/sashs/filebytes.git
cd filebytes
sudo python3 setup.py install
git clone https://github.com/sashs/ropper.git
cd ropper
sudo python3 setup.py install
cd ~
wget https://github.com/keystone-engine/keystone/archive/0.9.1.tar.gz
tar xzvf 0.9.1.tar.gz
cd keystone-0.9.1/
mkdir build
cd build
../make-share.sh
sudo make install
sudo ldconfig
kstool
pip3 install --user ropper keystone-engine -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo pip install pwntools

安装QEMU及其依赖

sudo apt-get install qemu-user

安装动态运行库(不运行此步骤也可以运行静态多架构程序)

使用命令apt-cache search "libc6" | grep -E "arm|mips"搜索可用的多架构运行库。

image-20200127195916239

我们只需要安装形如libc6-*-cross的运行库即可。

使用命令sudo apt-get install libc6-arm64-cross libc6-armel-cross libc6-armhf-cross libc6-mips-cross libc6-mips32-mips64-cross libc6-mips32-mips64el-cross libc6-mips64-cross libc6-mips64-mips-cross libc6-mips64-mipsel-cross libc6-mips64el-cross libc6-mipsel-cross libc6-mipsn32-mips-cross libc6-mipsn32-mips64-cross libc6-mipsn32-mips64el-cross libc6-mipsn32-mipsel-cross安装。

安装binutils环境

当我们使用Pwntools里的asm命令时,可能会报如下错误:

dpkg-query: 没有找到与 *bin/armeabi*linux*-as* 相匹配的路径
[ERROR] Could not find 'as' installed for ContextType(arch = 'arm', bits = 32, endian = 'little', log_level = 10)
    Try installing binutils for this architecture:
    https://docs.pwntools.com/en/stable/install/binutils.html

此时我们需要安装binutils依赖,首先使用命令apt search binutils | grep [arch](此处的[arch]请自行替换)

image-20200217161700519

随后安装显示出的包即可完成

image-20200217161731966

0x02.3 前置环境(基于ARM_NOW的环境搭建)

项目地址:https://github.com/nongiach/arm_now

根据项目简介所述:

arm_now is a qemu powered tool that allows instant setup of virtual machines on arm cpu, mips, powerpc, nios2, x86 and more, for reverse, exploit, fuzzing and programming purpose.

arm_now是一款基于qemu的强大的工具,它允许在arm-cpu,mips,powerpc,nios2,x86等平台上即时设置虚拟机,以进行程序逆向,利用,模糊测试和编程工作。

项目使用wiki:https://github.com/nongiach/arm_now/wiki

分类: CTF

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注