设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 IT综合资讯 查看内容

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

2013-10-22 11:02| 发布者: joejoe0332| 查看: 2999| 评论: 0|原作者: 外刊IT评论|来自: 外刊IT评论

摘要:   OK,又是周末晚上,没有约会,只有一大瓶Shasta汽水和全是快节奏的音乐…那就研究一下程序吧。   一时兴起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件程序 v1.13。使用工具Binwalk,很快的就从中发 ...


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


$s2 is a pointer to a data structure


  $s2是一个指向一个数据结构体的指针


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


1struct http_request_t
2{
3    char unknown[0xB8];
4    char *url; // At offset 0xB8 into the data structure
5};
6 
7int alpha_auth_check(struct http_request_t *request);


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


alpha_auth_check code snippet


  alpha_auth_check函数代码片段


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


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


An interesting string comparison in alpha_auth_check


  alpha_auth_check函数中一个非常有趣的字符串比较


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部