目录导航
同事和客户经常来到我的(虚拟)办公桌前,向我提出以下问题:“我知道Windows 系统上安装了哪些补丁 ( KB ),但我怎么知道它面临哪些风险?”。这是一个很好的问题,我相信还有更多的人在测试客户的环境或在OSCP培训实验室工作时有同样的疑问。挑战在于,通过简单地查看已安装KB的列表,并没有简单的方法来了解系统暴露于哪些漏洞。
在本博客中,我们将了解 Windows 版本控制的工作原理,然后完成从本地或远程系统获取 Windows 版本信息和已安装KB列表的步骤。有了这些信息,我们就能够快速识别他们正在攻击的系统的漏洞,并在可用时使用漏洞来扩展他们的立足点。这将帮助我们快速评估系统面临的风险。在Windows开拓建议者-下一代的工具wes.py
和missingkbs.vbs
我尽可能高效的开发将支持识别过程。
在深入研究如何识别丢失的KB 之前,让我们首先了解一些有关 Windows 版本如何工作的上下文。
windows操作系统
在其 Windows操作系统中,Microsoft 提供了客户端和服务器两种变体。这些变体共享相同的内核,但针对不同的目的。服务器变体设计用于多种角色,如域控制器、Web 服务器和虚拟化主机,允许在非常强大的硬件上使用。客户端变体专为家庭、学校和企业用户的日常使用而设计,用于文本处理、网页浏览和玩游戏等用途。
客户端和服务器操作系统的新版本都会定期发布,在撰写本文时,Windows 11 和 Windows Server 2022 分别是操作系统的最新版本. 以前的版本是(降序)Windows 10(内部版本 1809)/Server 2019、Windows 10(内部版本 1607)/Server 2016、Windows 8.1/Server 2012 R2、Windows 8/Server 2012、Windows 7/Server 2008 R2、Windows Vista /Server 2008 和 Windows XP/Server 2003 [R2]。Windows 版本的完整列表可在 Wikipedia 1 上找到。
除了这两种变体之外,Microsoft 还在客户端和服务器变体中区分了不同的版本。两种变体都有多个版本,具体取决于变体的功能2、许可限制和更新周期以及支持3 4 5。在此博客中,重点将主要放在 Windows 10 及其服务器变体 Windows Server 2016 及更高版本上。
由于 Microsoft 不会永远支持操作系统,因此仍然支持的操作系统和版本以及生命周期结束的操作系统和版本存在滑动时间窗口。一旦产品生命周期结束,Microsoft 将不再向操作系统提供安全更新,因此将来发现的任何漏洞都不会再修补,尽管在极少数情况下会例外。此类例外之一是针对生命周期结束的 Windows XP、8 和 Windows Server 2003 的安全更新,以缓解永恒之蓝漏洞6. 根据 Windows 版本的不同,有三个更新渠道,它们在添加新功能的速度方面有所不同,并且与支持的长度直接相关。渠道中的每个版本都可以被视为一个里程碑,在此里程碑,新功能被添加到操作系统中。
首先要执行的良好检查是确定操作系统是否仍受支持。这可以通过在 Lifecycle 文档网站上搜索您遇到的 Windows 版本来检查。
此网站的 URL 是:https://docs.microsoft.com/en-us/lifecycle/products/?products=windows。

