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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Crassus — Windows 권한 상승 발견 도구로, Process Monitor 부트 로그를 분석하여 DLL 하이재킹, 취약한 ACL 및 기타 권한 상승 경로를 식별하고, 자동으로 프록시 DLL 소스 코드를 생성합니다. | Kitploit
도구/GitHubGitHub/vu-ls/crassus
Privilege EscalationExploitationPenetration TestingBinary Analysis
GitHubvu-ls/crassus

Crassus

Windows 권한 상승 발견 도구로, Process Monitor 부트 로그를 분석하여 DLL 하이재킹, 취약한 ACL 및 기타 권한 상승 경로를 식별하고, 자동으로 프록시 DLL 소스 코드를 생성합니다.

저장소 보기
63364607개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Crassus Windows 권한 상승 발견 도구

빠른 시작

  1. Process Monitor에서 Enable Boot Logging 옵션을 선택합니다. "Process Monitor 부트 로깅 옵션"
  2. 재부팅합니다.
  3. 로그인하고 Windows가 안정화되면 Process Monitor를 다시 실행합니다.
  4. 메시지가 표시되면 부트 로그를 저장합니다(예: raw.PML).
  5. Ctrl-R을 눌러 기본 Process Monitor 필터를 초기화합니다.
  6. 이 로그 파일을 저장합니다(예: boot.PML).
  7. Crassus.exe boot.PML을 실행합니다.
  8. 녹색으로 표시된 결과와 results.csv의 해당 항목을 조사합니다.

목차

  • Crassus라는 이름의 유래
    • 정말 또 다른 권한 상승 발견 도구를 만든 건가요?
    • 기능
    • 순서도
  • 스크린샷
    • Crassus 실행
    • CSV 출력
    • 내보내기
    • DLL 함수 내보내기
    • DLL 서수 내보내기
  • Crassus.exe 다운로드
    • Visual Studio로 빌드
    • 미리 컴파일된 Crassus.exe 사용
  • 사용법
    • 실행 흐름
    • 명령줄 인수
    • 예제
    • 프록시 DLL 템플릿
    • openssl.cnf 템플릿
  • 프록시 DLL 컴파일
    • Visual Studio
    • MinGW
  • 실제 사례
    • Acronis True Image
    • Atlassian Bitbucket
    • McAfee
    • Microsoft SQL Server 2022
  • 문제 해결
    • 로드되지 않은 누락 파일
    • 예상치 못한 권한으로 실행된 코드
    • 재부팅 시 발견 사항 사라짐
  • 기여
  • 크레딧

Crassus라는 이름의 유래?

Accenture는 Windows에서 DLL 하이재킹 기회를 찾는 Spartacus라는 도구를 만들었습니다. Spartacus를 출발점으로 삼아 Crassus는 단순히 누락된 파일을 찾는 것 이상으로 Windows 권한 상승 발견 기능을 확장했습니다. 권한 있는 프로세스의 파일과 디렉터리에 사용되는 ACL은 목표를 달성하기 위해 누락된 파일을 찾는 것보다 더 많은 것을 찾을 수 있습니다.

정말 또 다른 권한 상승 발견 도구를 만든 건가요?

...하지만 Crassus는 SysInternals Process Monitor를 활용하고 원시 PML 로그 파일을 파싱한다는 점에서 차별화됩니다. 일반적인 사용법은 Process Monitor를 사용하여 부트 로그를 생성한 다음 Crassus로 파싱하는 것입니다. 또한 취약한 DLL에 대한 모든 관련 내보내기가 포함된 프록시 DLL의 소스 코드를 자동으로 생성합니다.

기능

  • ProcMon PML 파일을 기본적으로 파싱합니다. 로그(PML) 파서는 https://github.com/eronnen/procmon-parser/ 에서 C#으로 부분 기능을 포팅하여 구현했습니다. 형식 사양은 여기에서 찾을 수 있습니다.
  • Crassus는 식별된 모든 누락 DLL에 대한 프록시 DLL의 소스 코드를 생성합니다. 예를 들어, 애플리케이션이 version.dll을 통한 DLL 하이재킹에 취약한 경우 Crassus는 모든 내보내기가 포함된 version.cpp 및 version.def 파일을 생성합니다. 기본적으로 프록시 DLL은 calc.exe를 실행합니다. Visual Studio 또는 MinGW에서 DLL을 빌드하기 위한 빌드 스크립트가 포함되어 있습니다.
  • 프로세스 생성 또는 라이브러리 로드와 같은 기타 관심 이벤트의 경우, 권한이 없는 사용자가 파일이나 파일 경로의 일부를 수정할 수 있는지 조사합니다.
  • 대용량 PML 파일을 처리하고 모든 관심 이벤트를 출력 CSV 파일에 저장할 수 있습니다.

순서도

Crassus가 작동하는 방식을 요약한 순서도입니다: Crassus 순서도

스크린샷

Crassus 실행

Crassus 실행

CSV 출력

CSV 출력

출력 내보내기

내보내기

DLL 함수 내보내기

DLL 함수

DLL 서수 내보내기

DLL 서수

Crassus.exe 다운로드

Visual Studio로 빌드

Crassus는 Visual Studio 2019 프로젝트로 개발되었습니다. Crassus.exe를 빌드하려면:

  1. Crassus.sln을 엽니다.
  2. 키보드에서 Ctrl+Shift+B를 누릅니다.

