行业解决方案查看所有行业解决方案
IDA 用于解决软件行业的关键问题。
发布时间:2022-10-09 17: 01: 45
D-Link是常用于各种网络环境中的硬件品牌,今天我们对它进行后门逆向分析。
一时兴起,我为Dir-100 Reva下载了固件v1.13。Binwalk迅速找到并提取了Squashfs文件系统,很快我将固件的Web服务器(/bin/web)加载到IDA中:
基于上述字符串列表,/bin/web二进制是THTTPD的修改版本,为路由器提供管理界面。它似乎已通过Alphanetworks(D-Link的衍生)进行了修改。他们甚至足够深思,可以用字符串的“alpha”来准备许多自定义功能名称:
Alphanetworks的自定义功能
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表明它是一个指向数据结构的指针,其中包含指向接收到的HTTP请求的各个部分的char*指针,例如HTTP标头和请求的URL:
$s2是指向数据结构的指针
我们现在可以为alpha_auth_check并开始枚举数据结构的元素:
结构http_request_t
{
字符未知[0xB8];
字符*url;//在数据结构的偏移量0xB8
};
int alpha_auth_check(struct http_request_t*request);
alpha_auth_check本身是一个相当简单的函数。它针对http_request_t结构中的一些指针执行一些strstr和strcmp,然后调用check_login,这实际上是进行身份验证检查。如果调用任何strstr's/strcmp's或check_login成功,则返回1;否则,它将浏览器重定向到登录页面并返回-1:
那些strstr看起来很有趣。他们获取请求的URL(在http_request_t数据结构的偏移量0xB8处,如前所述)并检查它是否包含字符串“graphic/”或“public/”。这些是设备web目录下的子目录,如果请求的URL包含这些字符串之一,则无需身份验证即可允许请求。
然而,它是最终的strcmp,它被证明更有说服力:
alpha_auth_check中一个有趣的字符串比较
之间执行strcmp http_request_t结构内偏移0xD0处的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”如果字符串匹配,check_login函数调用并且alpha_auth_check返回1(身份验证OK)。
在谷歌上快速搜索“xmlset_roodkcableoj28840ybtide”字符串,几年前只找到一篇俄罗斯论坛的帖子,其中指出这是/bin/webs二进制文件中的一条“有趣的线”。我不得不同意。
那么,这个神秘的字符串与之相比是什么呢?如果我们回顾调用树,我们会看到http_request_t结构指针由几个函数传递:
事实证明,http_request_t结构中偏移量0xD0处的指针由httpd_parse_request函数填充:
检查用户代理HTTP标头
使用指向User-Agent标头字符串的指针填充http_request_t+0xD0
这段代码实际上是:
if(strstr(header,"User-Agent:")!=NULL)
{
http_request_t->0xD0=header+strlen("User-Agent:")+strspn(header,"\t");
}
知道http_request_t中的偏移量0xD0包含指向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/")||
strstr(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->0xC,request->0xE0)!=0)
{
return AUTH_OK;
}
}
return AUTH_FAIL;
}
换句话说,如果浏览器的用户代理字符串为“xmlset_roodkcableoj28840ybtide”(无引号),则无需任何身份验证即可访问web界面并查看/更改设备设置(显示了DI-524UP,因为我没有DIR-100,而DI-524BUP使用相同的固件):
访问DI-524UP的管理页面
根据HTML页面的源代码和一些Shodan搜索结果,可以合理得出以下D-Link设备可能受到影响:
●DIR-100
●DI-624S
●DI-524UP
●DI-604S
●DI-604UP
●DI-604+
●TM-G5240
此外,几个Planex路由器似乎也使用相同的固件:
●BRL-04UR
●BRL-04CW
原文地址:https://lcx.cc/post/3950/
展开阅读全文
︾
读者也喜欢这些内容:
IDA怎么修改字符串内容?IDA修改后怎么保存?
在软件开发和逆向工程领域,IDA Pro是一种极其强悍的工具,广泛用于程序剖析、调试和修改。它不仅支持多种处理器架构,还提供了大量的作用,以适应高档讲解的必须。本文将围绕ida怎么修改字符串内容,ida修改后怎么保存这一主题,详细描述怎样在IDA中更改字符串内容,及其修改后的存放方式。此外,我们还将探讨IDA转变的应用场景,帮助读者更深入地了解IDA的实际应用价值。...
阅读全文 >
芯片逆向工程是什么?使用IDA进行芯片逆向工程教程
在如今智能时代,芯片开发已成为技术产业的关键,危及很多领域发展和创新。但是,对于很多非专业人士而言,芯片逆向工程可能是一个怪异的界定。本文将详细解释芯片逆向工程是什么,使用IDA进行芯片逆向工程教程,及其IDA在芯片领域的其他应用。...
阅读全文 >
游戏反编译工具有哪些 游戏怎么反编译
在当今的数字时代,电子游戏已经成为娱乐业的一大亮点,而游戏开发变得越来越复杂。有时,破解和深入了解游戏内部运作机制是游戏开发者、安全专家和研究人员的必修课。...
阅读全文 >
IDA Pro支持哪些指令集架构 IDA Pro支持哪些文件格式
在数字化时代,逆向工程和漏洞分析变得愈发重要,而IDA Pro(Interactive Disassembler Professional)以其卓越的能力在这一领域脱颖而出。...
阅读全文 >