为了了解编写PoC所涉及的复杂性(并从中获得经验),可以进行补丁区分,并提供现实中易受攻击的示例进行实践。现在,请不要理会制作自己的易受攻击程序的想法。
对于差异化补丁,我看到一个操作系统可以处于3种状态,让我们以Windows 7为例:

纯状态(无服务)包,没有补丁)
部分补丁(未更新为最新发布的补丁)
完全补丁

方案

我的vmware / vbox系统在其中状态3(已完全修补)。
接下来,我转到Microsoft安全公告并选择一个漏洞(例如内核)。
现在我想恢复到有用的状态...

尽管它可能会在纯状态(1)上运行,但差异结果将更大或更难于发现问题。其次,最新漏洞的错误可能是先前的补丁程序/服务包引入的。解决此问题的新补丁?或者,如果更方便的话,从状态1到状态2。
update
我意识到我的问题并没有我以为我想的那么清楚,希望这可以澄清一下
我'我知道vmware / vbox的快照功能,但这不是我想要的。我真正的目标是

如何获取已更改的二进制文件的旧版本?
如何知道要还原到哪个版本?文件中有一些命名方案吗?

示例:

我的系统是最新的。
我在安全公告中找到了KB-XXXXX,提取它,它会给我一个名为abc_005.dll的更新后的.dll。现在,我想将我的系统置于一种状态下,即得到了dll的先前(脆弱)版本(例如abc_004.dll)。 <-我将如何做这部分?


评论

如果它们随着时间的推移将补丁分发到未知漏洞,或者将其与其他修补程序捆绑在一起,则您将不会轻易地捕获它们。

#1 楼

我认为有两种方法可以到达您想要的位置。考虑到您的方案,其中在完全更新的系统上具有KB修补程序。要恢复到以前的版本,请卸载该修补程序。

使用的Metasploit Unleashed类(仍在吗?)具有用于XP的命令,该命令可以卸载所有修补程序:

C:\>dir /a /b c:\windows$ntuninstallkb* > kbs.txt && for /f %i in (kbs.txt) do cd c:\windows\%i\spuninst && spuninst.exe /passive /norestart && ping -n 15 localhost > nul


我认为可以使您达到相同甚至最佳状态的另一种方法是安装操作系统的完全未修补版本(例如,从不安装Service Pack的MSDN安装)。从这里,您可以提取基本文件。对于已修补的版本,MSFT每月都会为ISO提供修补程序。您可以从此处提取修补的可执行文件。例如,这是本月安全更新的ISO。

评论


第一种方法是可以及时使用的,但最后一种是杀手answer!我检查了一下,可以将这些ISO至少恢复到2009年下半年(win7的发布日期),对于我而言,这已经足够了

– ixje
13年3月25日在7:03

亲爱的,我很高兴能帮到您。 :)

–mrduclaw
2013年3月25日19:11

#2 楼

VMWare提供了非常有用的快照功能,这使得在同一VM的不同状态之间切换非常简单。您可以使用VIX自动执行该过程。
我假设其他VM解决方案也具有类似的功能。

#3 楼

我不确定100%知道您的问题,但我会尽力回答。

首先,我将为要定位的Windows版本准备VM。每天您都可以创建快照,这意味着您可以在任何将来的日期回到该时间点。快照是大多数VM支持的功能。然后,我将在VM上运行Windows更新。这意味着您将逐渐建立大量的Microsoft DLL版本目录。您还可以从Microsoft Symbol服务器提取二进制文件及其PDB,但这需要了解我所知道的哈希值。

现在,您将遵循Microsoft安全公告。选择您感兴趣的产品,然后仅选择最新的补丁程序。学习安全公告文章。如果发现安全公告很有趣,则可以转到该安全公告中链接的知识库文章。在那里您可以研究修补了哪些文件。如果仍然有兴趣,可以从安全公告页面下载补丁。

一旦有了补丁文件,就需要使用以下命令之一进行提取:

.exe

setup.exe /t:C:[dest_dir] /c

.msu

expand -F:* [update_filename.msu] C:[tmp_dest_dir]

cd [tmp_dest_dir]

expand -F:* [extracted_update_filename.cab] C:[final_dest_dir]

.msp

msix [update_filename.msp] /out C:[dest_dir]

.msi

msiexec /a [update_filename.msi] /qb TARGETDIR=C:[target_dir]

文件夹中,您应该找到知识库文章中指示的文件。如果您一直遵循正确的快照策略,则应该在今天早上创建的快照中使用较旧的版本。从虚拟机中拉出该版本,并使用BinDiff来探索差异。

评论


我意识到我的问题并不像我想的那么清楚。
我知道vmware / vbox的快照功能,但这不是我想要的。
我真正的目标是1)如何获取已更改的二进制文件的旧版本2)如何知道要还原到哪个版本。
您每天的快照方法只能在时间上有效,因为据我所知当我们在未打补丁的Windows安装上运行Windows Update时,它将获得所有最新版本,而不是中间更新。有什么想法可以解决这种情况吗?

– ixje
13年3月21日在15:28

嗯,所以您想在开始收集二进制文件之前先找到它们?我相信Microsoft会将所有这些主机(不仅仅是当前的主机)托管在其符号服务器上。问题是,如果我没记错的话,您需要所需版本的MD5哈希。伊戈尔(Igor)从事IDA(我相信它具有符号集成)的工作时,可能知道它的详细工作原理。

–彼得·安德森(Peter Andersson)
13年3月21日在15:35

究竟!然后一种可靠地还原到那些文件的方法(以防它们依赖于其他较旧的文件)

– ixje
13年3月21日在16:21