设为首页收藏本站

LUPA开源社区

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

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

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

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

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


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


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


call_graph


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


Checks for the User-Agent HTTP header


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


Populates http_request_t + 0xD0 with a pointer to the User-Agent header string


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


  这代码实际上就是:


1if(strstr(header, "User-Agent:") != NULL)
2{
3    http_request_t->0xD0 = header + strlen("User-Agent:") + strspn(header, " \t");
4}


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


01#define AUTH_OK 1
02#define AUTH_FAIL -1
03 
04int alpha_auth_check(struct http_request_t *request)
05{
06    if(strstr(request->url, "graphic/") ||
07       strstr(request->url, "public/") ||
08       strcmp(request->user_agent, "xmlset_roodkcableoj28840ybtide") == 0)
09    {
10        return AUTH_OK;
11    }
12    else
13    {
14        // These arguments are probably user/pass or session info
15        if(check_login(request->0xC, request->0xE0) != 0)
16        {
17            return AUTH_OK;
18        }
19    }
20 
21    return AUTH_FAIL;
22}


酷毙

雷人

鲜花

鸡蛋

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

最新评论

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

返回顶部