d-link路由器设置-我是如何反编译D-Link路由器固件程序并发现其后门

  • A+
所属分类:路由器限速

D-Link路由器怎么设置

一共需要三个步骤:1、设备连接。2、ip地址设置。3、上网帐号及其它参数设置。设备连接:D-Link路由上一共有5个网线接口,4个是LAN接口,还有一个WAN/Internet接口。另外还要注意路由器怎么设置密码的问题。

第一步:设备连接

D-Link路由上一共有5个网线接口,4个是LAN接口,用来连接电脑的,4个LAN接口的任意一个都可以。还有一个WAN/Internet接口,用来连接modem或者小区宽带的接口。

PS:注意一定要把连接电脑的那根网线插在LAN接口上面,否则无法打开192.168.0.1登陆页面,很多用户在这一步出错。

第二步:IP地址设置

必须要把电脑的ip地址配置在192.168.0.2-192.168.0.254这个范围内的一个地址,否则无法正常配置192.168.0.1路由器。不同的电脑系统在操作上略有不同,下面将分别介绍XP、Win 7和Win 8系统下ip地址的设置方法。

第三步:Windows XP电脑ip地址设置

步骤1、鼠标右击“网上邻居”–>选择“属性”打开“本地连接”。

步骤2、鼠标右击“本地连接”–>选择“属性”。

步骤3、点击“Internet协议(TCP/IP)”–>点击“属性”。

步骤4、选择“自动获得ip地址”和“自动获得DNS服务器地址”–>点击“确定”。

第三步:Windows 7电脑ip地址设置

步骤1、右击桌面或者开始程序中的“网络”–>选择“属性”–>点击“更改适配器设置”打开“本地连接”。

步骤2、点击“更改适配器设置”。

步骤3、鼠标右击“本地连接”–>选择“属性”。

步骤4、选择“Internet协议版本4(TCP/IPv4)”–>点击“属性”。

步骤5、选择“自动获得ip地址”和“自动获得DNS服务器地址”–>点击“确定”。

第三步:Windows 8电脑ip地址设置

步骤1、同时安装键盘上面的Windows(键盘左下角ctrl和alt中间那个键)+R两个按键,打开运行程序界面,–>输入“ncpa.cpl”–>点击“确定”,打开“以太网”配置界面。

步骤2、鼠标右击“以太网”–>选择“属性”—>选择“Internet协议版本4(TCP/IPv4)”–>点击“属性”(或者双击“Internet协议版本4(TCP/IPv4)”)。

步骤3、勾选”自动获得ip地址”和“自动获得DNS服务器地址”选项–>点击”确定”。

第四步:上网帐号及其它参数设置

步骤1、在浏览器里棉输入192.168.0.1,然后按下回车键,打开192.168.0.1的登陆页面。

步骤2、输入默认的管理帐号:admin,密码:admin(或者是空密码)。

步骤3、点击左侧的“设置向导”。

步骤4、点击“下一步”进行步骤1的设置 。

步骤5、先输入一次“旧密码”—>“新密码”—>“确认新密码”—>“下一步”。

步骤6、“选择时区”,一般选择北京时间—>“下一步”。

步骤7、选择“pppoe”—>“下一步”。

步骤8、输入宽带运营商提供给你的上网帐号和密码,然后点击“下一步”。

步骤9、设置无线Wi-Fi:填写“无线网络ID”(也就是wi-fi的名称)—>“WEP安全方式”建议选择WPA或者WPA2—>填写“密码”(wi-fi连接的验证密码)—>点击“下一步”。

步骤10、点击“重新激活”是刚才的设置生效。

通过以上详细步骤,就可以解决192.168.0.1路由器怎么设置这个问题,关于设置中的各种问题,文中已经详细给出,请网友仔细阅读进行设置。另外还要注意密码的设置。关于路由器的设置其他相关问题,小编在相关阅读中推荐阅读,希望给大家提供帮助。


我是如何反编译D-Link路由器固件程序并发现其后门

