360安全卫士某处缺陷导致本地命令执行,最新版本上测试通过。
360安全卫士有个“360电脑专家”功能,可以聊天哦,来咱和智能机器人聊聊(我也不知道和真人聊天会是什么样的效果)。
输入:<xxoo>
在聊天窗口中直接显示 <xxoo>,看来不存在问题。
查看下聊天记录,却发现我们刚输入的那句是空白,这又不是,又没办法查看源代码,不过直觉告诉我们没有过滤的。聊天记录么,肯定是保存在本地的,拿出 Filemon 试试能不能找到。设置过滤,包含 "*360DiagnoseScan*;",再打开聊天记录,别说,还真找到了。在这里:
C:Documents and SettingsAdministratorApplication DataSosClientchat (我 xp 系统)
按时间保存的 文件:chat_20130819xxxxxxxxx.html,打开找到了我们的代码:
<font color="#0fb42d">我 xx:oo</font><p><font color="#333333"><xxoo></font></p></div><div><p></p><font color="#0032c8">360电脑专家 xx:oo</font>
看到没有过滤,既然是保存在本地的 html 中,权限么还是蛮大的,能不能执行命令呢,继续。
聊天有限制,只允许 30 个字符,一个英文和一个中文竟然同等对待,太不科学了。不过难不倒我们,我们构造如下的代码,分 5 次输入进去:
<script>/*
*/w=new ActiveXObject/*
*/("WScript.Shell");/*
*/w.run("cmd.exe");/*
*/</script>
通过 /**/ 注释掉乱七八糟的东西,保持我们代码的完整性,由于每次聊天都要从服务端返回信息,有一个时间差,所以我们以一个极快的速度连续输入我们的代码,就像下图一样:
来来来,赶紧点开聊天记录看看呢,多乖的窗口啊,就这么跳出来了。
修复方案:
写入聊天内容到本地文件之前进行一次编码处理。