[英]Getting user name/password of the logged in user in Windows
是否有任何API可以在Windows中獲取當前登錄用戶的名稱和密碼?
先感謝您。
密碼:不,出於安全原因,這不會被保留 - 它被使用,然后被丟棄。 您可以從注冊表中檢索此用戶的加密密碼,並給予足夠的權限,然后使用彩虹表等方法對其進行解密,但這使用當前方法非常耗費資源並且非常耗時。 提示用戶好多了。
或者,如果你想像Novell那樣實現某種“單點登錄”系統,你應該通過GINA(Vista之前)或Credential Provider(Vista)來實現,這將導致您的代碼被賦予用戶名和登錄時的密碼,密碼可用的唯一時間。
對於用戶名,獲取當前用戶名(運行代碼的用戶名)很簡單:AdvApi32.dll中的GetUserName函數可以為您完成此操作。
如果您作為服務運行,則需要記住沒有人“登錄用戶”:除了任何實際的人之外,還有幾個在任何時候,例如LocalSystem,NetworkService,SYSTEM和其他帳戶。 本文提供了一些示例代碼和文檔 。
如果可能的話,我認為這是一個巨大的安全漏洞!
您加密后無法獲取用戶的密碼(更不用說它的標准做法是不以明文形式存儲密碼)。
要獲取用戶名,可以使用GetUserName或NPGetUser
請注意確定如何完成,但http://www.nirsoft.net/utils/network_password_recovery.html上的 “網絡密碼恢復”工具似乎從某些緩存中獲取密碼。
對於許多認為無法透露當前登錄用戶密碼的評論者,請參閱登錄用戶的轉儲明文密碼,其中顯示了如何使用mimikatz執行此操作:
mimikatz # privilege::debug
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK
mimikatz # sekurlsa::logonPasswords full
...
Utilisateur principal : user
Domaine d'authentification : domain
kerberos :
* Utilisateur : user
* Domaine : domain
* Mot de passe : pass
GetUserName將為您提供名稱,但您無法獲得密碼。 它甚至不是Windows存儲的東西,AFAIK - 只是密碼的哈希值。
根據您要實現的目標(您可以告訴我們更多信息......),可以模擬已登錄的用戶並代表他/她執行操作。
Windows API中的身份驗證的完整詳細信息可以在MSDN上找到: http : //msdn.microsoft.com/en-us/library/aa374735(VS.85).aspx
我不知道windows登錄密碼......但你絕對可以從Credentials Manager中提取明文密碼。 例如,這是一個拉取TFS密碼的程序。 在大多數情況下,這與Windows登錄相同。
namespace ShowPassword
{
using Microsoft.TeamFoundation.Client;
using System;
using System.Net;
class Program
{
static void Main(string[] args)
{
var tpc = new TfsTeamProjectCollection(new Uri("http://mycompany.com/tfs"));
var nc = tpc.Credentials as NetworkCredential;
Console.WriteLine("the password is " + nc.Password);
}
}
}
我使用Nuget包TeamFoundation ExtendedClient將其編譯為vs 2015下的“console”應用程序。
您可以使用GetUserName()獲取用戶名,但無法獲取密碼; 這會違反假人101的安全性。
重新“網絡密碼恢復”工具
Windows(最多XP)存儲passwd的副本,具有更簡單易於破解的加密 - 用於連接舊式lanmanager網絡共享。 這些工具通常會嘗試使用所有可能的密碼,使用彩虹表(字典單詞的預先加密版本)可加快速度。
在XPsp2 / 3 Vista中,此功能已被刪除。 新的加密更難破解,需要花費數小時才能嘗試所有可能的值,有在線服務可以在大量機器上運行它,以便快速回答價格。
要回答原始海報 - 您通常不會存儲密碼並將其與用戶所用的密碼進行比較。您加密(實際哈希)輸入的密碼並存儲密碼。 要檢查密碼,您可以對用戶輸入的內容執行相同的加密並進行比較。 通常不可能從加密表單回到真實密碼。
編輯我懷疑你在這里問錯了 - 為什么你想要密碼,你想要驗證什么以及什么時候?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.