void NTAPI LsaUnprotectMemory( __inout PVOID Buffer, __in ULONG BufferSize ); Buffer [in, out] On input, a pointer to the buffer to be decrypted. On output, a pointer to the decrypted buffer. BufferSize [in] The size, in bytes, of the Buffer buffer. Remarks A pointer to the LsaProtectMemory function is available in the LSA_SECPKG_FUNCTION_TABLE structure received by the SpInitialize function. Requirements Minimum supported client Windows XP Minimum supported server Windows Server 2003 Header Ntsecpkg.h
typedef enum _SECURITY_LOGON_TYPE { Interactive = 2, // Interactively logged on (locally or remotely) Network, // Accessing system via network Batch, // Started via a batch queue Service, // Service started by service controller Proxy, // Proxy logon Unlock, // Unlock workstation NetworkCleartext, // Network logon with cleartext credentials NewCredentials, // Clone caller, new default credentials RemoteInteractive, // Remote, yet interactive. Terminal server CachedInteractive, // Try cached credentials without hitting the net. CachedRemoteInteractive, // Same as RemoteInteractive, this is used internally for auditing purpose CachedUnlock // Cached Unlock workstation } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
作者这么说的
Correct, crypted in memory but in reversible way (LsaProtectMemory/LsaUnprotectMemory, see : http://blog.gentilkiwi.com/mimikatz/sekurlsa/wdigest#getWDigestFunctions & http://blog.gentilkiwi.com/mimikatz/sekurlsa/tspkg#getTsPkgFunctions), msv1_0 also use subcalls too for pass the hash.
Usualy, debug privilege is needed, but you can use system account too, (psexec -s or other tricks) and with it : no need of privilege :)
I disagree vulnerability, it's a weakness (but big fail ;))