一切福田,不離方寸,從心而覓,感無不通。

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

OK,又是周末晚上,没有约会,只有一大瓶Shasta汽水和全是快节奏的音乐…那就研究一下程序吧。 一时兴起,我下载了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函数和数据结构体的大概样子: 1 struct http_request_t 2 { 3     char unknown[0xB8]; 4     char *url; // At offset 0xB8 into the data structure 5 }; 6 7 int alpha_auth_check(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数据结构体的偏移量0xB8处),检查它们是否含有字符串“graphic/” 或 “public/”。这些都是位于路由器的Web目录下的公开子目录,如果请求地址包含这样的字符串,这些请求就可以不经身份认证就能执行。 然而,这最后一个strcmp却是相当的吸引眼球: alpha_auth_check函数中一个非常有趣的字符串比较 这个操作是将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函数赋值的: 检查HTTP头信息中的User-Agent值 将http_request_t + 0xD0指针指向头信息User-Agent字符串 这代码实际上就是: 1 if(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 04 int alpha_auth_check(struct http_request_t *request) 05 { 06     if(strstr(request->url, "graphic/") || 07        strstr(request->url, "public/") […]

龙生   22 Oct 2013
View Details

10 个具有特殊用途的 Linux 发行版

Linux 发行版众多,大家除了可以基于发行版的流行程度进行选择外,也可适当留意该发行版的特定用途,或许在另外的场合该发行版正是你所需要的。今天我们将与大家分享 10 个具有特殊用途的 Linux 发行版,希望对你有用。 Scientific Linux 基于 Redhat,由两个科学研究机构 Fermilab 和 CERN 合作开发,适合对科学研究感兴趣的个人或团体。 官方主页:https://www.scientificlinux.org Scibuntu 与此类似,它基于 Ubuntu,目前仍在测试中。   Edubuntu Ubuntu 的官方衍生版之一,面向教育用户,适合学校使用。 如果是 3 岁以上的儿童,也可考虑 Qimo。 官方主页:http://www.edubuntu.com Backtrack 主要用于渗透测试的一个安全发行版,其中囊括了 300 多个工具,可说是安全人员的得力助手。 官方主页:http://www.backtrack-linux.org/ Parted Magic 非常好用的硬盘分区工具,另外也收录了许多实用的数据恢复工具。运行速度飞快,每次给朋友修电脑我都会带上它。 官方主页:http://partedmagic.com Ubuntu Studio 又一个 Ubuntu 官方的衍生版,适合音频、视频及图形发烧友或专业人士使用,其中预装了大量开源的多媒体应用程序。 官方主页:http://ubuntustudio.org Clonezilla 系统克隆工具,能够克隆单个分区或整个系统。另外,它也支持 Multicast 克隆,这对需要克隆大量系统的用户来说是相当有用的。可以用它来替代 Norton Ghost 这样的商业软件。 官方主页:http://www.clonezilla.org SystemRescueCd 系统急救工具箱,如果你的系统遇到了故障,或是要恢复数据,用它就对了。系统管理必备。 官方主页:http://www.sysresccd.org linuX-gamers 一个包含大量 Linux 游戏的 Live 发行版。无需安装。Linux 游戏玩家不可错过。 官方主页:http://live.linux-gamers.net Ubuntu CE Ubuntu Christian 版本,适合基督徒使用。 另外也有一个 UbuntuME,即 Ubuntu Muslim Edition,适合穆斯林用户使用。 官方主页:http://ubuntuce.com Mythbuntu 基于 MythTV 的家庭多媒体中心,可以作为 Tivo 和 Windows Media Center 的替代。 转自Ubuntu之家

龙生   22 Oct 2013
View Details