测试环境:Ubuntu 18.04
固件版本:V15.03.06.51_multi
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]也就是说这是一个在登录状态下才会启动成功,我们直接浏览器访问
返回状态没有报错,使用工具nmap扫描一下端口,可以看到telnet端口已经开启
直接登录telnet,通过百度查询可知账号root密码Fireitup
尝试写一个txt文件验证一下
发现这是一个只读文件系统,最后发现webroot目录是具有写入权限的但是重启之后会被重置
我们可以使用tar命令将整个文件系统进行打包带webroot目录下面,在通过授权的访问下载出来整个文件系统
0x03.CVE-2020-28095
根据wireless_ssid.js可以看到提交的数据接口为goform/WifiBasicSet
根据IDA的函数名进行搜索WifiBasicSet,可以看到获取传递的值,默认的值为12345678
当wrlPwd的长度超过一定范围时,触发溢出漏洞,从而导致设备进入DOS状态。经测试可知,一旦设备进入到DOS状态只有重置路由器才可以恢复到正常使用状态。