来自:外刊IT评论

链接:http://www.aqee.net/reverse-engineering-a-d-link-backdoor/

原文:http://www.devttys0.com/2013/10/reverse-engineering-a-d-link-backdoor/

上周末晚上,没有约会,只有一大瓶Shasta汽水和全是快节奏的音乐…那就研究一下程序吧。

一时兴起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件程序 v1.13。使用工具Binwalk,很快的就从中发现并提取出一个只读SquashFS文件系统,没用多大功夫我就将这个固件程序的web server(/bin/webs)加载到了IDA中:

基于上面的字符信息可以看出,这个/bin/webs二进制程序是一个修改版的thttpd,提供路由器管理员界面操作功能。看起来是经过了台湾明泰科技(D-Link的一个子公司)的修改。他们甚至很有心计的将他们很多自定义的函数名都辅以“alpha”前缀:

这个alpha_auth_check函数看起来很有意思!

这个函数被很多地方调用,最明显的一个是来自alpha_httpd_parse_request函数:

我们可以看到alpha_auth_check函数接收一个参数(是存放在寄存器$s2里);如果alpha_auth_check返回-1(0xFFFFFFFF),程序将会跳到alpha_httpd_parse_request的结尾处,否则,它将继续处理请求。

寄存器$s2在被alpha_auth_check函数使用前的一些操作代码显示,它是一个指向一个数据结构体的指针,里面有一个char*指针,会指向从HTTP请求里接收到的各种数据;比如HTTP头信息和请求地址URL:

我们现在可以模拟出alpha_auth_check函数和数据结构体的大概样子:

struct http_request_t

{

char unknown[0xB8];

char *url; // At offset 0xB8 into the data structure

};

int alpha_auth_check(struct http_request_t *request);

alpha_auth_check本身是一个非常简单的函数。它会针对http_request_t结构体里的一些指针进行字符串strcmp比较操作,然后调用check_login函数,实际上就是身份验证检查。如果一旦有字符串比较成功或check_login成功,它会返回1;否者,它会重定向浏览器到登录页,返回-1;

这些字符串比较过程看起来非常有趣。它们提取请求的URL地址(在http_request_t数据结构体的偏移量0xB8处),检查它们是否含有字符串“graphic/” 或 “public/”。这些都是位于路由器的Web目录下的公开子目录,如果请求地址包含这样的字符串,这些请求就可以不经身份认证就能执行。

然而,这最后一个strcmp却是相当的吸引眼球:

这个操作是将http_request_t结构体中偏移量0xD0的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”比较,如果字符匹配,就会跳过check_login函数,alpha_auth_check操作返回1(认证通过)。

我在谷歌上搜索了一下“xmlset_roodkcableoj28840ybtide”字符串,只发现在一个俄罗斯论坛里提到过它,说这是一个在/bin/webs里一个“非常有趣”的一行。我非常同意。

那么,这个神秘的字符串究竟是和什么东西进行比较?如果回顾一下调用路径,我们会发现http_request_t结构体被传进了好几个函数:

事实证明,http_request_t结构体中处在偏移量 0xD0处的指针是由httpd_parse_request函数赋值的:

这代码实际上就是:

if(strstr(header, "User-Agent:") != NULL)

{

http_request_t->0xD0 = header + strlen("User-Agent:") + strspn(header, " \t");

}

知道了http_request_t偏移量0xD0处的指针指向User-Agent头信息,我们可以推测出alpha_auth_check函数的结构:

#define AUTH_OK 1

#define AUTH_FAIL -1

int alpha_auth_check(struct http_request_t *request)

{

if(strstr(request->url, "graphic/") ||

strstr(request->url, "public/") ||

strcmp(request->user_agent, "xmlset_roodkcableoj28840ybtide") == 0)

{

return AUTH_OK;

}

else

{

// These arguments are probably user/pass or session info

if(check_login(request->0xC, request->0xE0) != 0)

{

return AUTH_OK;

}

}

return AUTH_FAIL;

}

