本文前提

被检测的计算机启用的powershell远程管理的功能;这是另外的课题,我之前的文章有专门介绍过,如果对这部分不太清楚的话可以翻翻我之前的博客文章。

【PowerShell】PowerShell 脚本批量检测公司服务器是否存在 WannaCry 漏洞_批量

关于本文

要使用 PowerShell 脚本检查计算机是否存在 WannaCry 漏洞,可以执行以下步骤:

  1. 检查操作系统补丁:WannaCry 漏洞主要影响未安装最新安全补丁的 Windows 系统。您可以使用 PowerShell 命令 Get-Hotfix -Id KB4012598 来检查是否安装了 MS17-010 安全补丁。如果返回结果为空,则表示未安装该补丁。
  2. 检查 SMBv1 协议状态:WannaCry 利用 SMBv1 协议进行传播。您可以使用 PowerShell 命令 Get-SmbServerConfiguration | Select EnableSMB1Protocol 来检查 SMBv1 协议的启用状态。如果返回结果为 True,则表示 SMBv1 协议已启用。
  3. 更新操作系统和软件:确保您的操作系统和安装的软件都是最新版本。及时安装操作系统和软件的安全更新和补丁可以修复已知的漏洞,并提高系统的安全性。
  4. 启用防火墙和安全软件:确保您的计算机上的防火墙已启用,并配置为阻止不必要的入站和出站连接。同时,安装并定期更新一款可靠的防病毒软件。

这里特别提醒下哦,这些步骤可以帮助您检查 WannaCry 漏洞的存在,并采取相应的措施来提高计算机的安全性。然而,最佳实践是综合使用多种安全措施,并定期进行安全性评估和更新。


实际上借助这个原理,可以扩展为任意想要检测的漏洞,只要您能确定漏洞特征;本文只是以疯狂肆虐的WannaCry为例


脚本原理


Get-Hotfix -Id KB4012598  # 有没有安装修复补丁


Get-SmbServerConfiguration | Select EnableSMB1Protocol     # 可以被利用的协议是否再使用中?


域环境下的漏洞扫描

此脚本将遍历计算机列表,并在每台计算机上执行检查 MS17-010 漏洞的命令。如果计算机已安装 KB4012598 补丁,则显示已修补;否则,显示存在漏洞。

$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name

foreach ($computer in $computers) {
    $result = Invoke-Command -ComputerName $computer -ScriptBlock {
        $hotfix = Get-HotFix -Id KB4012598 -ErrorAction SilentlyContinue
        if ($hotfix) {
            Write-Output "$env:COMPUTERNAME is patched"
        } else {
            Write-Output "$env:COMPUTERNAME is vulnerable"
        }
    }
    Write-Output $result
}


工作组环境下的漏洞扫描

这个脚本假设您已经将要扫描的计算机名称或IP地址列表保存在 C:\path\to\computerlist.txt 文件中。您可以将此文件路径更改为您实际使用的路径。

此脚本将遍历计算机列表,并在每台计算机上执行检查 MS17-010 漏洞的命令。如果计算机已安装 KB4012598 补丁,则显示已修补;否则,显示存在漏洞。

再三提醒:在执行此脚本之前,您需要确保已在每台计算机上启用 PowerShell 远程执行功能,并且已在防火墙中允许远程 PowerShell 连接。如果您使用的是 Windows 7 或 Windows Server 2008 R2 等旧操作系统,则还需要安装适当的 PowerShell 版本和更新。

$computers = Get-Content -Path "C:\path\to\computerlist.txt"

foreach ($computer in $computers) {
    $result = Invoke-Command -ComputerName $computer -ScriptBlock {
        $hotfix = Get-HotFix -Id KB4012598 -ErrorAction SilentlyContinue
        if ($hotfix) {
            Write-Output "$env:COMPUTERNAME is patched"
        } else {
            Write-Output "$env:COMPUTERNAME is vulnerable"
        }
    }
    Write-Output $result
}


【PowerShell】PowerShell 脚本批量检测公司服务器是否存在 WannaCry 漏洞_夏明亮_02

聪明的小伙伴们肯定可以按照这样的思路创造各种奇妙的脚本。