本文前提
被检测的计算机启用的powershell远程管理的功能;这是另外的课题,我之前的文章有专门介绍过,如果对这部分不太清楚的话可以翻翻我之前的博客文章。
关于本文
要使用 PowerShell 脚本检查计算机是否存在 WannaCry 漏洞,可以执行以下步骤:
- 检查操作系统补丁:WannaCry 漏洞主要影响未安装最新安全补丁的 Windows 系统。您可以使用 PowerShell 命令
Get-Hotfix -Id KB4012598
来检查是否安装了 MS17-010 安全补丁。如果返回结果为空,则表示未安装该补丁。 - 检查 SMBv1 协议状态:WannaCry 利用 SMBv1 协议进行传播。您可以使用 PowerShell 命令
Get-SmbServerConfiguration | Select EnableSMB1Protocol
来检查 SMBv1 协议的启用状态。如果返回结果为 True,则表示 SMBv1 协议已启用。 - 更新操作系统和软件:确保您的操作系统和安装的软件都是最新版本。及时安装操作系统和软件的安全更新和补丁可以修复已知的漏洞,并提高系统的安全性。
- 启用防火墙和安全软件:确保您的计算机上的防火墙已启用,并配置为阻止不必要的入站和出站连接。同时,安装并定期更新一款可靠的防病毒软件。
这里特别提醒下哦,这些步骤可以帮助您检查 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
}
聪明的小伙伴们肯定可以按照这样的思路创造各种奇妙的脚本。