首 页最新软件下载排行文章资讯投稿发布下载专题
维维下载站
您的位置:首页编程开发网络编程编程其它 → 怎么反编译D-Link路由器固件程序并发现它的后门

怎么反编译D-Link路由器固件程序并发现它的后门

来源:维维整理 发布时间:2013-10-22 9:48:12 人气:

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

/bin/webs中的字符信息

根据上述字符信息,/ bin / webs二进制文件是thttpd的修改版本,它提供了路由器管理员界面操作功能。它似乎已被台湾明泰科技(D-Link的子公司)纠正。他们甚至非常渴望用“alpha”前缀来补充他们的许多自定义函数名称:

明泰科技的自定义函数

这个alpha_auth_check函数看起来很有趣!

许多本地函数调用此函数,最重要的函数来自alpha_httpd_parse_request函数:

调用alpha_auth_check函数

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

寄存器$ s2在被alpha_auth_check函数使用之前出现在某些操作代码中。它是一个指向数据布局主体的指针,该主体带有一个char *指针,指向从HTTP请求接收的各种数据;例如,HTTP标头信息。并请求地址URL:

$ s2是指向数据布局主体的指针

我们现在可以模拟alpha_auth_check函数和数据布局体的近似姿势:

alpha_auth_check自身是一个十分简略的函数。它会对于http_request_t布局体里的一些指针进行字符串strcmp对比操作,然后调用check_login函数,实际上即是身份验证检查。若是一旦有字符串对比成功或check_login成功,它会回来1;否者,它会重定向浏览器到登录页,回来-1;

alpha_auth_check函数代码片段

这些字符串比较过程看起来非常有趣。他们得到请求的URL地址(在HTTPIPReestestt数据布局体的偏移量0xB8),并检查它们是否富含字符串“图形/”或“公共/”。这些都公开了路由器所在的Web目录中的子目录,并且如果地址包含这样的字符串,则可以在不进行身份验证的情况下执行恳求。

然而,这最后的StrCmp是适当的吸引眼球:

alpha_auth_check函数中一个十分风趣的字符串对比

操作是将字符串指针与HTTPIQuestStIt布局体中的偏移量0xD0和字符串“XMLSETIORRODKABLOJJ8840YBODATE”进行比较。如果字符匹配,它将跨越CHECKILogin函数,而alpHaAuthOrthCug操作则返回1(身份验证传递)。

我在谷歌上查了“XMLSETHORKOBKLYOJJ8840YBODITY”字符串,我今天在一个俄罗斯论坛上提到它,说它是一个“非常有趣”的行/ bin /网。我非常同意。

这神秘的弦与什么是对比?如果我们回想调用路径,我们会发现HTTPIQuestestyt布局被转换成多个函数:

事实证明,http_request_t布局中偏移量0xD0处的指针由httpd_parse_request函数指定:

检查HTTP头信息中的User-Agent值

将http_request_t + 0xD0指针指向头信息User-Agent字符串

这代码实际上即是:

知道http_request_t偏移量0xD0处的指针指向User-Agent标头,我们可以找出alpha_auth_check函数的布局:

换句话说,如果浏览器的User-Agent值为“xmlset_roodkcableoj28840ybtide”(不带引号),则无需任何身份验证即可访问Web控制界面,并可以检查/更正路由器设置(在D-Link路由器下方)(DI -524UP)截图,我没有DIR-100型,但是DI-524UP型使用相同的固件):

拜访类型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,这个后门的作者真是位天才!

相关下载
栏目导航
本类热门阅览