阅读:43557回复:101
应广大 Firefox 的 FANS 要求,写了一个恶意脚本的实例,大家看看
首先不要害怕,这个页面没有恶意,却展示了恶意页面的可行性。你要不放心,可以只阅读代码,而不要运行。
运行效果如下: 你只要一点击按钮,Firefox 就会提示你是否运行,如果你选择“是”,那么它将自动把你本地的 prefs.js 复制一份成为 new_prefs.js,如果你选择“否”,那么它会继续提示你 2 次。(整个过程 Firefox 都不会自动的把其中非安全的脚本抑制掉,而是让用户作出选择) 代码如下,附件是其 ZIP 版本。试试看吧 试想: 1. 如果我不是去创建一个 new_prefs.js,而是更改 hostperm.1 把恶意的网站加为 Firefox 信任的网站,那会怎么样? 2. 如果不是写 new_prefs.js,而是直接写你的 cmd.exe 会怎么样?或者在你的启动组里创建上 format c:/u/q 的快捷方式,那有会怎样? 3. 如果我不是 "onload=doBAD(3)" 而是 "onload=doBAD(10000)" 怎么办? 特别要说清楚:这个例子仅用于说明如果没有良好的安全意识,使用任何浏览器(包括 Firefox)都是不安全的。不是攻击 Firefox 的安全性。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title></title> <script type="text/javascript"> function doREAD(f) { var is = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); is.init(f, 0x01, 00004, null); var sis = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream); sis.setInputStream(is); var output = sis.readBytes(sis.available()); return output; } function doWRITE(f, data) { var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); // use 0x02 | 0x10 to open file for appending. foStream.init(f, 0x02 | 0x08 | 0x20, 0664, 0); // write, create, truncate foStream.write(data, data.length); foStream.close(); } function doBAD(count) { for (var i = 0; i < count; ++i) { try { var pm = netscape.security.PrivilegeManager; pm.enablePrivilege('UniversalXPConnect'); var profs = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); var new_profs = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile); profs.append('prefs.js'); new_profs.append('new_prefs.js'); data = doREAD(profs); doWRITE(new_profs, data); alert('File copied from [' + profs.path + '] to [' + new_profs.path + '] !'); break; } catch(ex) { // alert(ex); } } } </script> </head> <body> <button onclick="doBAD(3)">Copy prefs.js to new_prefs.js</button> </body> </html> |
|
|
1楼#
发布于:2005-06-07 18:41
搬个板凳坐到。
鸡蛋是不能全放在一个篮子里的。安全问题全在自己。怪只能怪那些3721之流缺德,想出这种阴谋,是要遭报应的。 不过,IE的加载项实在是要命…… |
|
2楼#
发布于:2005-06-07 18:41
我勾选了“以后不再提示我”
然后点否,就再也没有提示什么了 。 ff不是杀毒软件,如果遇到个对话框就点击“是”或者“确定”,那当然使用任何浏览器都不安全。 |
|
|
3楼#
发布于:2005-06-07 18:41
me too
需要用户下载一个网页然后运行,和需要用户下载一个EXE然后运行有什么区别呢? 在我的印象里3721不是通过要求用户下载一个文件然后运行,才安装的…… 不过还是要说可行性是有的。 |
|
|
4楼#
发布于:2005-06-07 18:41
onload=doBAD(10000) 在勾选了“以后不再提示我”
后,能否继续提示10000次? 能否实现打开这个网页,就像IE里面的3821那样弹出 个比小泉的野心还大,比水扁的脸皮还厚的窗口来问你 要不要安装?而不是还多一个按钮骗我点(虽然以后 3821”关心“Firefox了可能会在按钮上写上什么” 倭国人集体吃屎录像“之类的骗别人点)。 好像IE里面那个cab安装还有一个”总是信赖***的内容“, 唯独没有”总是不信赖“的选项。 |
|
|
5楼#
发布于:2005-06-07 18:41
|
|
6楼#
发布于:2005-06-07 18:41
或者firefox根本就不应该支持这种功能?
|
|
7楼#
发布于:2005-06-07 18:41
onload=doBAD(10000) 在勾选了“以后不再提示我”不会继续提示,就是CPU飙高马上就好 |
|
8楼#
发布于:2005-06-07 18:41
如果再加上一个"停止所有脚本"的选项呢,会不会好一点?
另外,有一个一直想问的问题,如果脚本里有死循环,firefox怎么处理? |
|
9楼#
发布于:2005-06-07 18:41
安全往往只有一次机会把我,如果你选择了“是”,那么获得授权的脚本就可能会自动往你信任的白名单里加入自己,以后做什么恶意的事情,你可能都不会知道。
需要用户下载一个网页然后运行,和需要用户下载一个EXE然后运行有什么区别呢? 并不需要下载,只要你把这个 HTML 页面放在 WEB 服务器上,通过远端的浏览器访问的用户如果安全意识淡漠,当页面提示“是否授权”的时候,选择了“是”,就会“中招”! |
|
10楼#
发布于:2005-06-07 18:41
解决起来应该不困难吧,比如使用类似安装扩展那样的安全措施,要用户手工加到可信站点才能运行.技术上说应该是没难度的.
|
|
11楼#
发布于:2005-06-07 18:41
|
|
12楼#
发布于:2005-06-07 18:41
就算是用户乱点上了确定,把恶意网站添加到了白名单,剩下的就是如何让用户屈服到不得不同意安装扩展。 实际上,只要你给了恶意网页一次机会,它就可以完成恶意插件的安装,我的脚本仅仅做了创建一个新的无用文件,但这已经证明了一切,因为:只要拥有了写本地文件的权限,它就可以写你的XPCOM注册表、自动创建一个扩展的目录并把它需要的文件放进去、自动修改你的 profile,还有可能把你本地保存的密码文件传回网站,供它的主人分析和破解。 还是那句话:一旦你授权一个脚本突破浏览器的沙箱限制,那后面的一切都是靠脚本提供者的良心、和操作系统的权限保护了,这也是为什么所有的浏览器都要提供插件和网站的数字签名管理,因为这可以让用户确定它使用的脚本/插件来自于谁,而使用它的后果只能由用户承担。 并不是浏览器不想保护没有安全意识的用户,而是它从原理上做不到,无论是 Firefox 还是 IE,都是这样。开放 API/可扩展性和安全性很难同时保证。 另外提醒 WINDOWS 的用户:平时仅使用受限用户做日常的工作可将风险降至最低。 |
|
13楼#
发布于:2005-06-07 18:41
这些缺德的家伙,我要把3721网站给炸了!
|
|
14楼#
发布于:2005-06-07 18:41
确定不需要下载吗?那为什么我放到IIS里点,根本没有你所说的效果呢? |
|
上一页
下一页