| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何验证我的本地用户帐户没有一个具有空密码?
如何验证我的本地用户帐户没有一个具有空密码?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-24 11:04:01
问:

你好,脚本专家!如何验证我的本地用户帐户没有一个具有空密码?

-- TB

答:

你好,TB。首先,应当指出你们当中至少一部分人不需要对你们域内的计算机做此项检查;因为域中使用了密码策略,该策略禁止使用空密码。(例如,您可能需要长度至少为 7 个字符的密码,这是一项防止任何人使用空密码的策略。)然而,对于没有密码策略的组织(工作组或家庭计算机),您可以使用如下的脚本来检查空密码:

On Error Resume Next



Set objNetwork = CreateObject("Wscript.Network")

strComputer = objNetwork.ComputerName



strPassword = ""



Set colAccounts = GetObject("WinNT://" & strComputer)

colAccounts.Filter = Array("user")



For Each objUser In colAccounts

    objUser.ChangePassword strPassword, strPassword

    If Err = 0 or Err = -2147023569 Then

        Wscript.Echo objUser.Name & " is using a blank password."

    End If

    Err.Clear

Next

当然,你们当中有些人看到这里可能会想“这真是一个短小精悍的脚本,使用它就没问题了。”但是,为什么您刚才没有运行某种查询来查找具有空密码的用户列表?这样做有一个充分的理由:没有办法运行这样一个查询。即使作为管理员,我们也不能编写一个检索用户密码的脚本;没有办法获得该信息。

因此,我们必须在这方面动动脑筋。然而,我们要做的是尝试使用 ChangePassword 方法更改用户的密码。ChangePassword 要求我们知道用户的当前密码;在此脚本中,我们将尝试使用一个空密码作为用户的当前密码。如果该脚本失败,则意味着该用户没有使用空密码。然而,如果该脚本成功,则只能意味着一件事情:该用户确实使用的是空密码。在该情况下,我们将回显该用户的名称。

若要实现此目的,我们先添加 On Error Resume Next 语句,创建 Wscript.Network 对象的一个实例,然后检索 ComputerName 属性的值;足够幸运的是,ComputerName 恰好是本地计算机的名称。将一个名为 strPassword 的变量设置为空字符串 (“”),然后使用下面这行代码绑定到本地计算机:

Set colAccounts = GetObject("WinNT://" & strComputer)

建立该连接后,接下来将应用一个筛选器以确保我们只处理用户帐户(我们不想在本地安全帐户管理器中发现的打印机、服务器、组或其他对象上浪费时间):

colAccounts.Filter = Array("user")

应用过滤器后,将为我们留下一个仅包含本地用户帐户的集合;接着,我们设置一个 For Each 循环以遍历该集合。对于集合中的每个帐户,调用 ChangePassword 方法,为第一个参数(当前密码)和第二个参数(新密码)都传递变量 strPassword:

objUser.ChangePassword strPassword, strPassword

然后,立即检查 Err 对象的值。如果 ChangePassword 成功,Err 将等于 0;这意味着该用户有一个空密码。或者,Err 可能等于 -2147023569;这意味着该方法将会成功,只是由于本地策略,自上次密码更改以来还未经过足够的时间。但是,因为该方法将会成功,所以我们知道该用户有一个空密码。如果其中一个条件为 True,我们将回显该用户的名称。

注意。是的,从技术上讲,我们也更改密码,尽管只是将其更改为空密码(即其当前值)。这意味着用户仍能够用空密码登录。如果需要,我们可以为传递给 ChangePasswor 的第二个参数输入值(而不是一个空字符串)。在该情况下,运行该脚本将为用户产生一个新密码(而不管第二个参数使用何值)。

然后,清除错误对象 (Err.Clear) 的值,再循环测试下一个帐户。

当然,您可以很容易地将此脚本修改为处理 Active Directory 帐户。这里有一个示例脚本,用于测试域 fabrikam.com 中的所有帐户:

On Error Resume Next



Const ADS_SCOPE_SUBTREE = 2



strPassword = ""



Set objConnection = CreateObject("ADODB.Connection")

Set objCommand =   CreateObject("ADODB.Command")

objConnection.Provider = "ADsDSOObject"

objConnection.Open "Active Directory Provider"

Set objCommand.ActiveConnection = objConnection



objCommand.Properties("Page Size") = 1000

objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 



objCommand.CommandText = _

    "SELECT AdsPath FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='user'"  

Set objRecordSet = objCommand.Execute



objRecordSet.MoveFirst

Do Until objRecordSet.EOF

    strPath = objRecordSet.Fields("AdsPath").Value

    Set strUser= GetObject(strPath)

    strUser.ChangePassword strPassword, strPassword

    If Err= 0 or Err = -2147023569 Then

        Wscript.Echo strUser.CN

    End If

    Err.Clear

    objRecordSet.MoveNext

Loop

如果您使用此脚本,那么请记住,它将尝试更改所有用户帐户的密码。如果您有数百或数千个帐户,则该脚本会花一小时,甚至更长时间才能运行完。那没什么不对的,只要知道就行了。

当然,您也可以将此脚本修改为测试其他密码。想知道是否有人具有一个“password”密码吗?那么,只需相应地设置 strPassword 的值:

strPassword = "password"

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    Microsoft索引服务查询验
    CSO们如何应对新技术的安
    普通企业如何应对黑客攻
    企业该如何防范由VoIP引
    浅谈IT如何实现企业的应
    黑客与正规企业是如何串
    基于SHA和一次性口令验证
    如何无限制申请Gmail 2.
    企业如何避免人为因素的
    社会工程学:如何利用黑客

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览