换句话说,如果浏览器的User-Agent值是“xmlset_roodkcableoj28840ybtide”(不带引号),你就可以不经任何认证而能访问web控制界面,能够查看/修改路由器的设置(下面是D-Link路由器(DI-524UP)的截图,我没有 DIR-100型号的,但DI-524UP型号使用的是相同的固件):

基于HTML页上的源代码信息和Shodan搜索结果,差不多可以得出这样的结论:下面的这些型号的D-Link路由器将会受到影响:

DIR-100

DI-524

DI-524UP

DI-604S

DI-604UP

DI-604+

TM-G5240

除此之外,几款Planex路由器显然也是用的同样的固件程序:

BRL-04UR

BRL-04CW

你很酷呀,D-Link。

脚注:万能的网友指出,字符串“xmlset_roodkcableoj28840ybtide”是一个倒序文,反过来读就是“editby04882joelbackdoor_teslmx”——edit by 04882joel backdoor _teslmx,这个后门的作者真是位天才!

题图来自 Caleb Garling

●本文编号35,以后想阅读这篇文章直接输入35即可。

●输入m可以获取到全部文章目录


D-Link路由器被曝重大漏洞:小心网银密码

D-Link路由器被曝重大漏洞:小心网银密码

近日,国内安全专家发现友讯集团(D-Link)新产品“云路由”使用的固件系统中存在漏洞,黑客可轻易攻破路由器后台,获取用户网银密码等隐私。漏洞涉及17个型号,预计全球受影响用户高达300万。

目前,友讯集团已在其英文官网上公布存在漏洞的路由器型号,并发布了四个版本路由器的补丁,但该公告尚无中文版本。

最快1分钟攻破路由器后台

2月中旬,国内网络安全专家发现多款D-Link路由器存在漏洞,并第一时间提交给厂商。目前,厂家确认该漏洞确实存在。

前日,安全专家刘健皓现场向记者展示了对存在漏洞的D-Link路由器的攻防试验。

刘健皓随机选择一台打开了路由器web远程管理功能的路由器,随后开始编辑指令对该路由器实行定向攻击,通过不断修改指令,他很快进入了这台路由器的后台。记者计时发现,用时不到5分钟。此后,经过对路由器后台文件的不断搜索,不到30分钟,刘健皓成功破解了该路由器的密码。

登录路由器,在控制面板上,记者很清楚地看到连接到该路由器的包括APPALETV、IPHONE以及XBOX等设备在内的12台电器。

“如果在后台安装了针对性的黑客软件,我们可以轻易地劫持这些连接到路由器的电器的流量,从而分析出银行账号密码等隐私。”刘健皓同时称,黑客在攻破一台路由器后,再攻击有同类漏洞的路由器将变得更为简单。

随后,刘健皓再次演试。这一次,他现场修改了三个指令,在Enter键入的同时,便成功攻入了身旁的一台DIR-817LW,修改另一条指令后,他又成功拿到了这台路由器的密码,从攻入后台到拿到密码整个耗时不足一分钟。

可获取用户网银账号密码

刘健皓介绍,此次受影响的路由器系列为D-Link新推出的产品云路由,与传统路由器相比,云路由相当于一个小型的家庭控制中心。此次漏洞,黑客只需要向路由器提交几个“指令”便可以拿到路由器权限,获取权限后,除了可以借此推送广告、获取推广佣金、劫持正常网站到钓鱼挂马网站外,还可以通过获取用户的上网流量,解析出用户的所有上网信息,获取用户的宽带账号密码,网银、支付宝等账号密码。

4月10日,友讯集团曾在其英文官网发布了英文版本安全公告,详细公布了存在漏洞的17款路由器型号及固件版本,目前,官方已经发布了DIR-890L、DIR-880L、DIR-868L、DIR-860L四个型号路由器的补丁。

专家建议 及时升级路由器固件

针对路由器安全漏洞,网络安全专家刘健皓建议:

1、安装时应修改路由器初始化(出厂)默认口令。

