totolink

totolink路由器环境搭建

固件提取

固件型号:NR1800X

固件下载地址:https://www.totolink.net/home/menu/detail/menu_listtpl/download/id/225/ids/36.html

下载得固件为 TOTOLINK_C834FR-1C_NR1800X_IP04469_MT7621A_SPI_16M256M_V9.1.0u.6279_B20210910_ALL.web,体积约 8MB。使用 binwalk 提取文件:

image-20240122203620437

其中squashfs-root目录下为文件系统,如果binwalk无法正常解压出文件系统,可以看

https://www.cnblogs.com/brain-Z/p/17980446

由busybox提供工具的,直接看busybox文件类型,32为mips,小端序

image-20240122204509338

路由器搭建过程

镜像选择

Debian 官网有提供针对 qemu 的 mipsel 架构的 Debian Linux 系统的内核、虚拟磁盘镜像下载,并提供 Debian6(squeeze)、Debian7(wheezy)两个版本:

image-20240122205552858

readme.txt:

1897034564

下载 32 位小端序的 mipsel 架构镜像(linux 中可直接通过 wget 下载),选择 Debian7 镜像,则下载内核镜像 debian_wheezy_mipsel_standard.qcow2 及虚拟磁盘镜像 vmlinux-3.2.0-4-4kc-malta。

通信方式

外主机和qemu虚拟机通信方式:

外主机:

# 安装 brctl 网桥配置工具
sudo apt-get  install bridge-utils

# 安装 tunctl 虚拟网卡配置工具
sudo apt-get install uml-utilities

# 添加一个网桥 br0
sudo brctl addbr br0

# 设置网桥 br0 的网段及掩码,并启用网桥
sudo ifconfig br0 192.168.5.1/24 up

# 新建一张虚拟网卡 tap0
sudo tunctl -t tap0

# 设置虚拟网卡 tap0 的 ip 地址及掩码,并启用该虚拟网卡
sudo ifconfig tap0 192.168.5.11/24 up

# 将虚拟网卡 tap0 添加到网桥 br0 中
sudo brctl addif br0 tap0

qemu虚拟机:

ifconfig eth0 192.168.5.12 up

ping 192.168.5.1

启动逻辑

在qemu-system模式下

system 模拟方式会模拟出一整个包括 cpu、周边设备的目标系统,类似 VMWare 等。为此我们需要准备一些材料:

  • 内核镜像(必须)
  • -kernel vmlinux-3.2.0-4-4kc-malta - 指明内核镜像
  • 虚拟磁盘镜像(必须)
  • -hda debian_wheezy_mipsel_standard.qcow2 - 指明虚拟磁盘镜像
  • 网卡(非必须)
  • -netdev tap,id=tapnet,ifname=tap0,script=no - 配置一个主机侧的 TAP 网络设备,命名为 tapnet,使用主机的 tap0 网卡
  • -device rtl8139,netdev=tapnet - 使用 rtl8139 型号网卡,对应的设备为前面创建的 tapnet 设备
  • 如果我们需要模拟出来的 guest 系统具有网络能力,则需要为其添加网卡

在qemu-system成功模拟目标debian系统后,在目标debian系统里用qemu-user模式的qemu-mipsel-static启动对应的lighttpd服务

system模式启动命令:

sudo qemu-system-mipsel \
-M malta \
-kernel vmlinux-3.2.0-4-4kc-malta \
-hda debian_wheezy_mipsel_standard.qcow2 \
-append "root=/dev/sda1 console=tty0" \
-netdev tap,id=tapnet,ifname=tap0,script=no \
-device rtl8139,netdev=tapnet \
-nographic
-no-reboot

对应的解释:

* qemu-system-mipsel
  - 已安装到系统的 mipsel 架构的 system 模拟方式的 qemu 程序
* -M malta
  - 使用 malta 开发板进行仿真模拟
* -kernel vmlinux-3.2.0-4-4kc-malta
  - 指明内核镜像
* -hda debian_wheezy_mipsel_standard.qcow2
  - 指明虚拟磁盘镜像
* -append "root=/dev/sda1 console=tty0"
  - 指明根文件系统所在设备,以及控制台信息
* -netdev tap,id=tapnet,ifname=tap0,script=no
  - 配置一个主机侧的 TAP 网络设备,命名为 tapnet,使用主机的 tap0 网卡
* -device rtl8139,netdev=tapnet
  - 使用 rtl8139 型号网卡,对应的设备为前面创建的 tapnet 设备
* -nographic
  - 非图形界面
-no-reboot
 -exit instead of rebooting 默认qemu虚拟机里关机后,又会再次重启,加上该指令关机后直接退出qemu,关机指令:shotdown -h now

访问传输

外主机远程访问qemu虚拟机

ssh root@192.168.5.12

外主机向qemu虚拟机上传固件的文件系统

scp -r squashfs-root root@192.168.5.12:/root/

启动服务

在qemu虚拟机内输入

chroot ./squashfs-root/ /bin/sh  #注意此时chroot会临时修改当前根目录,如果固件文件系统的/lib等库未成功拷贝过来,会导致固件文件系统无法启动/bin/sh,显示找不到该文件

mkdir /var/run

touch /var/run/lighttpd.pid

/usr/sbin/lighttpd -f /lighttp/lighttpd.conf

路由器文件分析

user模式启动需求:

直接运行lighttpd发现需要-f指定config文件

lmy@ubuntu:~/Desktop/iot/extracted/squashfs-root$ sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd
2024-01-22 14:35:29: (server.c.548) No configuration available. Try using -f option. 

加上-f指定为文件系统下./lighttp/lighttpd.conf后,显示需要在/var/run里生成pid文件

lmy@ubuntu:~/Desktop/iot/extracted/squashfs-root$ sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd -f ./lighttp/lighttpd.conf
2024-01-22 16:21:24: (server.c.624) opening pid-file failed: /var/run/lighttpd.pid No such file or directory

于是

mkdir ./var/run
touch ./var/run/lighttpd.pid

然后即可在user模式启动lighttpd

交互主逻辑:

image-20240122231318659

看请求应该是 cgi 后台,在固件中 www 目录中找到 cgi 程序

后续继续复现中

posted @ 2024-01-23 00:30  brain_Z  阅读(101)  评论(0编辑  收藏  举报