修复固件运行环境

环境

Ubuntu16.04
工具:
binwalk 提取固件
buildroot检查编译环境
IDA调试

修复对象(运行boa(web程序)):
D-Link DIR-605L(FW_113)
下载地址:ftp://ftp2.dlink.com/PRODUCTS/DIR-605L/REVA/

参考:
《揭秘家用路由器0day》

步骤

1,提取固件,同时可以得到一些信息
在这里插入图片描述
同目录下生成的文件夹:
在这里插入图片描述

2,boa程序位置
在这里插入图片描述

运行它,
命令:
2.1,先把交叉编译器放到当前目录下(下图中指出),书中的是qemu-mips,容易出现问题编译不过去,建议安装qemu-mips-static(方法:sudo apt-get install qemu-user-static qemu-system-mips

cp $(which qemu-mips-static)	./

在这里插入图片描述
2.2,运行(书上 chroot 后面少了个 点 .)

sudo chroot . ./qemu-mips-static ./bin/boa

执行完命令后会提示错误(这里我已经修复了,下面粘贴下书上的内容大家参考,都是一模一样的提示报错)
在这里插入图片描述

3,IDA调试,找到报错Initialize AP MIB failed的流程。(字符串搜索定位即可,shift+f12)
参考:IDA远程调试 和 apmib_init函数功能

使用到的调试命令:

sudo chroot . ./qemu-mips-static -g port	./bin/boa

在这里插入图片描述
修复它,这bqez是修复好的。原先是bnez,修改一个字节即可,把0x14换成0x10。

4,修复好了这个点,如还有问题,可继续按此流程分析,然后通过劫持函数动态库修复一系列问题。(此程序经过分析,产生问题的函数都来至动态链接库apmib.so,所以作者自己从写了新的内容的apmib.so修复这些函数)

//ampib.c
#include<stdio.h>
#include<stdlib.h>
#define MIB_IP_ADDR 170
#define MIB_HW_VER 0x250
#define MIB_CAPTCHA 0x2C1
int apm_init(void)
{
	return 1;
}
int fork(void)
{
	return 0;
}
void apmib_get(int code, int *value)
{
	switch(code)
	{
		case MIB_IP_ADDR:
			*value = 0x7F000001;
			break;
		case MIB_HW_VER:
			*value = 0xF1;
			break;
		case MIB_CAPTCHA:
			*value = 1;
			break;
	}
	return; 
}

分析这块纯考验re功底,怼时间和经验。

编译命令(生成新的apmib-ld.so):

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

-Wall 输出警告信息
-fPIC 编译位置独立
-share 生产动态链接库
-o 输出文件

5,文件放置到恰当的位置
apmid-ld.so
在这里插入图片描述
重点:apmid-ld.so它编译需要依赖libgcc_s.so.1(这文件要放到lib下,原本是没有的)
在这里插入图片描述
如何找到libgcc_s.so.1,并且放到lib文件夹下:
通过find命令
在这里插入图片描述
然后,通过cp 命令复制过去即可。

6,修复完成,执行

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

LD_PRELOAD说明:
在这里插入图片描述
跑起来了,并查看网络端口

	netstat -an    | grep 80

在这里插入图片描述
在这里插入图片描述

后续页面修复(代码审计一波)

1,运行boa程序后打开当前服务web界面
在这里插入图片描述
输入ip,自动跳转到/Basic/Wizard…这个页面。
找到这个文件,打开
在这里插入图片描述
它是获取个硬件内容(我们仿真,哪来的硬件,所以打不开)
在这里插入图片描述
2,改变流程,找到first.asp(为什么是这个文件控制优先被读取呢?我想跟web开发里面默认读取的是一样的,虽然可以修改,不一定总是这个哈)
在这里插入图片描述
查看内容逻辑,并修改:
打开web时,它init()流程
在这里插入图片描述
3,完成
在这里插入图片描述
然后可以开始挖各种洞了

总结

仿真环境最困难的就是各种环境问题不匹配,导致程序无法运行,所以无法继续深入去挖掘漏洞,修复一个环境是基础(当然有实际设备最好了),其他的产品修复的大致流程也就上述过程类似了。总的来说还是太菜了,在此过程中也遇到了无数坑,而所能查到的资料实在太少了,所以以上内容真的是一步一步贴出供大家参考,
最后,欢迎大家交流,一起探讨IOT安全研究所遇到的各种问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值