搜索 Windows 10 的示例:
https://docs.microsoft.com/en-us/lifecycle/products/?products=windows&terms=Windows%2010
发布渠道
Windows 10 的消费者版(家庭版和专业版)只有18 个月的支持,而 Windows 10 的商业版(企业版和教育版)在秋季发布时有30 个月的支持期。这些 Windows 10 版本每 6 个月发布一次,是所谓的半年频道 ( SAC ) 的一部分。除了 Windows 10 的消费者和商业版本之外,还有一个特殊版本旨在用于ATM和医疗设备等专业环境。此版本提供10 年支持,每 2-3 年发布一次,作为长期服务渠道 ( LTSC ) 的一部分。
在 Windows Server 的情况下,也有两个版本。附加一年的 Windows Server(Windows Server 2016、Windows Server 2019 等)是LTSC 的一部分,每 2-3 年发布一次,并提供 10 年的支持。另一个 Windows Server 版本附加有发布名称,并且是SAC 的一部分,提供 18 个月的支持5。此类SAC版本的一个示例是 Windows Server, build 2004。SAC版本不包括桌面体验功能(Windows Server 的图形 UI)7。
下表列出了各种渠道的支持时长。
渠道 | 功能更新 | 支持 | 备注 |
---|---|---|---|
内部计划 | 一旦发布了新功能;这包括测试版/测试版 | 18个月 | Insider 计划再次分为三个阶段:快速、慢速和发布预览 |
半年频道 ( SAC ) | 每 6 个月 | 18 个月(+12 个月) | 以前称为 Current Branch ( CB )。如果企业版和教育版秋季发布,则额外提供 12 个月的支持。这个秋季版本以前称为 Current Branch for Business ( CBB ) |
长期服务渠道 ( LTSC ) | 每 2-3 年 | 10年 | 以前称为长期服务分支机构 ( LTSB )。可从此处获得的LTSC版本列表8 |
这些版本以前被命名为 YYMM,其中 YY 是一个 2 位数的年份,然后是 MM,它是一个 2 位数的月份,例如 1909 表示 2019 年 9 月版本。从 2020 年的 Windows 10 秋季版本开始,这已更改为YYH1/YYH2 半年形态9 . 这意味着 2021 年 5 月的 Windows 10 版本被称为 21H1。这些版本的名称用于各种工具的输出,这些工具在 Windows 中显示操作系统版本信息,我们将在后面的部分中介绍。
从发布的那一刻起,支持的月数(或在LTSC 的情况下为年)开始计算。可以通过 Windows 更新、Microsoft 更新目录10和 Windows Server 更新服务 ( WSUS )下载各种渠道中的定期发布的更新。此外,.iso
还发布了磁盘映像以进行干净部署。
安全更新
现在很清楚如何确定特定操作系统版本是否受支持或生命周期结束,是时候查看安全更新了。尽管在出现紧急漏洞的情况下,安全更新可能会在每月常规计划之外部署,但 Microsoft 通常会在每个月的第二个星期二发布安全更新。这一天被称为更新星期二11,但通常这一天也被称为补丁星期二。
在 Microsoft 世界中,每个安全更新(以及非安全更新)都可以使用知识库 ( KB ) 文章 ID 进行识别。此KB编号可在 Microsoft 安全响应中心 ( MSRC ) 安全更新指南12 中使用,以获取有关某个漏洞的可利用性的更多信息。在 Microsoft 帮助页面上有关于安全更新的更多信息,并且 Microsoft 更新目录10提供了下载安全更新安装文件和获取有关取代KB 的信息的链接。除了KB之外,这些安全更新也称为修补程序和补丁。在本博客中,这些名称可以互换使用。
下表列出了 Microsoft 围绕安全更新提供的各种资源。
名称 | 网址 | 信息 |
---|---|---|
MSRC安全更新指南 | https://msrc.microsoft.com/update-guide | 最新的名单的CVE和相关的知识库系统为微软产品有关的可利用性,链接细节KB文章和下载链接的安全更新 |
微软帮助页面 | https://support.microsoft.com/help/ [KBID] | 有关安全更新修复的内容、可能导致的潜在问题以及如何获取更新的说明的高级信息 |
微软更新目录 | https://www.catalog.update.microsoft.com/Search.aspx?q= KB [KBID] | 提供各种 Windows 版本的安全更新的下载,并在包详细信息选项卡中提供有关哪些先前更新被此更新取代或取代此更新的信息 |
确定已安装的安全更新
作为黑客,我们想确定某个系统是否缺少安全更新,如果是,请记下它,甚至使用漏洞来滥用漏洞并获取访问权限或升级。在能够确定缺少哪些安全更新之前,首先需要结合当前安装的补丁的操作系统版本的详细信息。
有多种方法可以从本地系统和远程系统检索此信息,前提是运行该命令的帐户具有访问远程系统的足够权限。根据方法,使用相同的命令或不同的命令获取有关操作系统版本和安装的安全补丁的信息。此外,GUI工具一样winver.exe
,msinfo32.exe
和查看安装的更新在部分appwiz.cpl
被内置到Windows,但这些工具的信息不容易被导出到在稍后阶段要处理的文件,所以我们不会专注于这些工具。
systeminfo.exe
systeminfo.exe
是自最早版本的 Windows 以来内置于 Windows 的实用程序。此工具列出已安装的补丁程序以及 Windows 版本,并且还能够从远程系统收集此信息。要从远程系统获取信息,/S
可以使用该参数。当前进程所运行的身份应该对远程系统具有权限,或者需要使用/U
和/P
参数提供凭据。此命令严重依赖 Windows Management Instrumentation (WMI) 来收集本地和远程系统上的信息。
WMIC.exe
WMIC.exe
是 WMI 命令行实用程序,它允许在本地和远程查询 WMI 和调用 WMI 中的函数。正如 systeminfo.exe 实用程序段落中所讨论的,WMI 提供的类在查询时会列出操作系统的详细信息和已安装的安全更新。这些类分别是都驻留在命名空间中的Win32_OperatingSystem
类和Win32_QuickFixEngineering
类root\CIMv2
。该WMIC.exe
实用程序为这些类提供别名,即OS
和QFE
,但也可以使用完整的类名。
PowerShell cmdlets
PowerShell 提供Get-ComputerInfo
和Get-HotFix
cmdlet 分别获取本地计算机的信息,并列出本地和远程系统上已安装的修补程序。该Get-ComputerInfo
cmdlet 是从 PowerShell 5.1 版添加的。这两个命令的底层再次使用 WMI 来获取相关信息。的Get-ComputerInfo
和Get-HotFix
小命令可以使用通过WinRM的远程系统上执行Invoke-Command
小命令,但是这是本博客的范围之外。
通过PowerShell的WMI
除了使用该WMIC.exe
实用程序,还可以使用 PowerShell 的内置Get-WmiObject
cmdlet(或另外使用Get-CimInstance
PowerShell 版本 3 中的cmdlet)。再次使用这些 cmdlet Win32_OperatingSystem
,Win32_QuickFixEngineering
可以在本地和远程查询类和类。如果您需要在红队演习期间秘密连接此信息,NoPowerShell .NET 二进制文件也支持这些 cmdlet 。
非本地工具
除了内置的 Windows 实用程序和 PowerShell cmdlet 之外,还有一些工具也能够获取操作系统版本信息和已安装的安全更新。此类工具的两个示例srvinfo.exe
是 Windows Server 2003 Resource Kit 13和psinfo.exe
14的一部分,后者是 Sysinternals 套件的一部分,现在由 Microsoft 维护。最后,作为missingkbs.vbs
Windows Exploit Suggester – Next Generation ( WES-NG ) 工具一部分的实用程序不仅会列出已安装的补丁,还会准确地确定缺少的补丁。此实用程序将在Microsoft 更新部分进行广泛讨论。
下表总结了上述所有命令,其中二进制实用程序具有.exe
扩展名,而其他命令是 PowerShell cmdlet。
操作系统版本 | 安全更新 | 本地 | 远程 | 笔记 |
---|---|---|---|---|
X | X | systeminfo.exe | systeminfo.exe /S MYSERVER | 可选地提供/U MyUser 和/P MyPassword 参数。在Windows Server 2003(也许其他OS的版本),systeminfo.exe 可能无法列出所有已安装KB的,如果安装的数KB的是可以在这里找到这个问题在微软200条15。 |
X | WMIC.exe OS | WMIC.exe /node:MYSERVER OS | ||
X | WMIC.exe QFE | WMIC.exe /node:MYSERVER QFE | ||
X | X | Get-ComputerInfo | 不适用 | OsHotFixes 属性中可用的已安装补丁列表。从 PowerShell 5.1 可用。 |
X | Get-HotFix | Get-HotFix -ComputerName MYSERVER | ||
X | Get-WmiObject Win32_OperatingSystem | fl * | Get-WmiObject -ComputerName MYSERVER Win32_OperatingSystem | fl * | ||
X | Get-WmiObject Win32_QuickFixEngineering | Get-WmiObject -ComputerName MYSERVER Win32_QuickFixEngineering | ||
X | / | srvinfo.exe | srvinfo.exe \\MYSERVER | 来自 Windows Server 2003 资源工具包13。在 Windows 10(可能还有更早的操作系统)上,修补程序列表不准确。 |
X | / | psinfo.exe -h | psinfo.exe -h \\MYSERVER | Sysinternals 套件的一部分14.-h 列出已安装修补程序的标志似乎不适用于 Windows 10(可能还有更早的操作系统)。 |
X | X | cscript.exe missingkbs.vbs | 不适用 | 使用WES-NG的missingkbs.vbs 实用程序列出缺失的补丁。此实用程序将在Microsoft 更新部分进行广泛讨论。 |
为了进一步处理,将上述实用程序和 cmdlet 输出的信息存储在文件中很有用。这可以通过将工具的标准输出 (STDOUT) 重定向到文件来完成。.exe
从命令提示符 ( cmd.exe
)启动 ( ) 实用程序时,可以通过> myfile.txt
在命令末尾附加来实现。例如,在 的情况下systeminfo.exe
,请使用以下命令行。
systeminfo.exe > systeminfo.txt
在 PowerShell 的情况下,>
可以使用重定向器符号 ( ) ( Get-HotFix > hotfixes.txt
) 或者可以将输出通过管道传输到Out-File
cmdlet,可选择使用-Encoding
参数提供需要使用的编码类型。此外,如果只需要来自特定属性的数据,则可以使用ForEach-Object
cmdlet(或 alias %
)指定此属性,然后通过管道传输到Out-File
cmdlet,例如:
Get-HotFix | % HotFixID | Out-File -Encoding ascii hotfixes.txt
识别丢失的安全更新
收集到 Windows 版本信息和已安装的安全更新后,下一步是确定缺少哪些安全更新。可以将上一节中创建的文件复制到本地以进行进一步调查,以确定漏洞和潜在的可用漏洞。
如安全更新部分所述,Microsoft 更新目录10提供了有关KB的替代信息。可以查找每个KB并确定该KB已被哪些较新的KB取代,并依次检查这些KB是否也已以递归方式安装。然而,这将导致大量工作遍历所有KB并检查它们是否已被取代。这就是我开发的 Windows Exploit Suggester – Next Generation ( WES-NG ) 16实用程序来拯救的地方。WES-NG使用MSRC数据集来识别各种KB之间的替代链接,并通过通用漏洞和暴露 ( CVE ) ID将这些与可能可用于漏洞的潜在漏洞连接起来。稍后将在数据集部分详细了解这些数据源。

