• Home
  • About
    • tearorca photo

      tearorca

      Wishful thinking have to be willing to bet on clothing!

    • Learn More
    • Google+
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

路由器运行环境修复

30 Jul 2019

Reading time ~1 minute

  • 路由器运行环境修复
    • 简介
    • 恢复环境
    • 参考链接

路由器运行环境修复

简介

有的固件下载完之后会出现运行环境错误的情况,所以需要手动修复,固件下载:ftp://ftp2.dlink.com/PRODUCTS/DIR-605L/REVA/DIR-605L_FIRMWARE_1.13.ZIP

恢复环境

用binwalk提取出固件,然后又提取出根文件系统中找到目录Web服务器程序boa:/bin/boa,然后先运行下,发现崩溃了。

ida加载boa,查找字符串找到打印”Initialize AP MIB failed!“的位置,可以看到是apmib_init这个函数返回值为0的时候跳到了打印函数。

LOAD:00418214 la $t9, apmib_init

LOAD:00418218 nop

LOAD:0041821C jalr $t9 ; apmib_init

LOAD:00418220 nop

LOAD:00418224 lw $gp, 0x38+var_28($sp)

LOAD:00418228 bnez $v0, loc_418250

LOAD:0041822C nop

LOAD:00418230 la $a0, (aSsiDnsResolveA+0x10) # "asp"

LOAD:00418234 la $t9, puts

LOAD:00418238 nop

LOAD:0041823C jalr $t9 ; puts

LOAD:00418240 addiu $a0, (aInitializeApMi - 0x490000) # "Initialize AP MIB failed!"

LOAD:00418244 lw $gp, 0x38+var_28($sp)

LOAD:00418248 b loc_4184B4

LOAD:0041824C nop

想具体看看这个函数内部结构发现在ida里面并没有找到,这证明了这个函数不是boa文件里面调用的,而是链接库里的文件。

根据书本的介绍这个函数来自apmib.so动态链接库,用ida加载这个库,看了看这个缩略图,这个函数真的很复杂。

但可以看到之前ida加载的boa文件中,发现这个函数的交叉引用整个我呢就只在这个地方有用到,所以对这个函数的实际功能可以不怎么了解,对后面的运行也没有影响。所以可以写一个伪造函数来替代它,让它的返回值为1就不会出现报错了。

代码:

#include <stdio.h>

#include <stdlib.h>

int apmib_init(void)

{

	return 1;

}

然后用这条命令编译成共享库,要注意这里一定要用mips大端交叉编译模式编译,不能用mipsel,因为boa文件就是大端模式。我这里弄了比较长的时间,因为之前安装交叉编译环境是装的mipsel的,但看资料说可以用mipsel进行大端的编译,但没找到参数是什么,搞了半天只能重新再装一个mips大端的交叉编译环境。编译完之后放在根目录下面

./mips-linux-gcc -Wall -fPIC -shared apmib.c -o apmib-ld.so

chroot . ./qemu-mips -E LD_PRELOAD="/apmib-ld.so" ./bin/boa

重新编译之后发现还有崩溃,最开始还是和上面的方法一样找输出的字符串是什么错误,但发现没有什么用,照着书上动态调试发现在apmib_get()处崩溃,并且在apmib_get()之前就输出了这段字符串。

找到apmib_get()函数,然后也劫持它。

void apmib_get(int code,int *value)

{

	switch(code)

	{

	case 0x250:

		*value=0xf1;

		break;

	case 170:

		*value=0xf1;

		break;

	case 0x2c1:

		*value=0xf1;

		break;

	}

}

重新编译

./mips-linux-gcc -Wall -fPIC -shared apmib.c -o apmib-ld.so

可以访问了

参考链接

《揭秘家用路由器0day漏洞分析技术》



Share Tweet +1