萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Windows Server 2003 教學

Windows Server 2003 獲取登入密碼三大核心技術深度解析 (含 LSASS 記憶體掃描實測)

三大技術路徑回顧

同 41376,此處為更詳細實測記錄版本。

方法一:Hook Winlogon API

項目 winlogonhijack (rootkit.com) 攔截 WlxLoggedOutSAS 等函數。實測:本地登入成功,遠端桌面 (RDP) 失敗,因 RDP 繞過 Winlogon 互動流程。

方法二:GINA 介面掛鉤

替換 msgina.dll 掛鉤 WlxLogonUser、WlxDisplaySASNotice 等。
穩定性高,支援所有登入類型。
相容性問題:XP/2003 新增 WlxNegotiate、WlxInitialize 等函數,舊後門程式未導出這些函數導致載入失敗,需更新原始碼重新編譯。

方法三:LSASS 記憶體掃描 (核心難點與實測代碼)

為何密碼在 LSASS?

LSASS 負責安全認證 (NTLM/Kerberos),需明文密碼計算雜湊/金鑰。微軟認為可逆加密無意義 (追蹤 LSASS 操作即可還原),故直接存明文。

掃描困境 (實測驗證)

  • 掃描特徵字串 "LocalSystem Remote Procedure" 後鄰近區域尋找密碼,多數系統無此字串或定位錯誤。
  • 密碼位址動態、無固定結構、易被後登入者覆蓋。
  • 成功率極低,僅在「單一管理員登入、無後續登入、未鎖定工作站」情況下較高。

改進方向

  1. 服務化定時掃描 + 事件日誌觸發 (Event ID 528/540)。
  2. 模擬 LogonUser() 登入已知帳密 → 掃描 LSASS 定位特徵 → 建立記憶體地圖 → 推測他人密碼位置。

程式碼片段 (概念驗證)


// 簡化版掃描邏輯
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, lsass_pid);
BYTE *buffer = VirtualAllocEx(...);
ReadProcessMemory(hProcess, base_addr, buffer, size, &bytesRead);
// 搜尋特徵字串
char *sig = "LocalSystem Remote Procedure";
char *found = memmem(buffer, size, sig, strlen(sig));
if (found) {
    // 向後偏移嘗試提取 Unicode 字串作為密碼候選
}

免責聲明:以上技術僅供安全研究與防禦理解,嚴禁用於未授權存取。實際部署環境請啟用 Credential Guard、LSASS 保護 (RunAsPPL)、限制除錯權限等緩解措施。

copyright © 萬盛學電腦網 all rights reserved