记录下mips架构环境的搭建和利用
0x0 mips基本知识
a0-a3
: 存储参数fp
:fram pointer
,用来恢复栈之类的操作,可以理解为和ebp
差不多的作用sp
: 存储栈地址v0...
: 存储一些变量或地址t8,t9
: 临时寄存器,t9
常常用来调用函数。如alarm
的plt
调用如下
0x1 交叉编译环境
大端
1 | sudo apt-get install linux-libc-dev-mips-cross |
小端
1 | sudo apt-get install linux-libc-dev-mipsel-cross |
qemu有一个参数是是-L
1 | -L path QEMU_LD_PREFIX set the elf interpreter prefix to 'path' |
通过这个我们可以指定lib所在的位置,进入/usr
可以看到mips库所在的位置
1 | wood@ubuntu:~/pwn/mips/magicheap$ ls /usr/ |
假设我们手头有一个mips小端的程序,我们就可以通过以下参数启动它。
1 | qemu-mipsel -L /usr/mipsel-linux-gnu/ ./hello |
pwn02_babystack
准备工作
这里采用qemu的用户模式来创建一个虚拟机执行程序。
先把对应的libc库放置当前目录的一个lib文件夹中
1 | mkdir lib |
启动虚拟机
1 | qemu-mipsel -L ./ ./main |
调试
1 | qemu-mipsel -L ./ ./main |
然后另开一个终端(用pwndbg调试起来比较友好)
1 | gdb-multiarch ./main |
题目分析
很简单,就是一个栈溢出然后执行shellcode就好了
exp
1 | from pwn import * |