tenda固件分析
tenda固件仿真
版本信息
Firmware version: V15.03.06.47_multi
System:ubuntu 18.04
固件提取
下载固件地址:https://down.tendacn.com/uploadfile/AC10/US_AC10V1.0re_V15.03.06.47_multi_TDE.zip
binwalk -Me US_AC10V1.0re_V15.03.06.47_multi_TDE.bin
固件仿真
获取仿真固件内核以及镜像
wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2
wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta
配置网络,qemu安装过程省略
ifconfig ens33 down
## 关闭网卡
vim /etc/network/interfaces
auto lo
iface lo inet loopback
auto br0
iface br0 inet dhcp
bridge_ports ens33
bridge_maxwait 0
## 配置网卡网桥,如上
apt install bridge-utils
## 安装网桥管理工具
ifconfig ens33 0.0.0.0 promisc up
ifconfig br0 0.0.0.0 promisc up
## 混合模式打开ens33和br0网卡
brctl stp br0 off
## 关闭生成树协议
brctl setfd br0 1
## 设置br0的转发延迟
brctl sethello br0 1
## 设置br0的hello时间
dhclient br0
## 获取动态ip
tunctl -t tap0
## 创建虚拟网卡
brctl addif br0 tap0
## 将tap0加入br0网桥
ifconfig tap0 0.0.0.0 promisc up
## 以混合模式打开tap0网卡
brctl showstp br0
## 可以通过该命令查看br0网桥信息,来检查配置
系统模式仿真
qemu-system-mipsel -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mipsel_standard.qcow2 -net nic -net tap,ifname=tap0 -append "root=/dev/sda1 console=tty0" -nographic
## username/password
## user/user
## root/root
进入系统之后,获取仿真系统的ip地址,将从固件中提取出来的文件系统squashfs-root拷贝仿真系统中
cd /root/squashfs-root
## 进入上传的squashfs-root文件夹下
mount -o bind /dev ./dev
## 将仿真系统的dev挂载到固件squashfs-root文件系统dev目录
mount -t proc /proc ./proc
## 将仿真系统的proc挂载到固件squashfs-root文件系统proc目录
chroot . sh
## 将squashfs-root作为根目录执行sh
bin/httpd
## 启动tenda的服务
启动服务时报错如下
查了相关文档,发现tenda服务启动时,存在网络检查函数,检查不通过会进入死循环,这里没有进入死循环而是直接退出了,通过ida分析定位到如下代码
可以看到存在三个检测函数分别为apmib_init、check_network、ConnectCfm,通过ida的插件keypatch修改为如下
keypath插件安装使用
将插件代码git clone下来,将里面的keypatch.py放入ida安装目录的plugins下即可
修改
选中修改行,右击选中如下
导出
在系统模式下启动服务发现,出现如下情况
查询相关文档得知,tenda启动服务文件默认绑定的是br0网卡,并且博主提供了两种解决思路:
1、修改httpd中绑定的网卡名为仿真系统中的网卡名
2、修改仿真系统的网卡名为br0
这里采用的是第二种方法
ifconfig eth0 down
ip link set eth0 name br0
ifconfig br0 up
再次启动即可成功获取ip
用户模式仿真
进入squashfs-root目录,并将qemu-mipsel-static命令复制到该目录下
chroot . qemu-mipsel-static -L . bin/httpd