D-Link DIR-815 后门漏洞
0x01 漏洞介绍
在 DIR-815 路由器中,存在后门漏洞,攻击者可以通过该漏洞获取 Telnet 服务的账号和密码,然后通过获取的账号和密码可以任意登录该型号路由器的 TelNet 服务,进一步执行任意的系统命令。
0x02 漏洞分析
首先从D-Link官网下载1.02版本的 DIR-815路由器的固件,下载地址:http://legacyfiles.us.dlink.com/DIR-815/REVA/FIRMWARE/
然后使用 binwalk 工具提取固件文件系统。之后使用 firmwalker 工具收集文件系统的信息。
1 | ./firmwalker.sh ~/Desktop/firmware/_dir815_FW_102.bin.extracted/squashfs-root/ |
在 firmwalker 文件所在目录执行上述命令后,会在当前文件夹下生成 firmwalker.txt (也可以自己定义输出文件路径和文件名)。
打开 firmwalker.txt 文件,可以看到有很多 sh 脚本,其中重点关注 /etc/init0.d/S80telnetd.sh 文件。
查看该文件,可以看到 image_sign 中的数据在 telnetd 服务中用作 Alphanetworks 账户的密码,并启动了 telnetd 服务。
继续查看 /etc/config/image_sign 文件的内容,可以看到被用作 Alphanetworks 账户的密码:
1 | iot@attifyos ~/D/f/_/squashfs-root> cat etc/config/image_sign |
0x30 漏洞复现
这里使用FAT来模拟的话会出错,还不清楚原因。我们换一个工具,使用 FirmAE 来模拟 D-Link DIR-815 路由器的固件。
PS:AttifyOS 镜像上安装 FirmAE 运行会报错,也不清楚怎么回事,但是用 Ubuntu20.04 安装就可以模拟成功,所以这里换成Ubuntu环境来复现。唉,环境的问题真的是一言难尽!都是玄学!!!
在 FirmAE 工具目录下,执行如下命令:
1 | sudo ./run.sh -r dir815 ./firmwares/dir815_FW_102.bin |
执行完 run.sh 命令后,固件模拟就开始了。FirmAE会先自动分配一个虚拟网卡,并配置相关的 IP 地址(默认分配的是 192.168.0.1 ),然后开始模拟固件。这里需要等待一小段时间,大概6,7分钟的样子,有点小长,模拟成功后如下图所示:
固件模拟成功之后,先使用 Nmap 工具扫描目标地址的端口,确认是否开启了 Telnet 服务,如图:
可以看到,Telnet 服务的 23 端口已开启,这说明在固件模拟成功之后,默认开启了 Telnet 服务。
接下来使用前面获取到的账号 Alphanetworks 和 image_sign 文件读取到的密码来尝试登录 Telnet 服务:
从图中可以看到,我们利用获取到的后门账号和密码,成功地登录 Telnet 服务,并且可以直接执行系统命令。
补充: Telnet 服务相关知识(来自chatGPT)
Telnet 服务是一种网络协议和应用程序,它允许用户在计算机之间建立远程连接并在远程计算机上执行命令。Telnet 服务通常在服务器上运行,并通过监听默认端口(23)来接收来自客户端的连接请求。以下是一些关于 Telnet 服务的详细介绍:
- 协议和端口:Telnet 服务使用 Telnet 协议来进行通信,该协议是基于 TCP/IP 协议的。默认情况下,Telnet 服务监听端口号为 23,客户端可以通过连接该端口来建立与服务器的 Telnet 连接。
- 连接流程:Telnet 连接流程是基于文本的。当客户端连接到 Telnet 服务器时,服务器会显示欢迎消息并要求用户输入用户名和密码以进行身份验证。验证成功后,用户将获得 shell 提示符,可以在其中输入命令并在远程计算机上执行它们。
- 安全性:Telnet 服务的主要缺点是它是一种不安全的协议,因为所有的数据(包括用户密码)都是以明文形式传输的。由于安全问题,现在通常不建议使用 Telnet 服务,而是使用更加安全的 SSH(Secure Shell)协议。
- 使用场景:尽管 Telnet 协议现在不再是主要的远程登录协议,但仍然有一些使用场景,例如在局域网内,管理员可以使用 Telnet 连接到网络设备上执行命令。在一些特殊的环境下,由于历史原因或其他限制,也可能需要使用 Telnet 服务来提供远程访问功能。
总之,Telnet 服务是一种基于文本的远程登录协议,它使用 Telnet 协议来进行通信。Telnet 服务通常在服务器上运行,并监听默认端口(23)来接收来自客户端的连接请求。由于安全问题,现在不再建议使用 Telnet 服务,而是使用更加安全的 SSH 协议。