2、设置一定强度的无线密码,守好黑客攻击的第一道门。

3、在路由器的使用过程中,注意观察网速是否经常无故变慢、留意是否有广告弹窗页面,若出现异常,可初始化路由器(恢复出厂设置)。

4、使用第三方安全测评软件,定期对路由器的安全状况进行扫描,发现异常则初始化路由器,重新设置。

5、对于云路由设备,在打漏洞补丁之前,最好关闭路由器远程IP访问,减少后台被攻击的风险。

6、多查看路由器版本是否出现更新,关注厂家关于路由器补丁的更新及漏洞修复。

17个存漏洞“云路由”型号

●DAP-1522(B1)

●DIR-629(A1)

●DIR-300(B1)

●DIR-600(B1)

●DIR-815(B1)

●DIR-816L(A1)

●DIR-817LW(B1)

●DIR-818LW(A1)

●DIR-820LW(B1)

●DIR-850L(A1)

●DIR-850L(B1)

●DIR-860L(A1)

●DIR-860L(B1)

●DIR-865L(A1)

●DIR-868L(A1)

●DIR-880L(A1)

●DIR-890L(A1)

再也不怕设置D-LINK路由器了

第一步:设备连接

D-Link路由上一共有5个网线接口,4个是LAN接口,用来连接电脑的,4个LAN接口的任意一个都可以。还有一个WAN/Internet接口,用来连接modem或者小区宽带的接口。

PS:注意一定要把连接电脑的那根网线插在LAN接口上面,否则无法打开192.168.0.1登陆页面,很多用户在这一步出错。

第二步:IP地址设置

必须要把电脑的ip地址配置在192.168.0.2-192.168.0.254这个范围内的一个地址,否则无法正常配置192.168.0.1路由器。不同的电脑系统在操作上略有不同,下面将分别介绍XP、Win 7和Win 8系统下ip地址的设置方法。

第三步:Windows XP电脑ip地址设置

步骤1、鼠标右击“网上邻居”–>选择“属性”打开“本地连接”。

步骤2、鼠标右击“本地连接”–>选择“属性”。

步骤3、点击“Internet协议(TCP/IP)”–>点击“属性”。

步骤4、选择“自动获得ip地址”和“自动获得DNS服务器地址”–>点击“确定”。

第三步:Windows 7电脑ip地址设置

步骤1、右击桌面或者开始程序中的“网络”–>选择“属性”–>点击“更改适配器设置”打开“本地连接”。

步骤2、点击“更改适配器设置”。

步骤3、鼠标右击“本地连接”–>选择“属性”。

步骤4、选择“Internet协议版本4(TCP/IPv4)”–>点击“属性”。

步骤5、选择“自动获得ip地址”和“自动获得DNS服务器地址”–>点击“确定”。

第三步:Windows 8电脑ip地址设置

步骤1、同时安装键盘上面的Windows(键盘左下角ctrl和alt中间那个键)+R两个按键,打开运行程序界面,–>输入“ncpa.cpl”–>点击“确定”,打开“以太网”配置界面。

步骤2、鼠标右击“以太网”–>选择“属性”—>选择“Internet协议版本4(TCP/IPv4)”–>点击“属性”(或者双击“Internet协议版本4(TCP/IPv4)”)。

步骤3、勾选”自动获得ip地址”和“自动获得DNS服务器地址”选项–>点击”确定”。

第四步:上网帐号及其它参数设置

步骤1、在浏览器里棉输入192.168.0.1,然后按下回车键,打开192.168.0.1的登陆页面。

步骤2、输入默认的管理帐号:admin,密码:admin(或者是空密码)。

步骤3、点击左侧的“设置向导”。

步骤4、点击“下一步”进行步骤1的设置 。

步骤5、先输入一次“旧密码”—>“新密码”—>“确认新密码”—>“下一步”。

步骤6、“选择时区”,一般选择北京时间—>“下一步”。

步骤7、选择“pppoe”—>“下一步”。

