mips-pwn入门
[TOC]
MIPS-PWN
qemu
1 | sudo apt-get install qemu-user qemu-system |
gdb-multiarch
1 | sudo apt-get install gdb-multiarch |
MIPS软件包
1 | 具备MIPS交叉编译gcc与MIPS程序动态链接库 |
lib
lib是一个libc文件夹
里面要有两个文件,且名称有要求,
名称信息在ELF文件中,看报错信息将所给lib中的ld和libc改名即可,没给lib的话一般是常用的相关动态链接库
1 | ld : ld-uClibc.so.0 |
寄存器
指令集
mips_arm汇编学习 - Note (gitbook.io)
启动mips程序
1 | qemu-mipsel -g 端口号 -L lib的父文件夹路径 ./程序名 |
将mips程序映射到本地的某端口
(-g 端口号)去掉为直接运行
例子:
1 | #!/usr/bin/env python3 |
gdb–multiarch动态调试
开启mips程序服务后
1 | io=process(['gdb-multiarch', |
然后下断点调试即可
例子:
1 | #!/usr/bin/env python3 |
ROPgadget
ROPgadget
1 | ROPgadget --binary lib/libc.so.0 --mipsrop stackfinder > gadget |
IDA
1 | mipsrop.stackfinder() |
能shellcode绝不rop
由于跳转时绝大多数情况下利用$t9寄存器间接跳转,所以rop难度上升
而mips没有NX保护,shellcode难度下降
能用shellcode不用rop
相关例题
managesystem
mips堆,unlink
1 | #!/usr/bin/env python3 |
embedded_heap
由于用的是qemu-user运行的程序,pwndbg的vmmap没法使用,并且运行过程中调试出现玄学错误,导致无法调试,之后看看docker搭环境能否正常调试吧。
-------------本文结束感谢您的阅读-------------