
SharpDPAPI es un port en C# de algunas funcionalidades DPAPI de Mimikatz.
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.
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
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