通过TP-LINK WAR308备份文件提取漏洞获得路由器root权限
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
添加用户
备份文件的目录结构大概是这样的
1 | backup.bin |
而我们直接打开etc文件夹的passwd
和shadow
,加入我们的用户信息
tmp/userconfig/etc/passwd
1 | root:x:0:0:root:/root:/bin/ash |
tmp/userconfig/etc/shadow
1 | root:$1$THIS_IS_A_FAKE_PASSWD:16800:0:99999:7::: |
我把user的密码设置为了123456
,接着我们还要打开ssh。根据参考文献,我们可以在etc/config/dropbear
文件打开它
这个密码值是通过计算得到的:openssl passwd -1 123456
tmp/userconfig/etc/config/dropbear
1 | config dropbear |
把那个ssh_port_switch
改成on
就能够打开了
打包配置文件
通过file
命令,我们可以看到这个文件的压缩方式
1 | ┌──(ctfos㉿Hello-CTF)-[/mnt/c/Users/HelloCTF_OS/Desktop/tp/backup-TP-LINK-2018-01-01] |
所以我们要用同样的压缩方式压缩回去,要不然会提示配置文件格式错误(别问我怎么知道的,因为我就那么干了)
我们逐步运行下面的命令
1 | tar -cvf tmp.tar tmp |
这样子,当我们运行file
的时候就会发现,我们的文件格式一致了
1 | ┌──(ctfos㉿Hello-CTF)-[/mnt/c/Users/HelloCTF_OS/Desktop/tp/backup-TP-LINK-2018-01-01/backup-TP-LINK-2018-01-01] |
然后回到路由器中,执行备份的还原操作
获得root密码
此时我们再根据参考资料,找到/etc/init.d/dropbear
,发现生成密码的方式
1 | getNewPasswd() |
就是通过mac地址的md5运算后取前8位,所以就能够得到root密码了,我这里的root密码为b0b7e6e20
root账户登录
使用我们刚刚获得的密码就可以进行登录了
查看了一下架构
1 | root@TP-LINK:~# uname -a |
然而这个版本的openwrt已经停止支持了,这个路由器在openwrt官网也没有找到官方的固件,再结合TPLINK的习惯,我感觉我没法用这个东西来编译ua2f,不过目前还没有触发学校网的限制,先用着再说吧
小工具
经过我自己手上这台和各种不完全教程里面的dropbear,基本可以判定root的密码就是固定的算法,于是就写了一个计算root密码的小工具 => TP-LINK WAR308路由器root密码计算器