步骤8、输入宽带运营商提供给你的上网帐号和密码,然后点击“下一步”。

步骤9、设置无线Wi-Fi:填写“无线网络ID”(也就是wi-fi的名称)—>“WEP安全方式”建议选择WPA或者WPA2—>填写“密码”(wi-fi连接的验证密码)—>点击“下一步”。

步骤10、点击“重新激活”是刚才的设置生效。


D-LINK路由器仅需88.88

活动价格:88.88元

活动地址:颐高电子城3102 金磐石网络

抢购电话:13831166061


D-link路由器设置

登录到路由器的管理界面。

打开浏览器,在此以IE为例,在地址栏中输入:http://192.168.0.1,即可登录到路由器的管理界面,对路由器进行各项配置,如下图所示:

再次,设置WAN口,即Internet口的设置。

此步骤主要是设置用户当前的上网类型,一般分为PPPoE、动态IP、静态IP、PPTP、L2TP等。家庭用户大多数使用的是ADSL或者是小区宽带对应的是PPPoE。因为我是在公司里做的实验,我们公司使用的是静态IP方式上网。用户在此不用过多担心自己使用的到底是哪种上网方式,因为智能的路由器会自动侦测用户的上网类型,如下图所示:

稍等片刻之后,就可以看到如下所示:

在这个图中,可以看到路由器已经成功侦测出我当前的上网类型是静态IP,已经成功连接到internet。

如果是家庭ADSL或小区宽带用户,这里会弹出PPPoE的设置界面,如下图所示:

注意:如果用户不慎丢失了用户名和密码,则可以咨询宽带接入商。

如果用户不希望路由器自动侦测上网类型,也可以进行手动设置,如下图所示:

点击“手动设置”后,会出现下面的界面,用户也可以根据实现上网类型进行设置。

不要忘了“保存设置”。

点击“立即重新启动”,使用设置生效。


D-Link路由器现DNS劫持漏洞其他设备或受影响

D-Link一款DSL路由器日前发现DNS劫持漏洞,此漏洞可使黑客远程修改DNS设置并劫持用户通信数据。安全研究员表示,因为多家生产商都使用有此漏洞的固件,其影响可能波及其他网络设备。

一份针对D-Link DSL-2740R型双功能ADSL无线路由器的概念验证性漏洞利用报告在周二被公开,D-Link和其他生产商的更多设备都有可能受影响。

这一漏洞实际上位于ZyXEL(合勤)通信公司研发的路由器固件ZynOS中,包括D-Link、普联技术和中兴在内的多家网络设备生产商都将ZynOS应用在了旗下的各种产品中。

攻击者不需要访问凭证即可在受影响的设备上利用此漏洞,不过,设备的网页管理接口倒是确实需要能访问到。

若是管理接口暴露在互联网上——路由器有时为了能够远程管理会配置成这样——漏洞被利用的风险也就更高。但是即使只能从本地局域网进行管理,黑客仍旧可以使用跨站请求伪造(CSRF)技术来访问路由器的管理接口。

CSRF是通过劫持用户的浏览器,当用户访问被黑站点或点击恶意链接时,进行非授权操作。从网站下载的恶意代码可以操纵浏览器向路由器常用的局域网IP发送特意构造的HTTP请求。

互联网上就曾经发现过针对路由器拥有者的大规模CSRF攻击,攻击者意图用自己的服务器顶替路由器上配置的DNS服务器。

DNS服务器在网络中是不可或缺的角色,他们将人类容易理解的网站名称翻译成计算机间相互交流的数字IP地址。如果路由器使用了恶意DNS服务器,由这台路由器伺服的计算机想访问合法网站的时候,攻击者就能将其引导到恶意服务器上。

2014年3月,互联网安全研究组织Team Cymru曝光了一起全球性攻击事件,多达30万台家用路由器受害,DNS设置被篡改。那次攻击事件中,攻击者就是利用了ZynOS的另一个漏洞,所用技术之一也很可能是CSRF。

