.net 如何从存储中导出不可导出的私钥

vq8itlhq  于 2023-02-01  发布在  .NET
关注(0)|答案(7)|浏览(332)

我需要从Windows商店导出私钥。如果密钥被标记为不可导出,我该怎么办?我知道这是可能的,程序越狱可以导出此密钥。
要导出密钥,我使用Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair()(RSACryptoServiceProvider)cryptoProv.ExportParameters(true)导出密钥。导出的密钥我在Org.BouncyCastle.Cms.CmsSignedDataGenerator中用于CMS签名。
我需要解决方案。网,但任何解决方案都将是有用的。谢谢。

guz6ccqo

guz6ccqo1#

你是对的,我知道没有API可以导出标记为不可导出的PrivateKey。但是如果你(在内存中)修补了普通的API,你就可以使用普通的方式导出:)
有一个新版本的mimikatz,也支持CNG出口(Windows Vista / 7 / 2008...)
1.下载(并使用管理权限启动):http://blog.gentilkiwi.com/mimikatz( Backbone.js 版本或最新版本)
运行它并在其提示符中输入以下命令:

  1. privilege::debug(除非您已经拥有它或仅以CryptoApi为目标)
  2. crypto::patchcng(第6个核苷酸)和/或crypto::patchcapi(第5和6个核苷酸)
  3. crypto::exportCertificates和/或crypto::exportCertificates CERT_SYSTEM_STORE_LOCAL_MACHINE
    导出的.pfx文件受密码“mimikatz”的密码保护
83qze16e

83qze16e2#

Gentil Kiwi的answer是正确的,他开发了这个mimikatz工具,能够检索不可导出的私钥。
但是,他的指示已经过时了,你需要:
1.从https://github.com/gentilkiwi/mimikatz/releases下载最新版本
1.在请求证书的同一台计算机上以管理员权限运行cmd
1.更改为mimikatz bin目录(Win32或x64版本)
1.运行mimikatz
1.按照wiki说明操作,. pfx文件(用密码 * mimikatz * 保护)将被放置在mimikatz bin的同一个文件夹中
密码::capi
本地CryptoAPI已修补
mimikatz #权限::调试
权限"20"正常
密码::cng
"KeyIso"服务已修补
mimikatz #加密::证书/系统存储:本地计算机/存储:我的/导出

  • 系统存储:"本地计算机"(0x00020000)
  • 店铺:"我的"
  1. example.domain.local
    密钥容器:example.domain.local
    提供程序:Microsoft软件密钥存储提供程序
    类型:CNG密钥(0xffffffff)
    可导出密钥:否
    密钥大小:2048
    公共导出:确定-"本地计算机我的0_example.domain.local.der"
    私人出口:确定-"本地计算机我的0_example.domain.local.pfx"
q1qsirdb

q1qsirdb3#

here有一些代码和二进制文件可以用于一个控制台应用程序,它可以导出标记为不可导出的私钥,而且它不会像mimikatz那样触发防病毒应用程序。
该代码基于NCC Group的一篇文章。需要使用本地系统帐户运行该工具,因为它直接写入Windows的lsass进程使用的内存,以便临时将密钥标记为可导出。这可以使用SysInternals的PsTools
1.生成以本地系统用户身份运行的新命令提示符:

PsExec64.exe -s -i cmd

1.在新的命令提示符下,运行该工具:

exportrsa.exe

1.它将在每个本地计算机存储区循环,搜索带有私钥的证书。对于每个证书,它将提示您输入密码-这是您想要用来保护导出的PFX文件的密码,因此可以是任何您想要的密码
所需文件的快捷方式:

icnyk63a

icnyk63a4#

我想特别提到JailbreakGitHub
越狱
Jailbreak是一个用于从Windows证书存储中导出标记为不可导出的证书的工具。当您需要提取证书以进行备份或测试时,这会很有帮助。您必须对文件系统上的私钥具有完全访问权限才能使Jailbreak工作。
先决条件:Win32操作系统

  • 下载适用于您的Windows版本的可执行二进制文件(例如jailbreak64.exe)。
  • 启动提升的命令提示符。
  • 运行命令jailbreak64.exe %WINDIR%\system32\mmc.exe %WINDIR%\system32\certlm.msc -64(注意--这与github上的指导不太一样。certlm.msc在Windows 2016和2019上用于打开本地机器证书存储)。
f0ofjuux

f0ofjuux5#

不幸的是,上面提到的工具被几个杀毒软件供应商屏蔽了。如果你是这种情况,那么看看下面的。
在证书存储区中打开不可导出的证书并找到Thumbprint值。
接下来,打开regedit到下面的路径,找到与指纹值匹配的注册表项。
注册表项的导出将包含包含私钥的完整证书。导出后,将导出复制到其他服务器并将其导入注册表。
证书将显示在证书管理器中,其中包含私钥。
机器商店:HKLM\软件\Microsoft\系统证书\MY\证书
用户存储:香港中文大学\软件\微软\系统证书\我的系统\证书
在必要时,您可以将导出保存为证书的备份。

qqrboqgw

qqrboqgw6#

您可能需要卸载防病毒软件(在我的情况下,我不得不摆脱Avast)。
这样可以确保crypto::cng命令正常工作。否则它会给我错误:

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

删除Avast后:

mimikatz $ crypto::cng
"KeyIso" service patched

魔术。(:

顺便说一句

Windows Defender是另一个程序阻止程序工作,所以你也需要禁用它的时间使用程序至少。

qacovj5a

qacovj5a7#

如果它是由digicert颁发的,你可以使用Windows的DigiCert证书实用程序。在创建它的服务器上进行“修复”。然后你可以将它导出到像c:\temp这样的. pfx。这对我使用真实的的ssl证书有效。

相关问题