WES-NG默认包含在 BlackArch Linux 渗透测试发行版和存储库中17,但也可以使用 Python 的 pip 实用程序 ( )在任何其他操作系统上轻松获取,pip install wesng
或者只需克隆WES-NG存储库:
git clone https://github.com/bitsadmin/wesng --depth 1
Windows Exploit Suggester – 下一代
WES-NG的wes.py
脚本是一个 Python 2/3 工具,它使用漏洞利用定义文件并根据操作系统版本和已安装的补丁列表检查缺少的补丁。WES-NG随后自动迭代被取代的补丁链。要开始使用wes.py
,首先需要使用--update
(简写:)-u
参数下载最新的定义文件,该参数会将最新definitions.zip
文件下载到当前目录。接下来,wes.py
可以使用先前提取的systeminfo.txt
文件和可选qfe.txt
文件执行,并将已安装的KB列表作为参数。有关所有受支持参数的完整列表,包括各种示例,请执行wes.py --help
(简写:)-h
。
执行时,wes.py
将首先从文件中确定操作系统版本systeminfo.txt
并收集为该操作系统版本发布的所有KB。从这个列表中的所有知识库系统被安装在系统中被删除,其中包括知识库系统已取代由安装替代的KB。此步骤以递归方式执行,因此被安装的KB取代的完整KB链将被删除。验证适用于操作系统版本的所有KB 后,只有未安装的KB会列为缺失KBdefinitions.zip
. 最后,每KB的的CVE标识,如果这将减轻KB安装。然后列出这些CVE,包括以下信息。
属性 | 描述 |
---|---|
日期 | KB 的发布日期yyyyMMdd 格式 |
CVE | 系统易受攻击的CVE |
受影响的产品 | 操作系统版本 |
受影响的组件 | 系统上易受攻击的软件组件 |
严重性 | CVE 的严重性 |
影响 | CVE被利用时对系统的影响 |
exp | 链接到 PoC 漏洞利用代码,以防它是公开可用的 |
过滤
此外,还可以过滤WES-NG输出中的漏洞。例如,如果攻击者对可能导致远程代码执行的漏洞和/或仅具有可用漏洞利用代码的漏洞感兴趣,这将非常有用。为此,可以分别使用--impact "Remote Code Execution"
(shorthand: -i
) 和--exploits-only
(shorthand: -e
) 参数。此外,还可以使用--hide
参数隐藏某些产品的结果,或者使用--severity
(简写:)-s
参数可以仅列出具有特定严重性的结果。要获得包括示例在内的参数的完整概述,请检查--help
命令的输出,该输出也在CMDLINE.md 中列出。
WES-NG默认将结果输出到控制台。然而,为了进一步分析,WES-NG还支持使用--output
(shorthand: -o
) 参数将结果以 CSV 格式存储到磁盘,例如:
wes.py systeminfo.txt -o srv01.csv
请参阅下面的动画,从收集操作系统版本和丢失的补丁到使用WES-NG识别丢失的补丁,包括使用描述的一些过滤器和 csv 输出选项。
.
消除误报
当您查看WES-NG的结果时,不幸的是,它也报告了误报。例如,即使在完全打补丁的系统上,WES-NG可能仍会显示一些KB丢失。这是因为WES-NG用来编译其定义的MSRC提要经常包含有关KB取代的不完整信息。
要考虑的另一点是WES-NG假定已安装所有功能。例如,如果systeminfo.exe
检查未安装任何角色和功能的普通 Windows Server的输出文件,它可能会报告操作系统上未安装KB 的IIS 漏洞。这是因为除了操作系统版本和安装的KB 之外,WES-NG没有关于安装了哪些角色和功能的信息。因此,可以安全地忽略未安装的组件中报告的漏洞。
为了消除假阳性结果,有多种方法可用。
务实之道
如前所述,安全更新每月发布一次。在检查系统是否缺少补丁时,一种实用的方法是简单地检查系统上安装的最新KB的发布日期,然后假设在那之后没有安装新的更新。如果由于MSRC取代的问题仍然将旧的KB列为缺失,可以很安全地假设这些可能是误报,因为已经安装了较新的KB。wes.py
‘s --usekbdate
(shorthand: -d
) 标志将执行这些步骤并从输出中排除旧的假定丢失的KB。例子:
wes.py systeminfo.txt -d
手动验证
如果输出需要更准确,另一种选择是执行WES-NG,然后在 Microsoft 更新目录网站上的输出末尾手动验证丢失的KB列表。这可以通过查找丢失的KB并确定哪些KB已取代此KB以及该KB是否实际安装在系统中来完成。如果是这样,WES-NG报告为丢失的KB可以明确指定为已安装,因此 WESN-NG 不会列出系统在未安装KB时暴露的漏洞。这种方式是MSRC所缺少的取代数据集被绕过。在WES-NG 中,可以使用 -p 参数将知识库提供给 wes.py,例如wes.py systeminfo.txt -p KB4487029
。对每个可能丢失的KB重复此过程,其中-p
参数允许通过使用空格分隔多个KB来指定多个KB,例如-p KB4487029 KB4345421
. 对于手工验证更详细的描述WES-NG的输出,见消除误报页面在WES-NG的维基。
自动验证
因为手动验证仍然是一个乏味的过程,@DominicBreuker贡献了一个有用的功能,通过解析网站和自动遍历链来自动化在 Microsoft 更新目录中查找取代的过程。可以通过向脚本提供--muc-lookup
参数来使用此功能wes.py
。在根据MSRC数据集确定缺失的补丁后,它将获取生成的缺失补丁并在 Microsoft 更新目录中自动验证每个补丁。
除了使用 Microsoft 更新目录手动和自动验证取代之外,还有一种完全不同的方法来识别丢失的补丁,下一节将对此进行介绍。
微软更新
识别丢失KB 的一种完全不同的方法是使用 Microsoft 更新。无需通过确定已安装的安全更新部分中描述的方式或其他方式获取操作系统版本和当前安装的版本,而是可以使用 Windows 自己的功能来确定当前系统中仍缺少哪些KB。systeminfo.exe
丢失的kbs.vbs
Windows Update 控制面板小程序或 Windows Update 现代控制面板页面能够列出丢失的KB,但重新输入结果可能很乏味,并且它需要一个可能不可用的 GUI。出于这个原因,脚本已经被添加到WES-NG的资料库,以便获得在命令行所需要的信息:missingkbs.vbs
。
可以提供列出丢失KB的结果文件,以wes.py
使用--missing
(简写:)-m
参数准确识别系统易受攻击的CVE,从而规避MSRC提供的不完整取代信息的所有问题。此外,与使用 中的已安装补丁列表相比systeminfo.exe
,该missingkbs.vbs
实用程序还仅列出已安装功能的缺失KB。
为了识别丢失的KB,该missingkbs.vbs
实用程序使用库中Microsoft.Update.Session
实现的COM 对象wuapi.dll
。为了能够使用此 COM 对象的功能,执行该missingkbs.vbs
实用程序时需要提升的命令提示符。有关所有受支持参数的完整列表,包括各种示例,请执行cscript missingkbs.vbs /Help
(简写:)/?
。
在missingkbs.vbs
不带参数的情况下执行时,它将使用在线 Windows 更新服务器,或者如果配置了在企业环境中经常使用的WSUS服务器。由于WSUS服务器能够阻止其客户端的更新,因此WSUS服务器可能会报告系统没有缺少任何补丁,而实际上却缺少补丁。此外,如果系统没有(直接)连接到 Internet,能够检查任何丢失的KB仍然很有用。
因此,该missingkbs.vbs
实用程序可以选择使用 Windows Update 脱机扫描文件,以便能够根据该文件确定丢失的KB,而不是使用 Microsoft Update/ WSUS服务器。可以从以下 URL 在连接 Internet 的系统上下载大约 1 GB 的扫描文件:
download.windowsupdate.com/microsoftupdate/v6/wsusscan/wsusscn2.cab。
或者,也可以使用missingkbs.vbs
实用程序通过/D
参数下载此文件。接下来,wsusscn2.cab
可以将该文件与该missingkbs.vbs
实用程序一起复制到无法访问 Internet 的系统中。可以从提升的命令提示符启动该missingkbs.vbs
实用程序,并cscript.exe
提供/Offline
(简写/F
:)参数以使其使用之前下载的扫描文件:cscript missingkbs.vbs /F
。如果需要,可以使用/I
参数提供扫描文件的完整路径,例如:
cscript missingkbs.vbs /F /I:E:\tmp\wsusscn2.cab
前面提到的 COM 对象将被初始化并指示使用扫描文件来识别本地系统上任何丢失的KB。执行后,丢失的KB列表将打印在控制台中,并存储在missing.txt
当前目录的文件中。
C:\>cscript missingkbs.vbs
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
Windows Exploit Suggester: Missing KBs Identifier v1.0
https://github.com/bitsadmin/wesng/
[I] Windows Update online is used
[+] Identifying missing KBs...
[+] List of missing KBs
- KB4049411: Update for Windows 10 Version 1607 for x64-based Systems (KB4049411)
- KB4033631: Update for Windows 10 Version 1607 for x64-based Systems (KB4033631)
- KB4103720: 2018-05 Cumulative Update for Windows 10 Version 1607 for x64-based Systems (KB4103720)
- KB4485447: 2019-02 Servicing Stack Update for Windows 10 Version 1607 for x64-based Systems (KB4485447)
- KB4023057: 2020-06 Update for Windows 10 Version 1607 for x64-based Systems (KB4023057)
- KB4480730: 2020-06 Update for Windows 10 Version 1607 for x64-based Systems (KB4480730)
- KB890830: Windows Malicious Software Removal Tool x64 - v5.90 (KB890830)
- KB2267602: Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.341.548.0)
[+] Saved list of missing updates in "C:\missing.txt"
[+] Done!
C:\>
wes.py -m
根据缺失的KB列表,确定系统面临的安全漏洞仍然具有挑战性。这就是为什么missing.txt
现在可以输入结果文件wes.py
以获得这种洞察力的原因。从 1.00 版开始,已经添加了--missing
(简写:)-m
和--os
参数wes.py
以促进这一点。
因为missing.txt
只包含系统中缺失的KB列表,所以还需要指定操作系统。最简单的方法是首先wes.py
仅使用-m
参数执行:wes.py -m missing.txt
。随后从在输出可能的运行系统的列表相关操作系统的ID可以被拾取并且wes.py
可以再次被执行,现在还提供所述操作系统ID: wes.py -m missing.txt --os 2
。
在某些情况下,WES-NG没有关于丢失的KB 的信息。在这种情况下,可以使用安全更新部分表格中列出的 Microsoft 帮助页面获取有关KB 的信息。
识别漏洞的实际部分到此结束。我们查看了从输出中获取已安装KB的列表systeminfo.exe
以及missingkbs.vbs
获取丢失KB的更可靠的实用程序。在这两种情况下,我们观察到两个输出都可以提供给WES-NG,然后WES-NG列出CVE,如果可用,包括漏洞,系统容易受到攻击。
下一节将更深入地了解WES-NG用于收集所有这些信息的数据源。
数据集
该wes.py
脚本使用definitions.zip
托管在 GitHub 上的 wesng 项目页面上的文件。这些定义大约每周更新一次,包括最新的KB、CVE和漏洞利用链接。因此,还建议通过wes.py -u
按照识别丢失的安全更新部分中所述运行来定期更新定义的本地副本。存储在定义文件中的信息被 wesng 存储库文件夹中的三个collect_*.ps1
PowerShell 脚本收集并随后合并collector
。本节将讨论三个数据源。
安全公告
Microsoft 一直以 Microsoft 网站上的公告和Microsoft 下载中心19 中的Excel 文件的形式发布所谓的安全公告18。这些内容一直发布到 2017 年初,当时 Microsoft 继续使用Microsoft 安全响应中心 ( MSRC )的安全更新指南12来发布有关漏洞的信息。此更改已于2016 年底在MSRC博客上公布20。那些在 2017 年之前完成过OSCP培训或其他与评估 Windows操作系统补丁级别相关的工作的人,可能还记得 Windows Exploit Suggester 21BulletinSearch.xlsx
作者是来自 GDSSecurity(现在是 Aon 的网络实验室)的 Sam Bertram,它使用了该BulletinSearch.xlsx
文件。由于MSRC的安全更新指南中未包含较旧的漏洞,因此WES-NG的收集器包含collect_bulletin.ps1
用于收集此信息并将其存储为bulletin.csv
输出文件的脚本。
海洋研究中心
在MSRC的安全更新指南是安全公告的继任者,并同时提供了web前端12以及一个API 22提供有关安全漏洞的信息。WES-NG的收集器在其collect_msrc.ps1
收集器脚本中使用此 API,其中收集相关属性并将其存储在MSRC.csv
输出文件中。这些属性包括KB ID、CVE ID、受影响的产品、风险信息和被取代的KB ID。
NVD
由美国国家标准与技术研究院 ( NIST )提供的国家漏洞数据库 ( NVD ) 23包含常见漏洞和暴露 ( CVE ) 记录列表。这些记录提供了一个唯一的 ID,其中包含一些关于已知安全漏洞的详细信息。详细信息包括CVE适用的供应商、名称和版本、通用漏洞评分系统 (CVSS) 分数,其中详细说明了漏洞利用的难易程度以及利用的影响。最后,它提供了有关漏洞和任何可用的漏洞利用概念证明 (PoC) 代码的更多详细信息的参考。
由于CVE标准被软件和安全供应商广泛采用,Microsoft 还添加了对由KB(以及以前的安全公告)解析的CVE ID 的引用。因此,WES-NG的收集器脚本使用这些CVE作为来自NVD数据集的信息和 Microsoft 数据集的信息之间的链接,并通过指向 PoC 漏洞利用代码的链接(如果可用)来丰富知识库信息。collect_nvd.ps1
自定义
如前所述,不幸的是,MSRC数据集经常包含不完整的取代信息。出于这个原因,可以通过向Custom.csv
文件添加行来手动补充它。例如,已为 MS17-010(永恒之蓝)KB 24添加了自定义取代信息,因为MSRC不完整,而且人们通常想要验证某个系统是否存在风险。此外,可以在那里添加额外的漏洞利用链接和漏洞。然而,更好的选择是向 MITRE 25提交更新请求,以便丰富许多公司和个人使用的数据集,而不仅仅是WES-NG工具的数据集。
在收集器过程结束时,丰富的数据集definitions.zip
与定义wes.py
脚本和Custom.csv
文件的最低要求版本的文本文件一起存储在文件中。然后将此定义文件上传到WES-NG GitHub,在使用该标志更新WES-NG时将获得该文件-u
。

