업데이트로 돌아가기
New releaseSep 22, 2026

PrivescCheck v2026.09.21-1

Windows용 권한 상승 열거 스크립트

공유

PrivescCheck

공개 보안 표준에서 반드시 다루지는 않는 일반적인 Windows 취약점구성 문제를 신속하게 식별하고, 익스플로잇 및 포스트 익스플로잇 작업에 유용한 정보를 수집합니다.

[!IMPORTANT] 이 도구를 사용할 때 알아두어야 할 중요한 점은 모든 접근 제어 검사가 현재 사용자의 컨텍스트에서 수행된다는 것입니다. 따라서 관리자 권한으로 실행하면 잘못된 결과가 생성되는 것을 피하기 위해 많은 취약점 검사가 건너뛰어집니다.

빠른 시작

여기에서 스크립트를 다운로드하세요: PrivescCheck.ps1

[!TIP] 위 링크는 PowerShell 터미널에서 (New-Object Net.WebClient).DownloadString(...)과 함께 직접 사용할 수도 있습니다.

사용 사례 1: 빠른 평가

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Report TXT,HTML"

사용 사례 2: 광범위한 평가

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report TXT,HTML"

사용 사례 3: 종합 평가

powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report ALL"

자세한 사용법

Invoke-PrivescCheck [-Extended] [-Audit] [-Risky] [-Report <FORMAT>[,...]]
    [-FilePath <PREFIX>]  [-Silent] [-Force]

    -Extended
        스캔에 모든 "extended" 검사를 포함합니다.

    -Audit
        스캔에 모든 "audit" 검사를 포함합니다.

    -Risky
        스캔에 모든 "risky" 검사를 포함합니다. 이는 동작 특성상 활성 EDR 대응 조치를
        유발할 가능성이 있는 검사입니다.

    -Report <FORMAT>[,...]
        출력 보고서 파일 형식(TXT, HTML, CSV, XML)을 지정합니다. 별칭
        'ALL'을 사용하면 모든 보고서 파일을 생성합니다. 기본적으로 출력 파일 이름은
        자동으로 생성됩니다. 옵션 '-FilePath'를 사용하여 명시적으로 지정할 수 있습니다.

    -FilePath <PREFIX>
        출력 보고서 파일 이름 또는 디렉터리를 지정합니다. 파일 확장자는
        자동으로 추가됩니다. 디렉터리 경로를 지정하면 파일 이름이
        런타임에 자동으로 생성됩니다.

    -Silent
        터미널 출력을 억제합니다. 예를 들어 예약된 작업에서 배치 파일의
        일부로 스크립트를 실행하려는 경우 유용할 수 있습니다.

    -Force
        경고를 무시하고 강제로 실행합니다. 일반적으로 스크립트는 관리자 권한으로
        실행되면 중지됩니다. 이 옵션을 사용하면 그럼에도 불구하고 실행합니다.

보고서 파일 형식

보고서 파일 형식 > TXT

-Report TXT 옵션을 사용하여 원시 텍스트 보고서를 생성합니다. 출력은 터미널 출력과 유사하지만, 텍스트 편집기와의 호환성을 높이기 위해 ASCII 문자만 포함합니다.

PrivescCheck에서 생성된 원시 텍스트 보고서 스크린샷

보고서 파일 형식 > HTML

-Report HTML 옵션을 사용하여 HTML 보고서를 생성합니다. 출력 파일은 웹 브라우저에서 열 수 있습니다. 외부 종속성이 없으므로 인터넷 연결이 필요하지 않습니다. 원시 텍스트 보고서보다 데이터를 시각화하기에 더 편리합니다. 또한 정렬필터링 기능을 제공합니다!

PrivescCheck에서 생성된 HTML 보고서 스크린샷

보고서 파일 형식 > CSV 또는 XML

-Report CSV 또는 -Report XML 옵션을 사용하여 CSV 또는 XML 보고서를 생성합니다. 출력 파일은 자동화된 보고 도구가 결과를 파싱하기 쉽게 하기 위한 것입니다.

[!NOTE] 출력 형식이 (아직) 문서화되어 있지는 않지만, 이미 생성된 파일의 구조를 분석하면 쉽게 파악할 수 있습니다. 각 검사의 Id 값을 고유 식별자로 사용할 수 있습니다.

검사 유형

검사 유형 > Base

Base 유형의 검사는 스크립트가 관리자로 실행되지 않는 한 항상 실행됩니다. 주로 권한 상승 취약점이나 기타 중요한 문제를 식별하기 위한 것입니다.

검사 유형 > Extended

