arm-pwn环境配置

Posted by nop on 2020-12-27
Words 1k In Total

前言

最近打算学学arm-pwn,无赖这方面的东西一无所知,打算从头开始。本文是开篇的环境配置,只是做了简要设置,其余设置参见原文链接

QEMU emulation

原文

需要的文件:

  1. 镜像文件
  2. qmeu kernel

创建一个文件夹(qemu_vms), 同时安装qemu-system:
Alt

接着将下载的镜像文件解压,并加载:
Alt

从结果可以看出,img2从扇区92160开始,使用这个值乘以512(每个扇区512个字节):92160*512=47185920 bytes, 通过计算得到的偏移量挂载镜像:
Alt

随后编辑ld.so.preload文件,将内容全部注释,ctrl+x=》y保存更改:
Alt

接着编辑文件/mnt/raspbian/etc/fstab,以下文件内容包含mmcblk0的情况修改内容:
1. 替换第一个/dev/mmcblk0p1/dev/sda1
2. 替换第二个/dev/mmcblk0p2/dev/sda2
接着取消挂载:
sudo umount /mnt/raspbian
随后执行以下命令,启动模拟器:
qemu-system-arm -kernel ~/qemu_vms/qemu-rpi-kernel/kernel-qemu-4.4.34-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootstype=ext4 rw" -hda ~/qemu_vms/2017-04-10-raspbian-jessie.img -redir tcp:5022::22 -no-reboot
看到界面后说明启动成功:
Alt

从菜单中进入到终端,开启ssh服务:(这里鼠标似乎不能用,使用键盘的win键调出菜单然后方向键选择进入到终端):
Alt

默认密码为raspberry,使用ssh连接(启动qemu时将22端口映射到了5022):
Alt

提示修改密码:
Alt

设置ssh自启动,设置时编码出现问题,在~/.bashrc中添加export LC_ALL=C,然后source ~/.bashrc:
Alt

设置模拟器以命令行启动,而不是GUI:

1
2
3
4
$ sudo raspi-config
>Select 3 – Boot Options
>Select B1 – Desktop / CLI
>Select B2 – Console Autologin

Alt
Alt
Alt

为QEMU虚拟机添加空间

完成前面的设置之后,镜像变大,也就意味着空间已满,需要对镜像扩容:

  1. 拷贝原镜像并重置大小:
    Alt
  2. 使用拷贝的镜像作为第二个硬盘启动原来的系统:sudo qemu-system-arm -kernel ~/qemu_vms/qemu-rpi-kernel/kernel-qemu-4.4.34-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rooftstype=ext4 rw" -hda ~/qemu_vms/2017-04-10-raspbian-jessie.img -redir tcp:5022::22 -no-reboot -hdb ~/qemu_vms/raspbian.img
    Alt
  3. 登录树莓派并执行:sudo cfdisk /dev/sdb,接着删除第二个分区(sdb2)并使用所以可用空闲空间新建一个分区(主分区,设置类型为Linux LVM(id是8e))
    Alt
    Alt
  4. 重置大小并检查旧的分区,然后关机:
    Alt
  5. 以扩充的img启动qemu
    Alt

网络设置

某些情况下,我们需要访问QEMU虚拟机的所有端口,这种情况下可以创建一个开放所有端口的共享网卡(tap0)。

在ubuntu中执行:
Alt
Alt
设置完成之后可以看到对应的网卡:
Alt

随后以以下命令启动qemu:
sudo qemu-system-arm -kernel ~/qemu_vms/qemu-rpi-kernel/kernel-qemu-4.4.34-jessie -cpu arm1176 -m 256 -M versatilepb -serial stdio -append "root=/dev/sda2 rootfstype=ext4 rw" -hda ~/qemu_vms/raspbian.img -net nic -net tap,ifname=tap0,script=no,downscript=no -no-reboot
Alt

启动虚拟机之后,需要给虚拟机的网卡设置ip:
Alt

使用nc测试一下:
Alt

其他思路

[原创]ARM汇编基础教程番外篇——配置实验环境

使用交叉编译编译工具生成arm程序:

  1. 安装:sudo apt install gcc-5-arm-linux-gnueabi

  2. 安装完成之后,可以看到编译工具链:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    nop@ubuntu:~/Desktop$ arm-linux-gnueabi-
    arm-linux-gnueabi-addr2line arm-linux-gnueabi-gprof
    arm-linux-gnueabi-ar arm-linux-gnueabi-ld
    arm-linux-gnueabi-as arm-linux-gnueabi-ld.bfd
    arm-linux-gnueabi-c++filt arm-linux-gnueabi-ld.gold
    arm-linux-gnueabi-cpp-5 arm-linux-gnueabi-nm
    arm-linux-gnueabi-dwp arm-linux-gnueabi-objcopy
    arm-linux-gnueabi-elfedit arm-linux-gnueabi-objdump
    arm-linux-gnueabi-gcc-5 arm-linux-gnueabi-ranlib
    arm-linux-gnueabi-gcc-ar-5 arm-linux-gnueabi-readelf
    arm-linux-gnueabi-gcc-nm-5 arm-linux-gnueabi-size
    arm-linux-gnueabi-gcc-ranlib-5 arm-linux-gnueabi-strings
    arm-linux-gnueabi-gcov-5 arm-linux-gnueabi-strip
    arm-linux-gnueabi-gcov-tool-5
  3. 运行环境

  • 安装sudo apt install qemu-user-static
  • 运行程序qemu-arm-static test(此处的test文件需静态编译)
  • gdbserver远程连接:qemu-arm-static -g 12345 test,gdb(gdb-multiarch)中运行remote target:12345建立连接(gef-remote ip:port指令可以在远程调试中继续使用gef插件的部分特性)

You are welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them.