结论
本博客首先解释了 Windows 操作系统 ( OS ) 的生命周期。接下来,讨论了在本地或远程系统上收集有关 Windows操作系统和已安装或缺少的KB 的信息的各种方法。此信息随后被用于确定系统暴露于哪些安全漏洞以及这些漏洞可能已经存在的任何公共漏洞。工具(WES-NG的wes.py
和missingkbs.vbs
)相继出台,使这个过程更加高效。最后,解释了WES-NG工具的内部工作原理和局限性。
此博客和参考工具专注于识别 Windows操作系统中缺失的补丁和漏洞。但是,可以通过对系统上安装和运行的补充软件进行额外评估来扩展此练习。此类软件可以是 Microsoft 服务器软件(如 Microsoft Exchange Server)、客户端软件(如 Microsoft Office)以及第三方软件(如 Adobe Reader)。使用系统上运行的软件的信息补充 Windows操作系统漏洞信息将提供对系统安全状态的准确透视。
参考
- 维基百科 – Microsoft Windows 版本列表 ↩
- Microsoft – 比较 Windows 10 版本 ↩
- Microsoft Docs – 长期服务频道 ↩
- Microsoft Docs – Windows Server 2022 标准版和数据中心版的比较 ↩
- Microsoft Docs – Windows Server 服务渠道 ↩ ↩ 2
- MSRC -客户指导WannaCrypt攻击 ↩
- Microsoft Docs – Windows Server 2019 – 桌面体验功能 ↩
- Microsoft Docs – Windows 10 Enterprise LTSC版本 ↩
- Microsoft Docs – Windows 10,版本 21H1 ↩
- Microsoft 更新目录 ↩ ↩ 2 ↩ 3
- Windows IT 专业人员博客 – Windows 10 更新服务节奏 ↩
- MSRC – 安全更新指南 ↩ ↩ 2 ↩ 3
- Windows Server 2003 Resource Kit 从 archive.org 下载 ↩ ↩ 2
- Sysinternals的中psinfo实用 ↩ ↩ 2
- Microsoft Docs – SystemInfo.exe 不显示 Windows Server 2003 中的所有更新 ↩
- GitHub – Windows Exploit Suggester-Next Generation ( WES-NG ) ↩
- BlackArch Linux的-所包含的工具列表 ↩
- Microsoft Docs – 安全公告 ↩
- Microsoft 下载中心 – Microsoft 安全公告数据 ↩
- MSRC博客 – 进一步推动我们对安全更新的承诺 ↩
- GitHub – Windows-Exploit-Suggester ↩
- MSRC – CVRF API ↩
- NIST – 国家漏洞数据库 ( NVD ) ↩
- Microsoft知识库-如何确定MS17-010安装 ↩
- 斜接 – 更新CVE记录 ↩
wesng工具
项目地址:
GitHub:https://github.com/bitsadmin/wesng
wesng介绍
Windows Exploit Suggester – Next Generation
简称 wesng
WES-NG 是一种基于 Windowssysteminfo
实用程序输出的工具,它提供操作系统易受攻击的漏洞列表,包括对这些漏洞的任何利用。支持 Windows XP 和 Windows 11 之间的每个 Windows 操作系统,包括它们的 Windows Server 对应版本。
在 bitsadm.in 网站上,可以使用有关 WES-NG 的深入博客来了解此工具:适用于黑客的 Windows 安全更新。
wesng下载地址
①GitHub:
https://github.com/bitsadmin/wesng.zip
②云中转网盘:
https://yzzpan.com/#sharefile=vUjA1glZ_18474
解压密码: www.ddosi.org
用法
使用
pip install wesng
或使用以下命令行下载 WES-NG :
git clone https://github.com/bitsadmin/wesng --depth 1
执行命令获取最新的漏洞数据库
wes.py --update
完整命令列表
C:\Users\ddosi.org\Desktop\wesng>wes.py
警告:root:chardet模块未安装。如果编码错误,请安装chardet
安装方法: pip3 install chardet
用法: wes.py [-u] [--definitions [定义]] [-p 安装的补丁[INSTALLEDPATCH ...]] [-d] [-e]
[--hide HIDDENVULN [HIDDENVULN ...]] [-i IMPACTS [IMPACTS ...]] [-s SEVERITIES [SEVERITIES ...]]
[-o [OUTPUTFILE]] [--muc-lookup] [--os [OPERATING_SYSTEM]] [-c] [-h] [--update-wes] [--version]
[-m [MISSINGPATCHES]] [-q [QFEFILE]]
systeminfo
Windows Exploit Suggester 1.02 ( https://github.com/bitsadmin/wesng/ )
位置参数:
systeminfo 指定systeminfo.txt文件
选项:
-u, --update 下载最新的cve列表
--definitions [DEFINITIONS]
定义压缩文件(默认:definition .zip)
-p INSTALLEDPATCH [INSTALLEDPATCH ...], --patches INSTALLEDPATCH [INSTALLEDPATCH ...]
除了systeminfo.txt文件中列出的补丁外,还需要手动指定已安装的补丁
-d, --usekbdate 过滤在最新安装的KB发布日期之前发布的KB的漏洞
-e, --exploits-only 只显示已知利用漏洞
--hide HIDDENVULN [HIDDENVULN ...]
隐藏漏洞,例如Adobe Flash Player和Microsoft Edge
-i IMPACTS [IMPACTS ...], --impact IMPACTS [IMPACTS ...]
只显示具有给定影响的漏洞
-s SEVERITIES [SEVERITIES ...], --severity SEVERITIES [SEVERITIES ...]
只显示具有给定严重性的漏洞
-o [OUTPUTFILE], --output [OUTPUTFILE]
将结果存储在一个文件中
--muc-lookup 如果已安装的修补程序在Microsoft更新目录中列出为,则隐藏漏洞
替换原始BulletinKB的修补程序
--os [OPERATING_SYSTEM]
在不使用此参数的情况下,从列表中指定操作系统或ID
-c, --color 以颜色显示控制台输出(需要termcolor库)
-h, --help 显示此帮助信息并退出
--update-wes 下载最新版本的wes.py
--version 显示版本信息
-m [MISSINGPATCHES], --missing [MISSINGPATCHES]
提供文件与从系统中丢失的补丁列表。可以生成该文件
using the WES-NG's missingpatches.vbs utility
-q [QFEFILE], --qfe [QFEFILE]
指定包含'wmic qfe'命令输出的文件
例如:
下载最新的定义
wes.py --update
wes.py -u
确定漏洞
wes.py systeminfo.txt
使用qfe文件确定漏洞。首先运行不带——OS参数的命令,列出操作系统
wes.py --qfe qfe.txt --os 'Windows 10 Version 20H2 for x64-based Systems'
wes.py -q qfe.txt --os 9
确定漏洞并输出到文件
wes.py systeminfo.txt --output vulns.csv
wes.py systeminfo.txt -o vulns.csv
确定明确指定KBs的漏洞以减少误报
wes.py systeminfo.txt --patches KB4345421 KB4487017
wes.py systeminfo.txt -p KB4345421 KB4487017
确定漏洞,过滤掉在最新安装的KB发布日期之前发布的KBs漏洞
wes.py systeminfo.txt --usekbdate
wes.py systeminfo.txt -d
明确指定定义文件确定漏洞
wes.py systeminfo.txt --definitions C:\tmp\mydefs.zip
只列出漏洞与利用,不包括IE, Edge和Flash
wes.py systeminfo.txt --exploits-only --hide "Internet Explorer" Edge Flash
wes.py systeminfo.txt -e --hide "Internet Explorer" Edge Flash
只显示有一定影响的脆弱性
wes.py systeminfo.txt --impact "Remote Code Execution"
wes.py systeminfo.txt -i "Remote Code Execution"
只显示出一定程度的漏洞
wes.py systeminfo.txt --severity critical
wes.py systeminfo.txt -s critical
根据丢失的补丁显示漏洞
wes.py --missing missing.txt
wes.py -m missing.txt
显示基于缺失补丁指定操作系统的漏洞
wes.py --missing missing.txt --os "Windows 10 Version 1809 for x64-based Systems"
wes.py -m missing.txt --os 2
验证对微软在线更新目录的替换
wes.py systeminfo.txt --muc-lookup
显示彩色输出
wes.py systeminfo.txt --color
wes.py systeminfo.txt -c
下载最新的WES-NG版本
wes.py --update-wes
C:\Users\ddosi.org\Desktop\wesng>

有两个选项可以检查丢失的补丁: a. missingkbs.vbs
在主机上启动以让 Windows 确定缺少哪些补丁 b. 使用 Windows 的内置systeminfo.exe
工具获取本地系统的系统信息,或者使用从远程系统获取systeminfo /S MyRemoteHost
,并将其重定向到一个文件:systeminfo > systeminfo.txt
根据步骤 3 中选择的方法执行 WES-NG:将missing.txt
文件作为输入:(wes.py --missing missing.txt
或wes.py -m missing.txt
) b. 以systeminfo.txt
文件为参数:wes.py systeminfo.txt
WES-NG 然后使用数据库来确定哪些补丁适用于系统以及当前暴露了哪些漏洞,包括漏洞利用(如果可用)。
由于 Microsoft 的 MSRC 提要提供的数据经常不完整并且由 报告误报wes.py
,@DominicBreuker 提供了--muc-lookup
参数以systeminfo.txt
根据 Microsoft 的更新目录验证文件中已识别的缺失补丁。此外,请务必查看Wiki 上的消除误报页面,了解如何解释结果。对于两个所有可用参数的概述missingpatches.vbs
和wes.py
检查CMDLINE.md。
收集器
此 GitHub 存储库会定期更新漏洞数据库,因此wes.py
使用该--update
参数运行会获取最新版本。如果需要手动生成带有修补程序信息的 .csv 文件,请使用/collector文件夹中的脚本来编译数据库。阅读每个脚本顶部的注释,并按照下面列出的顺序执行它们。执行这些脚本将生成 definition.zip。WES-NG 收集器从各种来源提取信息:
- Microsoft 安全公告数据:旧系统的知识库 [1]
- MSRC:Microsoft 安全响应中心 (MSRC) 的 Microsoft 安全更新 API:现代 Microsoft 更新的标准信息源 [2]
- NIST 国家漏洞数据库 (NVD):使用 Exploit-DB 链接补充漏洞 [3] 这些被合并到一个 .csv 文件中,该文件被压缩并托管在此 GitHub 存储库中。
基本原理
我开发 WES-NG 是因为虽然GDSSecurity 的 Windows-Exploit-Suggester对 Windows XP 和 Windows Vista 时代的操作系统运行良好,但 GDSSecurity 的 Windows-Exploit-Suggester 不适用于 Windows 11 和近年来发布的漏洞等操作系统。这是因为微软用 MSRC API [2] 替换了 GDSSecurity 的 Windows-Exploit-Suggester 完全依赖的 Microsoft 安全公告数据 Excel 文件 [1]。Microsoft 安全公告数据 Excel 文件自 2017 年第一季度以来未更新,因此无法检测到更高版本的操作系统和漏洞。感谢@gdssecurity,感谢这个伟大的工具,它为我们许多人服务了这么多年!