前言 :
wiki上的东西基本撸完了。告一段落了,接下来就靠自己刷题刷了,今天看了眼关于arm和mips的pwn。学到了一些东西。先写写搭建环境的部分。
环境搭建 :
预备环境安装 :
安装 git,gdb 和 gdb-multiarch,同时安装 binfmt 用来识别文件类型。
1 | $ sudo apt-get update |
安装qemu :
对版本的要求不是很严格,直接通过apt等包管理安装即可。
1 | $ sudo apt-get install qemu-user |
通过 qemu 模拟 arm/mips 环境,进而进行运行和调试。
安装共享库 :
这时候只能运行静态链接的arm和mips文件,并不能运行动态链接的。
不能运行动态mips文件。
可以运行静态arm文件。
所以需要安装共享库才能运行动态链接文件。
安装对应架构的共享库,可以通过如下命令搜索:
1 | $ apt-cache search "libc6" | grep ARCH(架构名称) |
我们只需安装类似 libc6-ARCH-cross 形式的即可。
这里的mips文件,我们下载libc6-mipsel-cross。
运行 :
- 静态链接的直接运行,系统会自动调用对应架构的qemu。
- 动态链接的要附上对应的qemu并指定共享库路径,如下图是32位mips的动态链接。
使用-L指定共享库路径。
1 | $ qemu-mipsel -L /usr/mipsel-linux-gnu/ ./add |
调试 :
可以使用qemu中的-g指定端口:
1 | $ qemu-mipsel -g 1212 -L /usr/mipsel-linux-gnu/ ./add |
然后使用 gdb-multiarch 进行调试,先指定架构,然后使用remote调用端口:
1 | pwndbg> set architecture mips (但大多数情况下这一步可以省略, 似乎 pwndbg 能自动识别架构) |
之后就可以进行调试了。
同样的,如果想要运行调试其他架构的二进制文件,只需要安装其他架构的qemu和共享库就可以了。