Donev并没有向D-Link报告漏洞的存在,而据他所知,此漏洞目前还是一个零日漏洞(已公开但未打补丁的漏洞)。

截止发稿,D-Link官方尚未对漏洞信息做出回应。

---

要闻、干货、原创、专业

关注“信息安全知识”

我们是安全牛!


D-Link路由器后门被发现!

原文出处:devttys0

译文出处:外刊IT评论

译文链接:http://www.vaikan.com/reverse-engineering-a-d-link-backdoor/

转自:Linux爱好者(ID:LinuxHub)

原题:我是如何反编译D-Link路由器固件程序并发现其后门

OK,又是周末晚上,没有约会,只有一大瓶Shasta汽水和全是快节奏的音乐…那就研究一下程序吧。

一时兴起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件程序 v1.13。使用工具Binwalk,很快的就从中发现并提取出一个只读SquashFS文件系统,没用多大功夫我就将这个固件程序的web server(/bin/webs)加载到了IDA中:

基于上面的字符信息可以看出,这个/bin/webs二进制程序是一个修改版的thttpd,提供路由器管理员界面操作功能。看起来是经过了台湾明泰科技(D-Link的一个子公司)的修改。他们甚至很有心计的将他们很多自定义的函数名都辅以“alpha”前缀:

这个alpha_auth_check函数看起来很有意思!

这个函数被很多地方调用,最明显的一个是来自alpha_httpd_parse_request函数:

我们可以看到alpha_auth_check函数接收一个参数(是存放在寄存器$s2里);如果alpha_auth_check返回-1(0xFFFFFFFF),程序将会跳到alpha_httpd_parse_request的结尾处,否则,它将继续处理请求。

寄存器$s2在被alpha_auth_check函数使用前的一些操作代码显示,它是一个指向一个数据结构体的指针,里面有一个char*指针,会指向从HTTP请求里接收到的各种数据;比如HTTP头信息和请求地址URL:

我们现在可以模拟出alpha_auth_check函数和数据结构体的大概样子:

struct http_request_t

{

char unknown[0xB8];

char *url; // At offset 0xB8 into the data structure

};

int alpha_auth_check(struct http_request_t *request);

alpha_auth_check本身是一个非常简单的函数。它会针对http_request_t结构体里的一些指针进行字符串strcmp比较操作,然后调用check_login函数,实际上就是身份验证检查。如果一旦有字符串比较成功或check_login成功,它会返回1;否者,它会重定向浏览器到登录页,返回-1;

这些字符串比较过程看起来非常有趣。它们提取请求的URL地址(在http_request_t数据结构体的偏移量0xB8处),检查它们是否含有字符串“graphic/” 或 “public/”。这些都是位于路由器的Web目录下的公开子目录,如果请求地址包含这样的字符串,这些请求就可以不经身份认证就能执行。

然而,这最后一个strcmp却是相当的吸引眼球:

这个操作是将http_request_t结构体中偏移量0xD0的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”比较,如果字符匹配,就会跳过check_login函数,alpha_auth_check操作返回1(认证通过)。

我在谷歌上搜索了一下“xmlset_roodkcableoj28840ybtide”字符串,只发现在一个俄罗斯论坛里提到过它,说这是一个在/bin/webs里一个“非常有趣”的一行。我非常同意。

那么,这个神秘的字符串究竟是和什么东西进行比较?如果回顾一下调用路径,我们会发现http_request_t结构体被传进了好几个函数:

事实证明,http_request_t结构体中处在偏移量 0xD0处的指针是由httpd_parse_request函数赋值的:

这代码实际上就是:

if(strstr(header, "User-Agent:") != NULL)

{

http_request_t->0xD0 = header + strlen("User-Agent:") + strspn(header, " \t");

}

知道了http_request_t偏移量0xD0处的指针指向User-Agent头信息,我们可以推测出alpha_auth_check函数的结构:

#define AUTH_OK 1

#define AUTH_FAIL -1

int alpha_auth_check(struct http_request_t *request)