미리 컴파일된 Crassus.exe 사용

다른 사람의 코드가 무엇을 하는지 모르고 실행해도 괜찮다면, Crassus.exe가 이 저장소에 제공됩니다.

사용법

실행 흐름

  1. Process Monitor에서 Enable Boot Logging 옵션을 선택합니다. "Process Monitor 부트 로깅 옵션"
  2. 재부팅합니다.
  3. 로그인하고 Windows가 안정화되면 선택적으로 권한으로 실행되도록 구성된 예약된 작업도 실행합니다.
  4. Process Monitor를 다시 실행합니다.
  5. 메시지가 표시되면 부트 로그를 저장합니다.
  6. Ctrl-R을 눌러 기본 Process Monitor 필터를 초기화합니다.
  7. 이 로그 파일을 저장합니다(예: boot.PML). 로그 파일을 다시 저장하는 이유는 두 가지입니다:
    1. 이전 버전의 Process Monitor는 부트 로그를 단일 파일로 저장하지 않습니다.
    2. 기본적으로 부트 로그는 필터링되지 않아 Process Monitor 자체 실행 시 로컬 사용자 DLL 하이재킹과 같은 추가 노이즈가 포함될 수 있습니다.

명령줄 인수

인수설명
<PMLFILE>기존 ProcMon 이벤트 로그 파일의 위치(파일)입니다.
--verbose자세한 출력을 활성화합니다.
--debug디버그 출력을 활성화합니다.

예제

boot.PML에 저장된 Process Monitor 부트 로그를 파싱합니다. 모든 취약한 경로는 results.csv로 저장되고 모든 프록시 DLL 소스 파일은 stubs 하위 디렉터리에 저장됩니다.

C:\tmp> Crassus.exe boot.PML

프록시 DLL 템플릿

아래는 프록시 DLL을 생성할 때 사용되는 템플릿입니다. Crassus가 찾은 DLL의 경우 프록시 DLL에는 %_EXPORTS_%에 지정된 것과 동일한 내보내기 이름과 .def 파일에 지정된 동일한 서수가 포함됩니다. Crassus는 부모 프로세스의 아키텍처를 확인하여 DLL을 32비트 라이브러리로 빌드할지 64비트 라이브러리로 빌드할지 감지하고 그에 따라 %_BUILD_AS_% 필드의 소스 코드에 태그를 지정합니다.

Process Monitor 로그에서 실제 DLL을 찾을 수 없거나 내보내기 이름에 문제가 있는 경우 빌드 스크립트는 내보내기가 지정되지 않은 DLL을 생성하는 방식으로 대체합니다.

#pragma once
    
//%_BUILD_AS%

#include <windows.h>;

extern "C" {

  VOID Payload() {
      // 여기에 페이로드를 실행하세요.
      WinExec("calc.exe", 1);
  }

  BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
  {
      switch (fdwReason)
      {
      case DLL_PROCESS_ATTACH:
          Payload();
          break;
      case DLL_THREAD_ATTACH:
          break;
      case DLL_THREAD_DETACH:
          break;
      case DLL_PROCESS_DETACH:
          break;
      }
      return TRUE;
  }


  #ifdef ADD_EXPORTS
  %_EXPORTS_%
  #endif
}

openssl.cnf 템플릿

OPENSSLDIR 변수 값을 안전하지 않게 사용하는 애플리케이션의 경우, 조작된 openssl.cnf 파일을 해당 위치에 배치할 수 있습니다. 이 예제에서는 소프트웨어가 C:\tmp\calc.dll을 로드합니다. 32비트 프로세스를 대상으로 하려면 32비트 라이브러리를, 64비트 프로세스를 대상으로 하려면 64비트 라이브러리를 사용해야 합니다.

[openssl_init]
# 그러면 OpenSSL 초기화의 일부로 파일 c:\tmp\calc.dll을 로드하려고 시도합니다.
# 빌드 스크립트는 calc.dll 라이브러리를 32비트 또는 64비트 중 어떤 것으로 빌드해야 하는지 감지해야 합니다.
/tmp/calc = asdf

프록시 DLL 컴파일

Visual Studio

Visual Studio에 포함된 cl.exe 바이너리를 사용하여 컴파일할 수 있습니다. 구체적으로는 다음과 같습니다:

cl.exe /DADD_EXPORTS /D_USRDLL /D_WINDLL <target>.cpp /LD /Fe<target>.dll /link /DEF:<target>.def

라이브러리를 64비트 또는 32비트로 지정하는 것을 포함하여 빌드 프로세스를 자동화하려면:

  1. Visual Studio 개발자 명령 프롬프트를 엽니다.
  2. build.bat 스크립트로 DLL을 빌드합니다.
  3. 취약한 파일 이름이 .dll로 끝나지 않는 경우 필요에 따라 컴파일된 파일의 이름을 바꿉니다.

참고: vcvarsall.bat의 불행한 동작(확실히 버그는 아닙니다)으로 인해 동일한 Visual Studio 개발자 명령 프롬프트 세션에서 build.bat를 두 번 이상 실행하는 데 문제가 발생할 수 있습니다. 오류가 발생하면 창을 닫고 다시 시작하세요.

MinGW

도구 다운로드