Взлом ASP.NET через уязвимость в сери­али­зации ViewState

Взлом сайта

Наша цель заключается в получении прав суперпользователя на машине Pov с учебной площадки Hack The Box, для этого надо пока взломать ASP.NET через ViewState, эксплуатируя уязвимость  в сери­али­зации ViewState.

Еще по теме: Взлом сайтов с ошибкой 404 Not Found

Вот, что было сделано до этого:

  • Мы подключились к машине через VPN (см. Использование Hack The Box).
  • Добавили IP-адрес машины в /etc/hosts и запустили сканирование портов с помощью Nmap.
  • Обнаружили единственный открытый порт 80 и веб-сервер Microsoft IIS 10.0 с одностраничным сайтом.
  • Использовали Feroxbuster для сканирования веб-каталогов и ffuf для поиска поддоменов.
  • Найдя новый поддомен, добавили запись о нем в /etc/hosts и скачали портфолио пользователя.
  • В запросе заметили использование ViewState.

Как взломать ASP.NET через ViewState

В зап­росе отме­тим нес­коль­ко осо­бен­ностей. Во‑пер­вых, исполь­зует­ся ViewState — фича веб‑сер­вера ASP.NET, которая авто­мати­чес­ки сох­раня­ет дан­ные стра­ниц меж­ду раз­ными зап­росами. При рас­кры­тии нас­тро­ек это может дать нам воз­можность уда­лен­но выпол­нять код на сер­вере. Во‑вто­рых, обра­щаем вни­мание на спо­соб, которым ука­зано имя фай­ла для ска­чива­ния.

Со­дер­жимое фай­ла web.config
Со­дер­жимое фай­ла web.config

Плат­форма ASP.NET для сох­ранения зна­чений стра­ниц и эле­мен­тов управле­ния на веб‑стра­ницах исполь­зует метод ViewState. Текущее сос­тояние стра­ницы и дру­гие важ­ные парамет­ры сери­али­зуют­ся и кодиру­ются в Base64, пос­ле чего сох­раня­ются в HTML-коде стра­ницы в скры­том поле ViewState.

Так как ASP.NET обра­баты­вает сери­али­зован­ные дан­ные, это мож­но исполь­зовать для выпол­нения кода. Что­бы такого не слу­чалось, дан­ные ViewState зашиф­рованы и под­писаны. Алго­рит­мы и ключ шиф­рования и под­писи как раз хра­нят­ся в фай­ле web.config, содер­жимое которо­го мы толь­ко что получи­ли. А зна­чит, мы можем сфор­мировать наг­рузку для выпол­нения кода.

Сос­тавить и сери­али­зовать наг­рузку мож­но с помощью ути­литы ysoserial.net. Но для начала нуж­но сге­нери­ровать реверс‑шелл на PowerShell, нап­ример с помощью Online Reverse Shell Generator.

Ге­нери­рова­ние реверс‑шел­ла
Ге­нери­рова­ние реверс‑шел­ла

Те­перь перехо­дим на вир­туаль­ную машину с Windows и генери­руем наг­рузку. В парамет­ре —path нуж­но ука­зать стра­ницу с парамет­ром ViewState.

Ге­нери­рова­ние наг­рузки
Ге­нери­рова­ние полезной наг­рузки

За­пус­каем лис­тенер, что­бы ловить под­клю­чение от нашего веб‑шел­ла:

За­тем встав­ляем сге­нери­рован­ную наг­рузку в параметр ViewState и выпол­няем зап­рос.

Зап­рос на сер­вер
Зап­рос на сер­вер

И в ито­ге получа­ем сес­сию поль­зовате­ля sfitz.

Сес­сия поль­зовате­ля
Сес­сия поль­зовате­ля

На этом все. Мы использовали уязвимость в сериализации ViewState ASP.NET для внедрения кода на сервер, получив доступ к ключам шифрования и подписи из файла web.config. Затем сгенерировали и выполнели нагрузку через утилиту ysoserial.net, получив сессию пользователя sfitz.

Дима (Kozhuh)

Эксперт в кибербезопасности. Работал в ведущих компаниях занимающихся аналитикой компьютерных угроз. Анонсы новых статей в Телеграме.

Добавить комментарий