TL-R470GP-AC v4.0 开启SSH



不用折腾,真的不用折腾。上截图

端口隐藏了,我不确定 TP-Link 官方是否介意这个,所以只是给了个图上来。

我是把 1.1 的固件(1.1.0 Build 200831 Rel.44384n)翻了个遍,之前看到了改备份/配置文件的,再加上自己“经验”的开盒插 TTL,都没必要,固件里直接给了个功能。

系统工具 -》 诊断工具 -》 故障诊断 -》 开启诊断模式。

重启,找到合适的端口,不是 22,能看固件就看固件吧,代码里写死了。

用户名 root ,密码参考下边的代码,来自 /etc/init.d/dropbear 的最前边几行

macAddr 是设备标签上写的 MAC 地址,全大写,没有横线或者冒号。

对于 MAC 地址是 112233445566 的设备,root 密码就是 eb341820cd3a3485 。

给个链接 https://rst.im/hash/112233445566,参考 md5(half) 这行

另外,一些其他信息。

Telnet,telnet是开不了的,因为固件的 /etc/passwd 里放了一个默认密码,而 telnet 的启动脚本检测了,只有各种都是空的情况才能自动开启 telnet。假设条件成立,telnet 的密码也是空,参考 /etc/init.d/telnet 的 start()

串口,依旧没搞定。

opkg,自带配置无效,有空再去看哪个源可以用。

wireguard,等 opkg 搞了再看



You are not authorised to read all content in this post. Please login…

TL-R470GP-AC v4.0 开启SSH by @sskaje: https://sskaje.me/2020/10/tl-r470gp-ac-v4-0-ssh/

Incoming search terms:

TL-R470GP-AC v4.0 主板图



之前看到某论坛的历史记录,TL-R470GP-AC v1.0 跟当时的 gamer 上有人发的 MR100GP-AC 板子看上去一模一样,不愧是一家。

为了研究 TL-R470GP-AC 装 WireGuard,花260又买了一个新的,拆机。

然而,试了 J1 和 J4 的各种组合,都看不到串口数据。



TL-R470GP-AC v4.0 主板图 by @sskaje: https://sskaje.me/2020/10/tl-r470gp-ac-v4-0-%e4%b8%bb%e6%9d%bf%e5%9b%be/

TL-R470GP-AC 解密备份文件



TL-R470GP-AC 是 TP-Link 的一款基础的路由+PoE交换+AC的3合一设备。图省事和便宜给老家换了这套方案,配上3个 ax 的AP。但是这款设备没有看到第三方固件。

想研究开启SSH,所以先从改配置文件入手,但是配置文件是加密的,于是第一步回到定位加密算法或者直接解密/加密配置文件。所有试验均在ubuntu 18.04 下完成。

1 官网下载固件,binwalk -e 看固件,研究web 的 cgi 程序,可以定位到配置文件解密程序的可执行文件

2 file 看一下程序,mipsel

3 ubuntu 下安装qemu

4 准备执行环境,在 squash-root 里执行

5 复制备份文件文件到 squash-root 里,执行解密命令

目前还没看到怎么开 SSH,能搞定的话,再去搞定 wireguard 就完美了。至于加密,有现成的工具可用。

接下来分析配置文件吧,全靠猜。

先看看tar包的内容



You are not authorised to read all content in this post. Please login…

TL-R470GP-AC 解密备份文件 by @sskaje: https://sskaje.me/2020/09/tl-r470gp-ac-backup-file-decrypt/

JavaScript DNS-SD



用了 npm 包 multicast-dns https://www.npmjs.com/package/multicast-dns 。其他几个包也试过了,各种残废,要不想太多要不瞎搞,还是这个单纯。

核心的环节是,正确地响应 “_services._dns-sd._udp.local” 的query。

响应的包 answers 放 PTR,additional records 放 SRV、TXT、A。TXT可以放多个 key=value,来处理自定义配置,例如端口、是否加密,认证等信息。

Gist: https://gist.github.com/sskaje/974ec85b39f51dd3a4c6734c2bfb214f



JavaScript DNS-SD by @sskaje: https://sskaje.me/2020/05/javascript-dns-sd/

WireGuard as a “Switch”



Not really a switch, but similar. If you want to exchange data from two network using a host on Internet, this post helps.

In this case, Router 1 want to use Router 2 as gateway for some destinations. All 3 Nodes here have Internet public IP address.

I set-up a network, 192.168.20.0/24, using WireGuard. Our work are all on the Server in the middle.

If I put such config to /etc/wireguard/wg0.conf and run wg-quick up wg0, then I may lost connection to the server, because of the default route.

Now, add a route table to your system and change wg0.conf, let’s name it wgswitch and table id 201.

Then modify wg0.conf.

Now when you establish connections, you’ll be able to ping from router1 to router2 using 192.168.20.0/24 network.

But if you want to try a custom network, that’s not enough, you need extra route and ip rule for your network



WireGuard as a “Switch” by @sskaje: https://sskaje.me/2019/11/wireguard-as-a-switch/

Incoming search terms: