首页 | 程式人生 | 原创下载 | 技术文档 | 留言我们 | 关于我们

深入剖析通过嵌入执行ActiveX对象漏洞

作者: tombkeeper        2003-11-05

受影响的系统:

所有Windows版本,IE4.0/IE5.0/IE5.01/IE5.5,OE,Outlook,Foxmail

描述:
把com.ms.activeX.ActiveXComponent对象嵌入

点击“确定”会打开一个命令提示符。

同样使用这个OBJECT,嵌入com.ms.activeX.ActiveXComponent对象后,在IE的
默认安全级别“中”状态下也同样可以运行。打开包含以下脚本的HTML文件也会运行一
个命令提示符,但没有任何警告。甚至还可以使程序在后台运行。


还可以通过WSHShell对象运行任何程序、获取主机信息、读写注册表,甚至删除所
有注册表项;通过FileSystem对象任意读写删除文件,等等。最近很多恶意网站都通过
类似手段改写访问者的注册表,一些网页型病毒如著名的“万花谷”病毒也是采用了此
方法。

其实只要能使用Run执行cmd.exe,创建文件和写注册表都可以很容易地完成。下面
就是一个用cmd.exe创建注册表脚本,并导入注册表的例子。


值得一提的是通过巧妙的运用debug的输入重定向还可以创建二进制文件。下面的
代码完全使用Run函数,用echo命令写文件。

这只是个测试页面,所包含的可执行程序无任何危害。by tombkeeper@126.com

由于debug本身的限制,只能创建小于64K的文件,但可以把较大的文件分割成几
部分,分别创建后,再用"copy file1+file2 fileAll"命令合并。用这种方法可以
创建任意大小的二进制文件。下面所创建的文件虽然和上面的一样只有1536字节,我
们也使用一下这种方法。这里用WriteLine写文件。


这只是个测试页面,所包含的可执行程序无任何危害。by tombkeeper@126.com


由于Outlook、Outlook Express、Foxmail等邮件客户端显示HTML邮件时也是调
用IE的库,所以这个问题也会影响这一类程序。


解决方案:

该问题目前尚无任何可用的官方补丁,建议:

1、在IE的“internet选项”中的“安全”项中把“安全级别”设为“高”,或在“自
定义级别”中把“对标记为可安全执行的ActiveX控件执行脚本”标记为“禁用”。
注意:此措施仅对WEB上的代码有效,对于本地文件和HTML格式的邮件无效(邮件
也是本地文件)。

2、删除一些危险的对象,从根本上解决问题。这些对象对普通用户是没什么用的。
1)禁用WSHShell对象,阻止运行程序。
删除或更名系统文件夹中的wshom.ocx
或删除注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}
2)禁用FileSystem对象,阻止读写文件。
删除或更名系统文件夹中的scrrun.dll
或删除注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0D43FE01-F093-11CF-8940-00A0C9054228}

把下面一段代码保存为delobj.vbs,运行后可自动删除WSHShell和FileSystem对象。

;-----------delobj.vbs code by tombkeeper@126.com-----------
text1 = "此脚本将删除注册表中的WSHShell对象和FileSystem对象。"
text2 = "这些对象对普通用户并没有用处,而删除他们可以增强系统的安全性,"
text3 = "阻止大多数通过浏览器以及电子邮件带来的安全问题,"
text4 = "包括恶意网页对IE标题栏的修改等。建议在删除之前先备份注册表。"

Alarm_ =" "& text1 & text2 & text3 & text4

Title_ = "code by tombkeeper@126.com"
Call Start()

Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")

WSHShell.Popup "删除WSHShell对象"
WSHShell.RegDelete "HKLM\SOFTWARE\Classes\CLSID\{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}"

WSHShell.Popup "删除FileSystem对象"
WSHShell.RegDelete "HKLM\SOFTWARE\Classes\CLSID\{0D43FE01-F093-11CF-8940-00A0C9054228}"

Sub Start()
Dim intDoIt

intDoIt = MsgBox(Alarm_, _
vbOKCancel + vbInformation, _
Title_ )
If intDoIt = vbCancel Then
WScript.Quit
End If
End Sub
'---------------------------end-----------------------------


附录1 文中使用的可执行程序源代码:

;------------code by tombkeeper@126.com-------------
.386
.model flat, stdcall
option casemap :none ; case sensitive

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.code

start:

jmp @F
szDlgTitle db "tombkeeper@126.com",0
szMsg db "这只是个测试,不会有任何危害。",0
@@:

push MB_OK
push offset szDlgTitle
push offset szMsg
push 0
call MessageBox

push 0
call ExitProcess

end start
;-----------------------end------------------------

附录2 文中提到的debug命令

a 汇编命令,将汇编语句直接装配到存储器中
r 寄存器命令,显示和设置寄存器AX、BX、CX、DX等
n 命名命令
w 写命令,将指定数据写到磁盘上
q 退出

命令和参数间可以不加空格,如rcx就是r cx,nfile.ext就是n file.ext。需要
注意的是debug为了应用程序的安全,不能直接写扩展名为exe的文件,这也就是要先命
名为test.ext再rename为test.exe的原因。

WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。
WSS 主页:http://www.whitecell.org/
WSS 论坛:http://www.whitecell.org/forum/

文章版权为作者本人所有,如转载本内容请保留此文档的完整.


→返回←

红蜻蜓工作室版权所有
Copyright © 1999-2025 Reddragonfly & Studio All Rights Reserved.
如有任何问题及建议请留言红蜻蜓工作室

建站第 9287 天