万卷书   首页 > 电脑书籍 > 安全在线 > 利用远程注册表加强系统安全
 
 清单1 将返回值“Service Pack 6”并把它存储在 svServicePackVersion 中。然后,您可以知道这台机器上安装了 Service Pack 6。通过执行类似这样的各种查询,可能确定一台机器的配置以及在它上面安装了什么软件。

  当我们意识到可以对远程机器的注册表执行这些查询时,我们的实验室工作取得了突破性的进展。

  连接到远程注册表

  要通过脚本访问远程机器上的注册表,需要远程机器上的管理员特权。我们发现当运行我们的脚本时,拥有在远程机器上具有管理员特权的一个用户帐户并使用这个用户名和密码登录到脚本正在运行的这台机器是一个难题。

  假设在我们的 WSBI 测试环境中,有三台测试机器,使用第四台作为审计机器。在每台测试机器上,我们都需要添加一个用户帐户并赋予它管理员特权;我们将用户名命名为“auditor”并赋予它密码“angelus”。这是每台机器上需要手工执行的唯一操作。每台测试机器上的这些帐户现在都允许我们通过审计机器上运行的脚本来访问每台机器的注册表。

  现在假设我们用刚才创建的帐户(用户名“auditor”,密码“angelus”)登录到 AuditMachine。下一步是重新运行清单 1 上的脚本,但是这次不检查本地注册表,而是想知道机器“Gunn”的服务包级别,所以我们需要连接到它的注册表上。要做到这一点,我们使用命令 RegDBConnectRegistry。这个功能创建到远程注册表的连接。要连接到 Gunn,该命令类似于:

  RegDBConnectRegistry ("Gunn" , HKEY_LOCAL_MACHINE, 0 );

  把它放置在脚本中,那么我们就得到:

  清单2. 远程抽取机器 Gunn 的服务包级别

begin
RegDBConnectRegistry (";Gunn"; , HKEY_LOCAL_MACHINE, 0 );
svKey = ";SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";;
svName = ";CSDVersion";;
nvType = REGDB_STRING;
RegDBGetKeyValueEx (szKey, szName, nvType, svServicePackVersion, nvSize);
end;

  如果一切顺利的话,我们现在就能访问 Gunn 的注册表并抽取服务包级别。

  接下来,通过在 RegBConnectRegistry 命令中用表示其它两台机器的相应的名称替代“Gunn”,然后运行相同的过程;我们就可以抽取这两台机器的服务包级别。

  我们注意到,三次重复输入相同的代码效率很低,因此可以使用循环机制来轮流查询每台机器的注册表。需要输入的全部信息是每台机器的名称。这可以通过创建一个文本文件来完成,该文件中,每一行包含一个机器的名称。因此,假设我们已经创建了一个名为 machineList.txt 的文本文件,其中输入了我们希望查询的三台机器的名称,并将它保存在 C 盘的根目录下。现在我们可以进一步修改脚本以把这些机器名读取到一个列表结构中,并轮流连接到每台机器的注册表。
 
上一页 WanJuanShu 下一页