
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 문자만 포함합니다.

보고서 파일 형식 > HTML
-Report HTML 옵션을 사용하여 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"
크레딧
- 단어 목록 - CBHue/PyFuscation
- 알려진 취약 드라이버 목록 - https://www.loldrivers.io/