<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Participe do grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou do grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
A maneira mais fácil de extrair um certificado de usuário ou máquina e chave privada é através de uma **sessão de desktop interativa**. Se a **chave privada** for **exportável**, basta clicar com o botão direito do mouse no certificado em `certmgr.msc`, e ir para `Tarefas → Exportar`... para exportar um arquivo .pfx protegido por senha. \
Também é possível realizar isso **programaticamente**. Exemplos incluem o cmdlet `ExportPfxCertificate` do PowerShell ou [o projeto CertStealer C# de TheWover](https://github.com/TheWover/CertStealer).
Por baixo, esses métodos usam a **Microsoft CryptoAPI** (CAPI) ou a mais moderna Cryptography API: Next Generation (CNG) para interagir com o armazenamento de certificados. Essas APIs realizam vários serviços criptográficos necessários para o armazenamento e autenticação de certificados (entre outros usos).
Se a chave privada for não exportável, CAPI e CNG não permitirão a extração de certificados não exportáveis. Os comandos `crypto::capi` e `crypto::cng` do **Mimikatz** podem modificar o CAPI e o CNG para **permitir a exportação** de chaves privadas. `crypto::capi`**modifica** o **CAPI** no processo atual, enquanto `crypto::cng` requer **modificação** na memória do **lsass.exe**.
O Windows **armazena chaves privadas de certificados usando DPAPI**. A Microsoft separa os locais de armazenamento para chaves privadas de usuário e máquina. Ao descriptografar manualmente os blobs DPAPI criptografados, um desenvolvedor precisa entender qual API de criptografia o sistema operacional usou, pois a estrutura do arquivo de chave privada difere entre as duas APIs. Quando se usa SharpDPAPI, ele automaticamente leva em conta essas diferenças de formato de arquivo. 
O Windows armazena mais **comumente certificados de usuários** no registro na chave `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates`, embora alguns certificados pessoais para usuários também sejam armazenados em `%APPDATA%\Microsoft\SystemCertificates\My\Certificates`. Os locais associados à **chave privada do usuário** estão principalmente em `%APPDATA%\Microsoft\Crypto\RSA\User SID\` para chaves **CAPI** e `%APPDATA%\Microsoft\Crypto\Keys\` para chaves **CNG**.
Para simplificar a descriptografia do arquivo masterkey e do arquivo de chave privada, o comando `certificates` do [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) pode ser usado com os argumentos `/pvk`, `/mkfile`, `/password`, ou `{GUID}:KEY` para descriptografar as chaves privadas e os certificados associados, gerando um arquivo de texto `.pem`.
O Windows armazena certificados de máquina na chave de registro `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` e armazena chaves privadas em vários locais diferentes, dependendo da conta.\
Embora o SharpDPAPI pesquise todos esses locais, os resultados mais interessantes tendem a vir de `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (CAPI) e `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (CNG). Essas **chaves privadas** estão associadas ao **repositório de certificados da máquina** e o Windows as criptografa com as **chaves mestras DPAPI da máquina**.\
Não é possível descriptografar essas chaves usando a chave de backup DPAPI do domínio, mas sim **deve-se** usar o **segredo DPAPI\_SYSTEM LSA** no sistema, que é **acessível apenas pelo usuário SYSTEM**. 
Você pode fazer isso manualmente com o comando **`lsadump::secrets`** do **Mimikatz** e depois usar a chave extraída para **descriptografar as masterkeys da máquina**. \
Você também pode aplicar patch no CAPI/CNG como antes e usar o comando `crypto::certificates /export /systemstore:LOCAL_MACHINE` do **Mimikatz**. \
O comando certificates do **SharpDPAPI** com a flag **`/machine`** (quando elevado) irá automaticamente **elevar** para **SYSTEM**, **despejar** o segredo **DPAPI\_SYSTEM** LSA, usar isso para **descriptografar** e encontrar masterkeys DPAPI da máquina, e usar os textos em claro das chaves como uma tabela de consulta para descriptografar quaisquer chaves privadas de certificados da máquina.
Os tipos mais comuns de arquivos de certificado focados no Windows que vimos são **`.pfx`** e **`.p12`**, com **`.pkcs12`** e **`.pem`** aparecendo às vezes, mas menos frequentemente.\
Outras extensões de arquivo relacionadas a certificados interessantes são: **`.key`** (_chave privada_), **`.crt/.cer`** (_apenas certificado_), **`.csr`** (_Pedido de Assinatura de Certificado, não contém certificados ou chaves privadas_), **`.jks/.keystore/.keys`** (_Java Keystore. Pode conter certificados + chaves privadas usadas por aplicações Java_).
Se você encontrar um arquivo de certificado **PKCS#12** e ele estiver **protegido por senha**, você pode extrair um hash usando [pfx2john.py](https://fossies.org/dox/john-1.9.0-jumbo-1/pfx2john\_8py\_source.html) e **quebrar** a senha usando o JohnTheRipper.
> Para **suportar a autenticação NTLM** \[MS-NLMP] para aplicações que se conectam a serviços de rede que **não suportam autenticação Kerberos**, quando o PKCA é usado, o KDC retorna a função unidirecional (OWF) do **NTLM do usuário** no certificado de atributo de privilégio (PAC) **`PAC_CREDENTIAL_INFO`** buffer
Assim, se a conta se autenticar e obter um **TGT através do PKINIT**, há um "failsafe" embutido que permite ao host atual **obter nosso hash NTLM do TGT** para suportar a autenticação legada. Isso envolve **descriptografar** uma **estrutura `PAC_CREDENTIAL_DATA`** que é uma representação serializada em Representação de Dados de Rede (NDR) do NTLM em texto claro.
A implementação do Kekeo também funcionará com certificados protegidos por smartcard que estejam conectados no momento, se você conseguir [**recuperar o pin**](https://github.com/CCob/PinSwipe)**.** Também será suportado no [**Rubeus**](https://github.com/GhostPack/Rubeus).
* Todas as informações foram retiradas de [https://www.specterops.io/assets/resources/Certified\_Pre-Owned.pdf](https://www.specterops.io/assets/resources/Certified\_Pre-Owned.pdf)
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).