Ref: https://herowong.org/archives/a-special-experience-of-hacking-tplink-router.html
我在之前就发过文章,解决了学校校园网的设备限制问题,但是R2S存在一个问题,就是它没有WIFI,而有的时候就是需要那么点WIFI。正巧,我从某些地方薅了一些淘汰下来的路由回来,它们分别是TP-LINK TL-WDR5620、Tenda AC5和TP-LINK TL-WAR308
而我的要求是路由器必须得能刷openwrt来修改UA(不然一样会触发设备限制),经过在网上的一顿搜索后,对于三个路由器的情况分别是这样的
- TL-WDR5620:能刷,但是要拆机用编程器
- Tenda AC5:Openwrt官方明确说明不支持
- TL-WAR308:自带定制版openwrt,但是没有权限
在没有编程器的情况下,我选择对TL-WAR308下手,然后我又开始高强度网上冲浪,终于找到了能够获取root权限的方法
破解基础
我手上这个路由器的系统版本是1.2.1 Build 20190117 Rel.51148,硬件版本是v3.0

这个路由器存在一个备份配置文件的漏洞,具体来说就是在路由器的备份界面,备份当前用户配置的时候,会连同/etc/passwd和/etc/shadow一起拉下来
并且这个路由器每次重启会自动修改root密码,root密码的生成跟路由器的MAC地址有关,这个脚本在/etc/config/dropbear,同样会被备份下来
而熟悉linux的小伙伴都知道,在/etc/passwd中储存在用户的信息,而在/etc/shadow中储存着用户加密过后的密码,这样就能给我们提供切入点了
添加用户并打开SSH
添加用户
备份文件的目录结构大概是这样的
backup.bin └ tmp └ userconfig ├ etc └ www而我们直接打开etc文件夹的passwd和shadow,加入我们的用户信息
tmp/userconfig/etc/passwd
root:x:0:0:root:/root:/bin/ashdaemon:*:1:1:daemon:/var:/bin/falseftp:*:55:55:ftp:/home/ftp:/bin/falsenetwork:*:101:101:network:/var:/bin/falsenobody:*:65534:65534:nobody:/var:/bin/falseuser:x:0:0::/home/user:/bin/ashtmp/userconfig/etc/shadow
root:$1$THIS_IS_A_FAKE_PASSWD:16800:0:99999:7:::daemon:*:0:0:99999:7:::ftp:*:0:0:99999:7:::network:*:0:0:99999:7:::nobody:*:0:0:99999:7:::user:$1$.4M0yZly$FNS0YgMD.hda5ASGmFUbY.:18722:0:99999:7:::我把user的密码设置为了123456,接着我们还要打开ssh。根据参考文献,我们可以在etc/config/dropbear文件打开它
这个密码值是通过计算得到的:openssl passwd -1 123456
tmp/userconfig/etc/config/dropbear
config dropbear option PasswordAuth 'on' option RootPasswordAuth 'on' option Port '33400' option ssh_port_switch 'on'# option BannerFile '/etc/banner'把那个ssh_port_switch改成on就能够打开了
打包配置文件
通过file命令,我们可以看到这个文件的压缩方式
┌──(ctfos㉿Hello-CTF)-[/mnt/c/Users/HelloCTF_OS/Desktop/tp/backup-TP-LINK-2018-01-01]└─$ file backup-TP-LINK-2018-01-01.binbackup-TP-LINK-2018-01-01.bin: gzip compressed data, last modified: Sun Dec 31 16:06:24 2017, max compression, from Unix, original size modulo 2^32 663552所以我们要用同样的压缩方式压缩回去,要不然会提示配置文件格式错误(别问我怎么知道的,因为我就那么干了)
我们逐步运行下面的命令
tar -cvf tmp.tar tmpgzip -9 tmp.tarmv tmp.tar.gz new_backup-gzip.bin这样子,当我们运行file的时候就会发现,我们的文件格式一致了
┌──(ctfos㉿Hello-CTF)-[/mnt/c/Users/HelloCTF_OS/Desktop/tp/backup-TP-LINK-2018-01-01/backup-TP-LINK-2018-01-01]└─$ file new_backup-gzip.binnew_backup-gzip.bin: gzip compressed data, was "tmp.tar", last modified: Sat Nov 9 07:02:50 2024, max compression, from Unix, original size modulo 2^32 665600然后回到路由器中,执行备份的还原操作

获得root密码
此时我们再根据参考资料,找到/etc/init.d/dropbear,发现生成密码的方式
getNewPasswd(){ . /lib/functions.sh local macAddr="" macAddr=$(uci_get tddp macaddr macaddr) #echo "macAddr is $macAddr" > /dev/console
local key=$(echo -n "$macAddr" | md5sum) key=$(echo ${key:0:8}) #echo "key is $key" > /dev/console
echo ${key}}
setNewPasswd(){ local newPasswd=`getNewPasswd` #echo "newPasswd is $newPasswd" > /dev/console (echo "$newPasswd";sleep 1;echo "$newPasswd") | passwd > /dev/null}就是通过mac地址的md5运算后取前8位,所以就能够得到root密码了,我这里的root密码为b0b7e6e20
root账户登录
使用我们刚刚获得的密码就可以进行登录了

查看了一下架构
root@TP-LINK:~# uname -aLinux TP-LINK 3.3.8 #1 Thu Jan 17 14:11:22 CST 2019 mips GNU/Linux然而这个版本的openwrt已经停止支持了,这个路由器在openwrt官网也没有找到官方的固件,再结合TPLINK的习惯,我感觉我没法用这个东西来编译ua2f,不过目前还没有触发学校网的限制,先用着再说吧
小工具
经过我自己手上这台和各种不完全教程里面的dropbear,基本可以判定root的密码就是固定的算法,于是就写了一个计算root密码的小工具 => TP-LINK WAR308路由器root密码计算器