原文地址:http://pen-testing.sans.org/blog/pen-testing/2013/04/12/using-volume-shadow-copies-from-python
Volume Shadow copies 提供管理员工具来访问Windows,包含最新删除的的文件,带锁的文件等。他们就像通道一样直达Windows文件系统,用来挖掘各种有价值的信息。
Volume Shadow copies对于渗透测试来说价值无限,他们包含很多有价值的信息。加入域管理员知道渗透测试要进行测试,删除password.txt怎么办?没问题。密码文件还存在Volume Shadow copies中等你挖掘。类似NTDS.DIT(AD数据库)这类文件会被系统锁住所以你没法获得他们。使用Volume Shadow copies可以解决问题。你可以创建一个新的Volume Shadow copies,然后抓取文件的copy,然后就可以掠夺域中的users了。
可以使用win32com模块和COM来和WIN32_ShadowCopy服务进行交互来做你想做的。参数在python中使用COM很麻烦,但是有现成的库了。
获得某个系统的Volume Shadow copies列表很简单。可以使用vssown.vbs,查询对应的python语句,然后转换成python代码。(vssown.vbs可以从这里下载http://ptscripts.googlecode.com/svn/trunk/windows/vssown.vbs)。然后创建一个object,连接到服务器,使用ExecQuery来获得系统的所有Volume Shadow Copies列表。然后可以使用循环来遍历每一个shadow copy,获得"DeviceObject"属性。需要使用"DeviceObject"属性来访问Volume Shadow Copies中的数据。
可以参考的一些例子:
http://www.activexperts.com/admin/scripts/wmi/python/0274/
创建一个Volume Shadow Copy很难,所以我们必须调用Win32_ShadowCopy Com对象。首先,我们导入必须的模块,然后创建一个叫"wmi"的对象,该对象指向一个Win32_ShadowCopy Com的对象。可以使用下面两行代码实现:
import win32com.client
wmi=win32com.client.GetObject("winmgmts:\\\\.\\root\\cimv2:Win32_ShadowCopy")
我们需要为这个Win32_ShadowCopy对象调用"create"方法。执行一个模块需要使用wmi对象的ExecMethod()方法。例如 "wmi.ExecMethod(<method name> , <com object parameters>)"。第一个参数是目标方法名,第二个参数是一个含有目标方法名的COM对象。
首先,创建一个叫“createmethod”的对象指向“Create”方法。然后创建一个叫createparams的对象指向create方法的参数。然后使用createparams对象来检查参数设值。
CreateMethodCreateMethod指向Win32_ShadowCopy对象的create方法。CreateParams指向create方法的参数。可以看到create方法需要叫“Context”和“Volume”的参数。“Context”是第一个参数,“Volume”是第二个参数。然后我使用list来检查这些参数的当前值。可以看到"Context"的值是"ClientAccessible","Volume"的值是"None"。根据MSDN,我们必须为“Volume”参数设置一个盘符:
现在可以调用ExecMethod。结果将会在COM对象列表的Properties_属性中。第一项的“.value”是响应值。可以参考http://msdn.microsoft.com/en-us/library/windows/desktop/aa394428%28v=vs.85%29.aspx来了解响应码。
如果响应码是0,那么第二项将会含有新Volume Shadow Copy的ID。
我的shadow copy ID是4CDDDE4F-4B00-49FE-BF07-1D89B3325AD,现在检查VSSADMIN来看看它是否被创建了。
可以使用vssadmin list shadows命令来查看存在的volume。我们可以看到已经创建的shadow copy 4CDDDE4F-4B00-49FE-BF07-1D89B3325ADD
结合上面的代码,我们使用下面的代码来创建一个volume shadow copy:
现在可以像读系统文件一样读取Volume Shadow copies数据。
注意:Volume Shadow copies只可以读,不可以写。
可以使用python文件系统接口来检查一个文件是否存在。
可与你想打开一个文件,读取内容,如下:
关于Volume Shadow copies,我需要做的只是vss_list()和vss_create()这两个函数。如果你需要其他东西,这两个函数可以变更成你需要的样子。代码下载地址
http://counterhack.net/vssown.py.txt
代码: