TrendNet路由器登录信息泄露漏洞(CVE-2018-7034)分析实战

1、固件下载

下载需要分析的漏洞固件  TEW751DR_FW103B03 注意版本是1.03B03

下载地址http://download.trendnet.com/TEW-751DR/firmware/

2、解压bin文件

使用binwalk解压,提取的squashfs-root文件若为空,继续使用firmware-mod-kit中的unsquashfs_all.sh命令继续解压

(PS:其中的压缩文件是我方便从虚拟机中提出web文件自己压缩的)

3、定位漏洞文件

分析路由器web端文件htdocs,存在漏洞的文件htdocs/web/getcfg.php

4、分析漏洞文件

分析此文件发现几个有趣的地方

  • 代码8行:使用POST提交方式
  • 代码14行:Authorized_group值需要>=0
  • 代码32-34行:访问的文件路径为 /htdocs/webinc/getcfg/[$Getcgf_svc].xml.php文件
  • 其中的参数$GETCFG_SVC 是啥?
  • 代码23-28行可以看到这个参数就是 $SERVICES传递进来的

根据以上简单分析得到一些关键点:

  1. 使用POST提交
  2. 参数AUTHORIZED_GROUP >= 0
  3. 拼接文件路径为 /htdocs/webinc/getcfg/[$SERVICES].xml.php

其中的1和2都比较好利用,但是3可以做什么呢?

分析htdocs文件结构,我们发现在指定的路径下存在一个比较特殊的文件 DEVICE.ACCOUNT.xml.php

根据文件内容,可以直接看到关于name password等比较敏感的信息

只需要将 $SERVICE = DEVICE.ACCOUNT就可以拼接访问到

5、分析二进制文件cgibin登录过程

将登录验证文件 htdocs/cgibin文件放到idapro中进行分析

找到其中一个函数phpcgi_main函数

然后在此函数中分析到几个有意思的代码如下

首先判断请求的类型 Head/Get/Post,分析得到造成验证漏洞的函数在htdoc/cgibin的 phpcgi_main函数,当cgibin_parse_request函数处理http请求的时候,sub_405AC0函数会获取AUTHORIZED_GROUP并存下来, 之后再调用sess_validate()作验证,因此可以非授权用户可以直接给AUTHORIZED_GROUP赋值来绕过验证

6、构造漏洞exp

根据以上分析结果我们可以构造exp对漏洞进行验证

Exp:   curl -d “SERVICES=DEVICE.ACCOUNT%0aAUTHORIZED_GROUP=1″ “http://[IP]/getcfg.php”

参数意义:

  • curl -d :使用POST提交参数
  • SERVICES=DEVICE.ACCOUNT:构造DEVICE.ACCOUNT.xml.php配置文件
  • %0a:URL编码,表示换行
  • AUTHORIZED_GROUP=1:参数需要 >= 0
  • http://[IP] :目标机器IP地址或域名
  • getcfg.php:漏洞触发的代码文件

7、漏洞验证

使用shodan查找此路由器设备的站点

使用curl访问站点,得到路由登录的用户名和密码

可以登录

可以查看到有哪些设备连接到此路由器中

参考资料

http://blog.topsec.com.cn/ad_lab/trendnet%E8%B7%AF%E7%94%B1%E5%99%A8%E6%9D%83%E9%99%90%E7%BB%95%E8%BF%87%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/

您可能还喜欢...