Extended 유형의 검사는 명령줄에서 -Extended 옵션을 지정한 경우에만 실행할 수 있습니다. 주로 익스플로잇 개발이나 포스트 익스플로잇에 유용할 수 있는 추가 정보를 제공하기 위한 것입니다.

검사 유형 > Audit

Audit 유형의 검사는 명령줄에서 -Audit 옵션을 지정한 경우에만 실행할 수 있습니다. 주로 구성 감사(configuration audit)의 맥락에서 관련된 정보를 제공하기 위한 것입니다.

팁 & 요령

PowerShell 실행 정책

기본적으로 새 powershell.exe 프로세스가 시작되면 PowerShell 실행 정책은 클라이언트에서 Restricted, 서버에서 RemoteSigned로 설정됩니다. 이러한 정책은 (서명되지 않은) 스크립트의 실행을 차단하지만, 다음과 같이 현재 범위 내에서 재정의할 수 있습니다.

Set-ExecutionPolicy Bypass -Scope Process -Force
. .\PrivescCheck.ps1

그러나 이 방법은 실행 정책이 GPO를 통해 강제되는 경우에는 작동하지 않습니다. 이 경우 새 PowerShell 세션을 시작한 후 다음과 같이 스크립트를 로드할 수 있습니다.

Get-Content .\PrivescCheck.ps1 | Out-String | Invoke-Expression

PowerShell 버전 2

Constrained Language Mode를 우회하는 일반적인 방법은 이 보호 기능을 구현하지 않는 PSv2를 사용하는 것입니다. 따라서 개발 노력의 상당 부분이 이 하위 호환성을 유지하는 데 들어갑니다.

[!NOTE] PowerShell 버전 2는 최신 버전의 Windows에서 여전히 기본적으로 활성화되어 있지만 (Windows에서 PowerShell 2.0 제거), 수동 설치가 필요한 .Net framework 버전 2.0 없이는 실행할 수 없습니다.

Metasploit 타임아웃

Meterpreter 세션 내에서 이 스크립트를 실행하면 "timeout" 오류가 발생할 가능성이 높습니다. 이는 Metasploit이 기본 타임아웃 값을 15초로 사용하는데, 이는 스크립트의 일반적인 실행이 완료되기에 충분하지 않기 때문입니다.

meterpreter > load powershell
Loading extension powershell...Success.
meterpreter > powershell_import /local/path/to/PrivescCheck.ps1
[+] File successfully imported. No result was returned.
meterpreter > powershell_execute "Invoke-PrivescCheck"
[-] Error running command powershell_execute: Rex::TimeoutError Operation timed out.

sessions 명령의 -t 옵션(문서)을 사용하여 다른 타임아웃을 설정할 수 있습니다. 다음 예에서는 ID 1인 세션에 대해 2분의 타임아웃을 설정하지만, 더 높은 값을 설정하는 것이 좋을 수도 있습니다.

msf6 exploit(multi/handler) > sessions -t 120 -i 1
[*] Starting interaction with 1...
meterpreter > powershell_execute "Invoke-PrivescCheck"

빌드

데이터 업데이트

일부 검사는 온라인 데이터(예: LOL 드라이버 데이터베이스)에 의존하지만, 스크립트는 오프라인에서 작동하도록 설계되었습니다. 이 문제를 해결하기 위해 데이터가 스크립트에 내장되므로 정기적으로 업데이트해야 합니다. 이 과정은 공식 릴리스에서 완전히 자동화되어 있지만, 로컬에서 스크립트를 빌드하려는 경우 선택적으로 수동으로 수행할 수 있습니다.

powershell -ep bypass ". .\build\Build.ps1; Update-LolDriverFile"

스크립트 빌드

스크립트 빌드는 아래 명령을 실행하는 것만큼 간단합니다. 출력 파일은 .\dist\ 폴더에 저장됩니다.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck"

빌드 스크립트는 무작위로 생성된 시드를 가진 의사 난수 생성기를 사용하여 각 모듈의 변수 이름을 선택합니다. 빌드 간에 재현 가능한 결과를 생성하려면 -NoNewSeed 옵션을 사용하여 이전에 생성된 시드를 재사용하도록 선택할 수 있습니다.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"

빌드 스크립트는 무작위로 생성된 를 사용한 AES 암호화를 사용하여 각 모듈의 내용을 난독화합니다. 빌드 간에 재현 가능한 결과를 생성하려면 -NoNewKey 옵션을 사용하여 이전에 생성된 를 재사용하도록 선택할 수 있습니다.

powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"

크레딧

카테고리