📄 753.html
字号:
("Select * from Win32_LogicalDisk Where DriveType = 3")<br />
For Each objDisk in colDisks<br />
Wscript.Echo "Disk drive: "& objDisk.DeviceID & " -- " & objDisk.FileSystem<br />
Next<br />
<br />
在前述 WQL 查询中,你可能已经发现我们只是查询 DriveType 等于 3 的逻辑盘。为什么这么做?因为 DriveType 等于 3 代表的是硬盘,通过将返回数据限定在硬盘上,可以省去我们在软盘、CD-ROM 驱动器以及其它我们知道不会(也不可能)安装 NTFS 文件系统的驱动器上花费的时间。<br />
<br />
任务10:检测自动登录<br />
<br />
可以将 Windows 设置成每当开机就自动使用注册的用户名和密码登录。这听起来很方便,但是的确不适用于那些始终与 Internet 保持连接或者在信息亭中使用的计算机。但是,从另一方面来说,这却有点安全漏洞的嫌疑,至少可以这样说。毕竟它允许任何打开计算机的人以储存在注册表中的用户名和密码登录。正因为如此,Security Analyzer 所执行的一项检查就是查看计算机的自动登录功能是否打开。同样,你也可以使用脚本来完成这项检查:<br />
<br />
Const HKEY_LOCAL_MACHINE = &H80000002<br />
strComputer = "."<br />
Set objReg=GetObject("winmgmts:\\" & strComputer &<br />
"\root\default:StdRegProv")<br />
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\WinLogon"<br />
strValueName = "AutoAdminLogon"<br />
objReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName,<br />
dwValue<br />
If dwValue = 1 Then<br />
Wscript.Echo "Auto logon is enabled."<br />
Else<br />
Wscript.Echo "Auto logon is disabled."<br />
End If<br />
<br />
同样,你肯定不希望计算机上的自动登录打开。所以,为什么不用一段脚本来关闭自动登录功能而不是像 Security Analyzer 那样仅仅只是提示自动登录功能的状态呢。可以使用类似以下的脚本:<br />
<br />
Const HKEY_LOCAL_MACHINE = &H80000002<br />
strComputer = "."<br />
Set objReg=GetObject("winmgmts:\\" & strComputer &<br />
"\root\default:StdRegProv")<br />
strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\WinLogon"<br />
strValueName = "AutoAdminLogon"<br />
dwValue = 0<br />
oReg.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName,<br />
dwValue<br />
<br />
任务11:检查来宾帐户状态<br />
<br />
这个问题取决于你如何看待,来宾帐户在不需要证实身份的情况下向他人提供了一种登录你的计算机的途径(我们假设唯一的例外就是,此 Guest 不是指 Christopher Guest)。正因为如此,在 Windows XP 和 Windows 2003 中来宾帐户在默认条件下是关闭的,而且在 Windows 2000 和 Windows NT 4.0 中同样也应该是关闭的。这是一段报告本地计算机上来宾帐户状态的脚本:<br />
<br />
Set objNetwork = CreateObject("Wscript.Network")<br />
strComputer = objNetwork.ComputerName<br />
Set objUser = GetObject("WinNT://" & strComputer & "/Guest")<br />
If objUser.AccountDisabled Then<br />
Wscript.Echo "The Guest account is disabled."<br />
Else<br />
Wscript.Echo "The Guest account is enabled."<br />
End If<br />
<br />
看,酷吧。但是假设你决定所有计算机上的来宾帐户都应该关闭。可以修改这段脚本来让它在检查来宾帐户以外多做一两件其它的事。如果来宾帐户已经关闭,那么它只需要报告状态事实;但是如果来宾帐户开启的话,它进一步关闭此帐户:<br />
<br />
Set objNetwork = CreateObject("Wscript.Network")<br />
strComputer = objNetwork.ComputerName<br />
Set objUser = GetObject("WinNT://" & strComputer & "/Guest")<br />
If objUser.AccountDisabled Then<br />
Wscript.Echo "The Guest account is already disabled."<br />
Else<br />
objUser.AccountDisabled = True<br />
objUser.SetInfo<br />
Wscript.Echo "The Guest account has been disabled."<br />
End If<br />
<br />
任务12:检查匿名登录<br />
<br />
在默认设置下,非授权用户是无法连接到任何 Windows 计算机以获得域用户名和共享名列表的。这是什么意思?好的,黑客以你的身份登录需要两条信息:你的用户名和你的密码。他可以简单地通过将便携式电脑接驳到你所在的网络然后向最近的计算机查询就可以获取你的用户名,这样就获得了攻击帐户所需信息的一半。(谢天谢地,还没有人发明无线的 Internet 便条,虽然我们知道有人正在钻研这一技术。)<br />
<br />
那么你如何知道自己的计算机是否正在象分发万圣节糖果那样发送信息呢?你可以用 Security Analyzer 或者你也可以使用下面这段脚本:<br />
<br />
Const HKEY_LOCAL_MACHINE = &H80000002<br />
strComputer = "."<br />
Set objReg=GetObject("winmgmts:\\" & strComputer &<br />
"\root\default:StdRegProv")<br />
strKeyPath = "System\CurrentControlSet\Control\Lsa"<br />
strValueName = "RestrictAnonymous"<br />
objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue<br />
If dwValue = 0 Then<br />
Wscript.Echo "Anonymous access is enabled."<br />
Else<br />
Wscript.Echo "Anonymous access is disabled."<br />
End If<br />
<br />
你这样问很有趣;通过脚本有一种方法可以关闭计算机上的匿名登录:<br />
<br />
Const HKEY_LOCAL_MACHINE = &H80000002<br />
strComputer = "."<br />
Set objReg=GetObject("winmgmts:\\" & strComputer &<br />
"\root\default:StdRegProv")<br />
strKeyPath = "System\CurrentControlSet\Control\Lsa"<br />
strValueName = "RestrictAnonymous"<br />
dwValue = 1<br />
oReg.SetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName,<br />
dwValue<br />
<br />
任务13:列出安装的服务<br />
<br />
知道计算机上正在运行什么服务很有用。毕竟,有些阴险的病毒会将自己伪装成服务的形式,所以你必须知道是否有这种病毒正在你的计算机上运行。但是查看合法服务是否在一台计算机上运行也很有用处。对了,我们知道你告诉过你的用户不要在他们的机子上运行网站服务器或者 FTP 服务器,但是你如何知道他们是否听话呢?以下这段脚本会告诉你:<br />
<br />
strComputer = "."<br />
Set objWMIService = GetObject("winmgmts:\\" & strComputer &<br />
"\root\cimv2")<br />
Set colRunningServices = objWMIService.ExecQuery _<br />
("Select * from Win32_Service")<br />
For Each objService in colRunningServices<br />
Wscript.Echo objService.DisplayName, objService.State<br />
Next<br />
<br />
那么假如你发现有人运行了你不希望运行的服务时怎么办呢?我们可以从停止通用即插即用设备主机服务的脚本上得到启发(停止它们):<br />
<br />
strComputer = "."<br />
Set objWMIService = GetObject("winmgmts:\\" & strComputer &<br />
"\root\cimv2")<br />
Set colRunningServices = objWMIService.ExecQuery _<br />
("Select * from Win32_Service Where Name = 'upnhost'")<br />
For Each objService in colRunningServices<br />
objService.StopService()<br />
Next<br />
<br />
任务14:检查共享文件以及共享权限<br />
<br />
难道你不知道吗:在你整个生命过程中,你都被告知和他人进行分享是多么的重要,但是现在我们发现共享(至少从计算机角度来说)事实上并不一定是件好事。<br />
<br />
共享文件的功能绝对是利弊兼备的。文件共享能够让用户们在不用管理员帮忙以及不占用文件服务器储存空间的情况下就某个工作开展协作。但是,不幸的是,它同样允许人们将一些不应该共享的文件共享(例如侵权的 MP3 文件)。另外,网络共享提供了进入计算机的便捷通道。如果你共享了一个文件夹而没有正确地设置共享权限,那么……。<br />
<br />
那么脚本是否能提示你计算机上是否有共享文件呢?你猜猜看:<br />
<br />
strComputer = "."<br />
Set objWMIService = GetObject("winmgmts:\\" & strComputer &<br />
"\root\cimv2")<br />
Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")<br />
For each objShare in colShares<br />
Wscript.Echo "Name: " & objShare.Name<br />
Wscript.Echo "Path: " & objShare.Path<br />
Wscript.Echo "Type: " & objShare.Type<br />
Next<br />
<br />
当然,许多机构都会选择彻底不共享文件,至少在客户端机器上是这样的。如果你也做了同样的决定,那么你就会发现脚本在这个问题上会很有用。Security Analyzer 会告诉你是否在计算机上找到了共享文件;但是,最后还是需要你连接到各台计算机上取消各个共享文件。而脚本不仅仅会识别出共享的文件夹,它还能够同时取消这些文件夹的共享。例如,这里有一段能够取消所有类型为 0 的文件共享(我们稍后就会解释这一点):<br />
<br />
strComputer = "."<br />
Set objWMIService = GetObject("winmgmts:\\" & strComputer &<br />
"\root\cimv2")<br />
Set colShares = objWMIService.ExecQuery _<br />
("Select * from Win32_Share Where Type = 0")<br />
For each objShare in colShares<br />
objShare.Delete<br />
Next<br />
<br />
注意: 别慌,虽然这个方法叫做删除,但是它只是删除共享功能(也就是说,它只是停止在网络上共享这个文件夹而已)。虽然我们认为完全删除它们也是禁止在网络上共享它们的一条途径,但是它不会正真删除文件夹或者文件夹中的任何内容。<br />
<br />
那么为什么是类型为 0 的文件呢?在 WMI 中,一个类型为 0 的共享文件代表的是一个普通的旧的共享文件。当然还有其它的共享文件,最常见的就是管理级共享文件(如C$)。前述脚本能够在分别保留其它共享文件(如管理级共享文件)的同时,停止共享普通文件夹。如果你要停止所有的共享文件,你只要不将 Where 语句包含在查询语句里即可:<br />
<br />
Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")<br />
<br />
注意: 那么共享权限呢?如上文说到的,我们将会在以后的专栏中讨论。<br />
<br />
任务15:检查 Windows 版本<br />
<br />
安装了 Service Pack 1 意味着什么?如果你运行的是 Windows XP,那么说明你紧跟时代步伐,但是如果你使用的是 Windows 2000 的话,就说明你已经落伍了。(Windows 2000现在已经发展到 Service Pack 4 了)。这说明,如果你不知道计算机运行的是什么 Windows 版本的话,脚本返回的某些信息是没有意义的。这里就有一段脚本说明这一点:<br />
<br />
strComputer = "."<br />
Set objWMIService = GetObject("winmgmts:\\" & strComputer &<br />
"\root\cimv2")<br />
Set colOperatingSystems = objWMIService.ExecQuery _<br />
("Select * from Win32_OperatingSystem")<br />
For Each objOperatingSystem in colOperatingSystems<br />
Wscript.Echo objOperatingSystem.Caption, objOperatingSystem.Version<br />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -