0%

背景

baby_mips是DDCTF 2018 逆向的第1题,是MIPS指令架构的。MIPS指令架构是一种采用精简指令集的处理器架构,常用于路由器等嵌入式设备中。

静态分析

使用file命令查看文件格式,如下。可以看到程序为MIPS架构 小端格式,同时是通过静态链接生成的。

1
2
$ file baby_mips
baby_mips: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, stripped
阅读全文 »

堆溢出原理

相比栈溢出而言,堆溢出的原理类似,但是堆溢出的利用则更复杂,因为glibc堆管理机制比较复杂。

堆溢出的利用主要围绕在binfree chunk的合并过程,在两个free chunk的合并过程中,有两次改写地址的机会。例如,对于将要合并的chunk P,在合并发生时,glibcchunk Pbinlistunlink掉,其中涉及到以下指针操作:

1
2
3
4
FD = P -> fd;  // FD为相对于P下一个chunk的地址
BK = P -> bk; // BK为相对于P上一个chunk的地址
FD -> bk = BK; //用上一个chunk的地址去改写下一个chunk的前向指针bk,即改写FD+12(32 bits)或FD+24(64 bits)地址中的内容
BK -> fd = FD; //用下一个chunk的地址去改写上一个chunk的后向指针fd,即改写BK+8(32 bits)或BK+16(64 bits)地址中的内容
阅读全文 »