在常见的mips路由器固件中,/bin/boa是个常用的web程序

而这里我们拿到固件后首先要尝试的就是将该固件的web服务启动起来

但是却遇到了如下错误

此时可以在IDA中搜索Initialize AP MIB failed!字符串,来分析程序崩溃的原因

可以看到问题就出现在这里,当apmib_init函数执行完成后寄存器$v0的值仍然为0,而bnez指令的作用便是根据$v0是否为0来跳转,因此由于apmid_init函数的错误而导致程序没有实现正常的跳转到loc_418250处,才出现错误。

针对上面情况,已知的有两种解决方案:

  • 一是找出apmib_init函数的libc库,然后伪造该libc库,进而进行劫持apmib_init函数到我们自己伪造的过程中。

    但是在伪造后让程序加载libc时却出现了出下错误,并且暂时未找到出现问题的原因

  • 二便是直接修改bnez指令,将其改为beqz,也就是判断$v0值为0时则进行跳转。

    但是利用ida patch修改字节的时候却也出现错误

    对于这个问题,我们直接使用010editor来修改即可

再次运行后发现还有新的错误出来

通过ida动态调试发现问题是出现在apmib_get函数导致的segmentation fault

继续老办法打开01editor 这回将地址0x48e2a8处填充为0字节

保存后再次运行