前言
测试环境:Ubuntu 18.04
固件版本:V15.03.06.51_multi
固件下载地址:https://www.tendacn.com/en/download/detail-3801.html
厂商地址:https://www.tendacn.com/
0x01
首先我们将官网上面的固件下载到本地使用binwalk对固件进行解包
binwalk -Me US_AC6V2.0RTL_V15.03.06.51_multi_TDE01.bin
看来固件没有加密,成功拿到文件系统
接下来我们对固件升级包解压后的文件进行分析,通过对其前端的登录页面可以发现,路由器使用的登录方式是POST请求传参,密码使用的MD5加密
对系统服务httpd文件分析,可以得知该路由器没有对登录进行次数限制,换句话说已知用户名admin未知密码,我们就可以使用密码爆破的手法进行登录
身份验证则采用的是cookie方式,换句话说cookie等于密码的MD5+随机8位字符串
路由器的管理员密码我设置的是12345678,验证其cookie的值是否是MD5+随机8位字符串
0x02 CVE-2020-28093
我们在进行login逻辑分析的时候,看到一行这样的代码
可以看出如果请求的url不是/goform/telnet或者/goform/ate,那么就会return 0。他没有写else也就是说当url是/goform/telnet的时候就会触发开启telnet,后面还加了g_Pass[0]也就是说这是一个在登录状态下才会启动成功,我们直接浏览器访问,为了更直观的测试,这里使用了burp进行发包
可以看到请求发送成功,使用工具nmap扫描一下端口,可以看到telnet端口已经开启
直接登录telnet,通过公开信息可知账号root密码Fireitup
尝试写一个txt文件验证一下
发现这是一个只读文件系统,最后发现webroot目录是具有写入权限的但是重启之后会被重置
我们可以使用tar命令将整个文件系统进行打包到webroot目录下面,通过授权之后的访问文件地址,下载出来整个文件系统
0x03 CVE-2020-28095
根据wireless_ssid.js可以看到提交的数据接口为goform/WifiBasicSet
根据IDA的函数名进行搜索WifiBasicSet,可以看到获取传递的值,默认的值为12345678
当wrlPwd的长度超出一定范围时,触发溢出漏洞,从而导致设备进入DOS状态。经测试可知,一旦设备进入到DOS状态只有重置路由器才可以恢复到正常使用状态。
验证效果视频:
原文始发于微信公众号(IOTsec Zone):腾达AC1200(型号AC6)智能双频WiFi路由器漏洞复现及分析