D-Link 645分析

2019-09-22  本文已影响0人  萍水间人

D-Link 850L&645路由漏洞分析

D-Link850和D-Link645都存在远程敏感信息读取漏洞

查看了文章中对于漏洞的分析

文章分析了getcfg.php位于/htdocs/web目录下
至于为什么对这个文件那么感兴趣,查略了一下cgi的意思,通用网关接口
就是运行在服务端的一个程序,能将从用户那里接受的数据进行处理,相当于web服务中的apache

存在漏洞的原因:


dophp函数具体的定义我也没找到,但是从这里猜测出应该是加载$file的意思
$file是由$GETCFG_SVC变量拼接的,继续往上看会发现这个变量的来源就是$_POST['SERVICES']也就是将用户通过post传来的servies的值直接拼接过来,这样就会导致任意文件读取。

还有一个关键点就是要绕过is_power_user()函数的判断
is_power_user()函数如下:

原文中提到$_GLOBALS变量并不是php中的那个$_GLOBALS数组,而是在cgibin文件中定义,这个很疑惑,原文中也没有仔细说

接下来分析cgibin这个文件,由于是MIPS而不是x86,所以IDA无法直接反编译,有两种解决办法,一是安装一个retdec-idaplugin插件,但是没有安装成功,后来又去找了jeb这个工具去反编译,但是也不是所有的函数都能反编译

如下是main函数反编译的结果

原文说关键在于phpcgi_main这个函数

但是我没有办法反编译成功

这里直接参考原文中的代码

可以看到这个函数是针对不同的请求方式做出不同的响应,典型的cgi文件的工作方式

猜测sobj_add_string函数是拼接字符串
同时sobj_add_char是拼接一个字符
10就是'\n'对应的ascii码
于是据此构造出payload

curl -d "SERVICES=DEVICE.ACCOUNT&attack=ture%0aAUTHORIZED_GROUP=1" "http://VictimIp:8080/getcfg.php"

SERVICES的值为我们想要读取的文件,这里我们选择DEVICE.ACCOUNT.xml.php文件
同时我们要让AUTHORIZED_GROUP为1

这里不理解为什么要添加一个attack参数

DIR-645的漏洞成因是类似的,

在虚拟机中测试了一下DIR-645,结果如下:


上一篇 下一篇

猜你喜欢

热点阅读