簡體   English   中英

如何從商店導出不可導出的私鑰

[英]How to export non-exportable private key from store

我需要從 Windows 商店導出私鑰。 如果密鑰被標記為不可導出,我該怎么辦? 我知道有可能,程序越獄可以導出這個密鑰。

要導出密鑰,我使用Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair()(RSACryptoServiceProvider)cryptoProv.ExportParameters(true)導出密鑰。 我在Org.BouncyCastle.Cms.CmsSignedDataGenerator中用於 CMS 簽名的導出密鑰。

我需要 .Net 的解決方案,但任何解決方案都會很有用。 謝謝你。

你是對的,我知道根本沒有 API 可以導出標記為不可導出的 PrivateKey。 但是,如果您修補(在內存中)普通 API,則可以使用普通方式導出 :)

有一個新版本的 mimikatz 也支持 CNG 導出(Windows Vista / 7 / 2008 ...)

  1. 下載(並以管理權限啟動):http: //blog.gentilkiwi.com/mimikatz (主干版本或最新版本)

運行它並在其提示符中輸入以下命令:

  1. privilege::debug (除非您已經擁有它或僅針對 CryptoApi)
  2. crypto::patchcng (nt 6) 和/或crypto::patchcapi (nt 5 & 6)
  3. crypto::exportCertificates和/或crypto::exportCertificates CERT_SYSTEM_STORE_LOCAL_MACHINE

導出的 .pfx 文件使用密碼“mimikatz”進行密碼保護

Gentil Kiwi 的回答是正確的。 他開發了這個能夠檢索不可導出私鑰的 mimikatz 工具。

然而,他的指示已經過時了。 你需要:

  1. https://github.com/gentilkiwi/mimikatz/releases下載最新版本

  2. 在請求證書的同一台機器上以管理員權限運行 cmd

  3. 切換到 mimikatz bin 目錄(Win32 或 x64 版本)

  4. 運行mimikatz

  5. 按照wiki 說明操作,.pfx 文件(使用密碼mimikatz保護)將放置在 mimikatz bin 的同一文件夾中

mimikatz #crypto::capi
本地 CryptoAPI 已修補

mimikatz # privilege::debug
特權“20”確定

mimikatz #crypto::cng
“KeyIso”服務已修補

mimikatz #crypto::certificates /systemstore:local_machine /store:my /export
*系統存儲:'local_machine'(0x00020000)
* 商店:“我的”

  1. example.domain.local
    密鑰容器:example.domain.local
    提供者:微軟軟件密鑰存儲提供者
    類型:CNG 密鑰 (0xffffffff)
    可導出密鑰:否
    鑰匙尺寸:2048
    公共導出:好的 - 'local_machine_my_0_example.domain.local.der'
    私人導出:好的 - 'local_machine_my_0_example.domain.local.pfx'

我想特別提到越獄GitHub

越獄

Jailbreak 是一種用於從 Windows 證書存儲中導出標記為不可導出的證書的工具。 當您需要提取證書以進行備份或測試時,這會有所幫助。 您必須對文件系統上的私鑰具有完全訪問權限才能使越獄工作。

先決條件:Win32

  • 下載適用於您的 Windows 版本的可執行二進制文件(例如 jailbreak64.exe)。

  • 啟動提升的命令提示符。

  • 運行命令jailbreak64.exe %WINDIR%\system32\mmc.exe %WINDIR%\system32\certlm.msc -64 (注意 - 這與 github 上的指導不太一樣certlm.msc用於 Windows 2016 和2019 調出本地機器證書存儲)。

這里有用於控制台應用程序的代碼和二進制文件,可以導出標記為不可導出的私鑰,並且不會觸發像 mimikatz 這樣的防病毒應用程序。

該代碼基於NCC Group的一篇論文。 將需要使用本地系統帳戶運行該工具,因為它通過直接寫入 Windows 的lsass進程使用的內存來工作,以便臨時將密鑰標記為可導出。 這可以使用來自 SysInternals 的PsToolsPsExec來完成:

  1. 生成一個以本地系統用戶身份運行的新命令提示符:

     PsExec64.exe -s -i cmd
  2. 在新的命令提示符下,運行該工具:

     exportrsa.exe
  3. 它將遍歷每個本地計算機存儲,使用私鑰搜索證書。 對於每一個,它都會提示您輸入密碼 - 這是您要用來保護導出的 PFX 文件的密碼,因此可以是您想要的任何密碼

不幸的是,上面提到的工具被多家防病毒供應商阻止。 如果您遇到這種情況,請查看以下內容。

在證書存儲中打開不可導出的證書並找到指紋值。

接下來,打開 regedit 到下面的路徑並找到與指紋值匹配的注冊表項。

注冊表項的導出將包含完整的證書,包括私鑰。 導出后,將導出復制到另一台服務器並將其導入注冊表。

證書將出現在證書管理器中,其中包含私鑰。

機器商店:HKLM\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates

用戶存儲:HKCU\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates

在緊要關頭,您可以將導出保存為證書的備份。

您可能需要卸載防病毒軟件(在我的情況下,我必須擺脫 Avast)。

這確保了crypto::cng命令能夠正常工作。 否則它給了我錯誤:

mimikatz $ crypto::cng
ERROR kull_m_patch_genericProcessOrServiceFromBuild ; OpenProcess (0x00000005)

刪除 Avast 后:

mimikatz $ crypto::cng
"KeyIso" service patched

魔法。 (:

順便提一句

Windows Defender 是另一個阻止該程序工作的程序,因此您至少需要在使用程序時禁用它。

如果它是由 digicert 頒發的,您可以使用適用於 Windows 的 DigiCert 證書實用程序。 在創建它的服務器上執行“修復”。 然后您可以將其導出為喜歡 c:\temp 為 .pfx。 這對我來說是一個真正的 ssl 證書。

這在 Windows Server 2012 上對我有用 - 我需要導出一個不可導出的證書來設置另一個 ADFS 服務器,這成功了。 請記住使用上面的越獄說明,即:

crypto::certificates /export /systemstore:CERT_SYSTEM_STORE_LOCAL_MACHINE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM