我是如何反编译D-Link路由器固件程序并发现它的后门的_.pdf

上传人:qwe****56 文档编号:74640927 上传时间:2023-02-27 格式:PDF 页数:11 大小:422.59KB
返回 下载 相关 举报
我是如何反编译D-Link路由器固件程序并发现它的后门的_.pdf_第1页
第1页 / 共11页
我是如何反编译D-Link路由器固件程序并发现它的后门的_.pdf_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《我是如何反编译D-Link路由器固件程序并发现它的后门的_.pdf》由会员分享,可在线阅读,更多相关《我是如何反编译D-Link路由器固件程序并发现它的后门的_.pdf(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、我是如何反编译 D-Link 路由器固件程序并发现它的后门的 OK,又是周末晚上,没有约会,只有一大瓶 Shasta 汽水和全是快节奏的音乐那就研究一下程序吧。一时兴起,我下载了 D-link 无线路由器(型号:DIR-100 revA)的固件程序 v1.13。使用工具Binwalk,很快的就从中发现并提取出一个只读 SquashFS 文件系统,没用多大功夫我就将这个固件程序的 web server(/bin/webs)加载到了 IDA 中:/bin/webs 中的字符信息 基于上面的字符信息可以看出,这个/bin/webs 二进制程序是一个修改版的 thttpd,提供路由器管理员界面操作功能

2、。看起来是经过了台湾明泰科技(D-Link 的一个子公司)的修改。他们甚至很有心计的将他们很多自定义的函数名都辅以“alpha”前缀:明泰科技的自定义函数 这个 alpha_auth_check 函数看起来很有意思!这个函数被很多地方调用,最明显的一个是来自 alpha_httpd_parse_request 函数:调用 alpha_auth_check 函数 我们可以看到 alpha_auth_check 函数接收一个参数(是存放在寄存器$s2 里);如果alpha_auth_check 返回-1(0 xFFFFFFFF),程序将会跳到 alpha_httpd_parse_request 的

3、结尾处,否则,它将继续处理请求。寄存器$s2 在被 alpha_auth_check 函数使用前的一些操作代码显示,它是一个指向一个数据结构体的指针,里面有一个 char*指针,会指向从 HTTP 请求里接收到的各种数据;比如HTTP 头信息和请求地址 URL:$s2 是一个指向一个数据结构体的指针 我们现在可以模拟出 alpha_auth_check 函数和数据结构体的大概样子:struct http_request_t char unknown0 xB8;char*url;/At offset 0 xB8 into the data structure;int alpha_auth_che

4、ck(struct http_request_t*request);alpha_auth_check 本身是一个非常简单的函数。它会针对 http_request_t 结构体里的一些指针进行字符串 strcmp 比较操作,然后调用 check_login 函数,实际上就是身份验证检查。如果一旦有字符串比较成功或 check_login 成功,它会返回 1;否者,它会重定向浏览器到登录页,返回-1;alpha_auth_check 函数代码片段 这些字符串比较过程看起来非常有趣。它们提取请求的 URL 地址(在 http_request_t 数据结构体的偏移量 0 xB8 处),检查它们是否含有

5、字符串“graphic/”或“public/”。这些都是位于路由器的 Web 目录下的公开子目录,如果请求地址包含这样的字符串,这些请求就可以不经身份认证就能执行。然而,这最后一个 strcmp 却是相当的吸引眼球:alpha_auth_check 函数中一个非常有趣的字符串比较 这个操作是将 http_request_t 结构体中偏移量 0 xD0 的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”比较,如果字符匹配,就会跳过 check_login 函数,alpha_auth_check 操作返回 1(认证通过)。我在谷歌上搜索了一下“xmlset_roo

6、dkcableoj28840ybtide”字符串,只发现在一个俄罗斯论坛里提到过它,说这是一个在/bin/webs 里一个“非常有趣”的一行。我非常同意。那么,这个神秘的字符串究竟是和什么东西进行比较?如果回顾一下调用路径,我们会发现http_request_t 结构体被传进了好几个函数:事实证明,http_request_t 结构体中处在偏移量 0 xD0 处的指针是由 httpd_parse_request函数赋值的:检查 HTTP 头信息中的 User-Agent 值 将 http_request_t+0 xD0 指针指向头信息 User-Agent 字符串 这代码实际上就是:if(st

7、rstr(header,User-Agent:)!=NULL)http_request_t-0 xD0=header+strlen(User-Agent:)+strspn(header,t);知道了 http_request_t 偏移量 0 xD0 处的指针指向 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/)|str

8、str(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-0 xC,request-0 xE0)!=0)return AUTH_OK;return AUTH_FAIL;换句话说,如果浏览器的 User-Agent 值是“xmlset_roodkcableoj28840ybtide”(不带引

9、号),你就可以不经任何认证而能访问 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,这个后门的作者真是位天才!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com