斐讯k2路由器固件漏洞分析

前几日我在我的微博及github上公开了斐讯K2_V22.3.15.128版本的远telnet开启方法,这篇文章主要记录了当时分析及挖掘漏洞过程。

0x01 反编译固件

通过使用binwalk反编译斐讯K2的最新固件如下:

打开桌面上已经解压出来的文件夹发现最新版的k2固件是基于openwrt做的。进入openwrt的web服务的核心目录:

这些文件就是路由器web接口可能会调用到的。

0x02查找漏洞

一般路由器越狱思路是挖到一个命令执行漏洞,然后开启telnetd或者sshd服务,而命令执行漏洞就是由于web接口没做好过滤,导致用户提交的参数进入到了程序调用执行命令的地方。例如很多路由器多有ping命令功能去检测网络,但是当程序没有对用户输入的ip地址进行过滤,导致用户可利用linux的管道符插入其他命令,比如用户输入如下命令,便会导致执行whomai、ls、telnetd命令。

所以当我想找到斐讯k2路由器命令执行漏洞时候,我首先会查找所有执行命令的接口,查看是否有参数可能被带入到执行的地方。

上面结果是我通过grep命令去查找带有exec的字符串,来达到查找路由器调用执行命令的接口。(还可grep其他关键字)

当我查看到backuprestore.lua这个文件时候发现了一段有意思的代码

这段代码大概意思是通过aes解密用户上传的config文件,然后分离前10行(包含版本号,硬件版本等信息),后面的通过tar解压,然后恢复到相应目录。

虽然该地方可能没有命令执行漏洞,但是可以利用其特点覆盖文件到指定目录。

0x03 漏洞利用

我利用路由器的备份功能,备份出来配置文件,然后按照上面代码的逻辑执行下面的命令,最后解压出其文件:

这些文件都是etc目录下的,而开启启动项也配置是在/etc/init.d/。我尝试在解压出来的etc目录下新建个init.d目录,然后把路由器里的一个启动项复制到这个目录,插入telnetd -l /bin/login.sh 命令。然后再按照刚才的过程反操作一遍把其打包成config.dat文件,上传到路由器。嗯哼,路由器重启之后尝试telnetd 192.168.2.1~~。成功进入telnet界面。

相关代码 https://github.com/the-404/phicomm_k2

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注