IoT认证前漏洞学习总结
主要都是oneshlel师傅的文章学习而来。原文很多也是复制的,博客oneshell.top。以及oneshell的总结和天工文章
端口弱认证
CVE-2024-5035:TP-Link Archer C5400X认证前命令执行
CVE-2024-5053是发生在三频游戏路由器TP-Link Archer C4500X,固件版本1_1.1.6及之前的认证前命令执行漏洞,漏洞发生在程序rftest中。该程序是和射频测试相关的,用于帮助AP进行无线接口自评价,程序会监听在TCP端口8888、8889、8890上。未授权的攻击者可以向这些端口发送构造的请求包,进行命令注入。
简单来说,这种漏洞的问题在于,开放端口在非80等常规端口用于其他目的,从而忽视了安全性。漏洞是只能执行wl命令,但是可以wl;id进行命令注入。使用了strncmp。
让鉴权函数返回是
发生在websSecurityHandler中的认证绕过(CVE-2020-15633)
该漏洞是发生在LAN口的一个登录认证绕过漏洞,影响设备DIR-867、DIR-878、DIR-882,固件版本1.20B10_BETA。漏洞产生的原因是在处理HNAP请求的过程中,验证用户登录逻辑时处理不当,使用strstr函数来检查无需验证权限的接口,导致可以构造特定URI来绕过身份认证,从而访问敏感接口。
大致就是/HNAP1/会调用如下链条:
sub_423ECC -> 0 sub_4249EC -> 0 websSecurityHandler -> 0
在函数sub_423ECC中,会使用函数strstr比较环境变量REQUEST_URI(也就是请求路径)中是否含有字符串列表actions_list中的字符串,然后触发到return 0。
if ( a1[57] && strstr(a1[57], &actions_list[32 * index]) )// REQUEST_URI { if ( strcmp(&actions_list[32 * index], "/HNAP1/") || !a1[50] || strcmp(a1[50], "POST") ) return 0; }
- actions_list中的字符串表如下:
.data:004D01A0 actions_list: .ascii "GetCAPTCHAsetting"<0> .data:004D01A0 # DATA XREF: sub_423ECC+D8↑o .data:004D01A0 # sub_423ECC+12C↑o ... .data:004D01B2 .align 4 .data:004D01C0 aGetdevicesetti_3:.ascii "GetDeviceSettings"<0> .data:004D01D2 .align 4 .data:004D01E0 aBlockedpageHtm:.ascii "blockedPage.html"<0> .data:004D01F1 .align 4 .data:004D0200 aMobileloginHtm:.ascii "MobileLogin.html"<0> .data:004D0211 .align 4 .data:004D0220 aLoginHtml: .ascii "Login.html"<0> .data:004D022B .align 5 .data:004D0240 aEulaHtml: .ascii "EULA.html"<0> .data:004D024A .align 5 .data:004D0260 aIndexHtml_2: .ascii "Index.html"<0> .data:004D026B .align 5 .data:004D0280 aWizardHtml: .ascii "Wizard.html"<0> .data:004D028C .align 5 .data:004D02A0 aHnap1_5: .ascii "/HNAP1/"<0> .data:004D02A8 .align 5 .data:004D02C0 aEulaTermHtml: .ascii "EULA_Term.html"<0> .data:004D02CF .align 5 .data:004D02E0 aEulaPrivacyHtm:.ascii "EULA_Privacy.html"<0> .data:004D02F2 .align 4
-
然后返回到函数sub_4249EC,触发该函数继续返回0;
-
再返回到函数websSecurityHandler中,使得该认证函数返回0,达到认证绕过;
websUrlHandlerDefine("/", 0, 0, websSecurityHandler, 1);
综上所述,对于路由/HNAP1/,只需要在uri后添加?GetCAPTCHAsetting或者任意其他字符串列表的中字符串,就可以达到认证绕过访问该接口的目的。
发生在函数auth_check中的认证绕过(CVE-2021-35973)
发生在netgear wac104设备、固件版本1.0.4.15之前的身份认证绕过漏洞,漏洞产生的原因是在鉴权过程中,使用了strstr来判断:如果请求uri中包含currentsetting.htm,设置无需认证标志。因此攻击者可以在需要鉴权的uri中包含currentsetting.htm标志,从而达到认证绕过的目的。
存在g_bypass_flag=1,只要请求path中包含currentsetting.htm就可以设置为1,从而不需要认证。
CVE-2021-32030
ASUS RT-AX56U设备,需要鉴权的接口都会从请求获取cookie参数,之后传入auth函数。auth函数中,从nvram获取ifttt_token。在默认情况IFTTT没有开启,ifttt_token为空,通过请求中传入空的cookie可绕过认证。
使用相关漏洞,进行未授权重置密码从而登陆。
让登陆接口返回是
同样是发生在函数websSecurityHandler中的认证绕过(CVE-2020-8864)
CVE-2020-8864是发生在固件版本为 1.10B04 的 D-Link DIR-867、DIR-878 和 DIR-882 路由器的认证绕过漏洞。该漏洞是由于HNAP请求中处理登录密码时缺乏对空密码的正确处理而导致的,攻击者可以利用该漏洞进行命令执行
函数hnap_login是寻常的账号、密码验证流程,大概简化的流程就是先从请求中获取账号、密码,然后比较账号是否为Admin/admin,先获取密码长度然后调用strncmp比较密码是否正确。但是如果输入密码为空则会导致strncmp比较通过。
int __fastcall hnap_login(int a1) { ... post_username = webGetVarString(a1, "/Login/Username"); post_password = webGetVarString(a1, "/Login/LoginPassword"); if (... || !post_username || !post_password || strncmp(post_username, "Admin", 5) && strncmp(post_username, "admin", 5) ) { goto LOGIN_FAIL; } ... if ( !strcmp(nvram_isDefaultLogin, "1") || (len_password = strlen(post_password), !strncmp(v13, post_password, len_password)) ) { ... return 0; } else { LOGIN_FAIL: ... return 1; } }
内存溢出型
发生在函数handle_request(CVE-2021-34979)
发生在NETGEAR R6260,固件版本V1.1.0.78_1.0.1中,处理
SOAPAction
标头由于未判断全局数组spapServiceName
的边界,导致越界写。写入的数据会以环境变量的形式传递到setupwizard.cgi中,进而造成缓冲区溢出。
越界写:发生在处理数据包的函数handle_request
中,未判断边界。
else if (strncasecmp(line, "SOAPAction:", 11) == 0) { char *pTemp = NULL; cp = &line[11]; cp += strspn(cp, " \t"); pTemp = strcasestr(cp, "urn:NETGEAR-ROUTER:service:"); if (pTemp != NULL) { int i = 0; pTemp += strlen("urn:NETGEAR-ROUTER:service:"); while (*pTemp != ':' && *pTemp != '\0') { soapServiceName[i++] = *pTemp; // <-- Out-Of-Bounds Write pTemp++; } } }
后续调用setupwizard.cgi时,环境变量会传入,并且造成缓冲区溢出。
bool check_soap_login_record() { ... v1 = getenv("SOAP_LOGIN_TOKEN"); ... if ( !v3 ) { ... strcat((char *)v25, v1); ... ```[oneshell](https://research.qianxin.com/archives/1972 "oneshell")
本文作者:.N1nEmAn
本文链接:https://www.cnblogs.com/9man/p/18719370
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步