{

if(strstr(request->url, "graphic/") ||

strstr(request->url, "public/") ||

strcmp(request->user_agent, "xmlset_roodkcableoj28840ybtide") == 0)

{

return AUTH_OK;

}

else

{

// These arguments are probably user/pass or session info

if(check_login(request->0xC, request->0xE0) != 0)

{

return AUTH_OK;

}

}

return AUTH_FAIL;

}

换句话说,如果浏览器的User-Agent值是“xmlset_roodkcableoj28840ybtide”(不带引号),你就可以不经任何认证而能访问web控制界面,能够查看/修改路由器的设置(下面是D-Link路由器(DI-524UP)的截图,我没有 DIR-100型号的,但DI-524UP型号使用的是相同的固件):

基于HTML页上的源代码信息和Shodan搜索结果,差不多可以得出这样的结论:下面的这些型号的D-Link路由器将会受到影响:

DIR-100

DI-524

DI-524UP

DI-604S

DI-604UP

DI-604+

TM-G5240

除此之外,几款Planex路由器显然也是用的同样的固件程序:

BRL-04UR

BRL-04CW

你很酷呀,D-Link!

扩展阅读:

1、D-LINK路由器后门漏洞测试方法

http://blog.csdn.net/myths_0/article/details/20207991

2、说说无线路由器后门的那些事儿(1)-D-Link篇

http://www.2cto.com/Article/201311/260640.html

3、D-Link路由器被曝留后门

http://news.mydrivers.com/1/278/278706.htm

4、磁铁真会使手机或硬盘挂掉吗

http://mp.weixin.qq.com/s?__biz=MzA4OTM1MzkwNg==&mid=206584027&idx=1&sn=756624daf9653c4e1c6e78fd27ec1aa1#rd

免责声明:

1、凡注明来源的作品,均转载自其它媒体,目的在于公益性分享。若作者或版权人不愿被分享或侵权,请及时指出,经核实后删除。

2、部分图片来源于互联网,版权归属原作者。

我是如何反编译D-Link路由器固件程序并发现其后门

(点击上方蓝字,可快速关注我们)

OK,又是周末晚上,没有约会,只有一大瓶Shasta汽水和全是快节奏的音乐…那就研究一下程序吧。

一时兴起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件程序 v1.13。使用工具Binwalk,很快的就从中发现并提取出一个只读SquashFS文件系统,没用多大功夫我就将这个固件程序的web server(/bin/webs)加载到了IDA中:

基于上面的字符信息可以看出,这个/bin/webs二进制程序是一个修改版的thttpd,提供路由器管理员界面操作功能。看起来是经过了台湾明泰科技(D-Link的一个子公司)的修改。他们甚至很有心计的将他们很多自定义的函数名都辅以“alpha”前缀:

这个alpha_auth_check函数看起来很有意思!

这个函数被很多地方调用,最明显的一个是来自alpha_httpd_parse_request函数:

我们可以看到alpha_auth_check函数接收一个参数(是存放在寄存器$s2里);如果alpha_auth_check返回-1(0xFFFFFFFF),程序将会跳到alpha_httpd_parse_request的结尾处,否则,它将继续处理请求。

寄存器$s2在被alpha_auth_check函数使用前的一些操作代码显示,它是一个指向一个数据结构体的指针,里面有一个char*指针,会指向从HTTP请求里接收到的各种数据;比如HTTP头信息和请求地址URL:

我们现在可以模拟出alpha_auth_check函数和数据结构体的大概样子:

struct http_request_t

{

char unknown[0xB8];

char *url; // At offset 0xB8 into the data structure

};

int alpha_auth_check(struct http_request_t *request);

alpha_auth_check本身是一个非常简单的函数。它会针对http_request_t结构体里的一些指针进行字符串strcmp比较操作,然后调用check_login函数,实际上就是身份验证检查。如果一旦有字符串比较成功或check_login成功,它会返回1;否者,它会重定向浏览器到登录页,返回-1;

这些字符串比较过程看起来非常有趣。它们提取请求的URL地址(在http_request_t数据结构体的偏移量0xB8处),检查它们是否含有字符串“graphic/” 或 “public/”。这些都是位于路由器的Web目录下的公开子目录,如果请求地址包含这样的字符串,这些请求就可以不经身份认证就能执行。

然而,这最后一个strcmp却是相当的吸引眼球:

这个操作是将http_request_t结构体中偏移量0xD0的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”比较,如果字符匹配,就会跳过check_login函数,alpha_auth_check操作返回1(认证通过)。

我在谷歌上搜索了一下“xmlset_roodkcableoj28840ybtide”字符串,只发现在一个俄罗斯论坛里提到过它,说这是一个在/bin/webs里一个“非常有趣”的一行。我非常同意。

那么,这个神秘的字符串究竟是和什么东西进行比较?如果回顾一下调用路径,我们会发现http_request_t结构体被传进了好几个函数:

事实证明,http_request_t结构体中处在偏移量 0xD0处的指针是由httpd_parse_request函数赋值的:

这代码实际上就是:

if(strstr(header, "User-Agent:") != NULL)

{

http_request_t->0xD0 = header + strlen("User-Agent:") + strspn(header, " \t");

}

知道了http_request_t偏移量0xD0处的指针指向User-Agent头信息,我们可以推测出alpha_auth_check函数的结构:

#define AUTH_OK 1

#define AUTH_FAIL -1

int alpha_auth_check(struct http_request_t *request)

{

if(strstr(request->url, "graphic/") ||

strstr(request->url, "public/") ||

strcmp(request->user_agent, "xmlset_roodkcableoj28840ybtide") == 0)

{

return AUTH_OK;

}

else

{

// These arguments are probably user/pass or session info

if(check_login(request->0xC, request->0xE0) != 0)

{

return AUTH_OK;

}

}

return AUTH_FAIL;

}

换句话说,如果浏览器的User-Agent值是“xmlset_roodkcableoj28840ybtide”(不带引号),你就可以不经任何认证而能访问web控制界面,能够查看/修改路由器的设置(下面是D-Link路由器(DI-524UP)的截图,我没有 DIR-100型号的,但DI-524UP型号使用的是相同的固件):

基于HTML页上的源代码信息和Shodan搜索结果,差不多可以得出这样的结论:下面的这些型号的D-Link路由器将会受到影响:

DIR-100

DI-524

DI-524UP

DI-604S

DI-604UP

DI-604+

TM-G5240

除此之外,几款Planex路由器显然也是用的同样的固件程序:

BRL-04UR

BRL-04CW
D-Link路由器曝远程DNS劫持漏洞

安全研究人员发现D-Link路由器上存在高危DNS劫持漏洞。不仅如此,该漏洞还影响所有使用ZynOS固件的路由器,品牌包括D-Link(友讯)、TP-Link(深圳普联)、ZTE(中兴通讯)。

远程更改DNS

D-Link(友讯路由器)上的漏洞可以允许攻击者远程更改设备的DNS设置并劫持用户流量。安全专家Todor Donev指出该漏洞主要是存在ZynOS固件上,而该固件目前正被数家路由器生产厂商使用,包括D-Link(友讯)、TP-Link(深圳普联)、ZTE(中兴通讯)。

研究者目前无法确定是不是所有的D-Link路由器都存在漏洞,但至少可以确定的是D-Link的DSL-2740R ADSL调制解调器/无线路由器上存在该漏洞。另外,所有使用ZynOS固件的路由器都是不安全的。

漏洞利用

利用该漏洞,攻击者无需身份验证就可访问D-Link设备的web管理者界面,然后更改DNS设置,重定向用户到一个钓鱼网站,或者更改域名为提供恶意程序的地址。即使web管理者为暴露在网上,攻击者也可以通过使用跨站请求伪造(CSRF)技术从本地网络访问路由器界面。

发表评论

您必须才能发表评论!