
PrivescCheck v2026.08.19-1
Windows용 권한 상승 열거 스크립트
PrivescCheck
공개 보안 표준에서 반드시 다루어지지 않는 일반적인 Windows 취약점 및 구성 문제를 신속하게 식별하고, 익스플로잇 및 사후 침투 작업에 유용한 정보를 수집합니다.
[!IMPORTANT] 이 도구를 사용할 때 알아야 할 주요 사항은 모든 액세스 제어 검사가 현재 사용자의 컨텍스트에서 수행된다는 것입니다. 따라서 관리자 권한으로 실행하면 잘못된 결과를 생성하지 않기 위해 많은 취약점 검사가 실제로 건너뜁니다.
🚀 빠른 시작
스크립트 다운로드: PrivescCheck.ps1
[!TIP] 위 링크는 PowerShell 터미널에서
(New-Object Net.WebClient).DownloadString(...)과 함께 직접 사용할 수도 있습니다.
사용 사례 1 (펜테스트): 기본 검사만 실행
로컬에서 권한 상승을 할 수 있는 명백한 방법이 있습니까?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck"
사용 사례 2 (연구): 확장 검사 실행 + 사람이 읽을 수 있는 보고서 작성
사후 침투 또는 타사 소프트웨어의 취약점을 찾는 데 활용할 수 있는 추가 정보가 있습니까?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML"
사용 사례 3 (감사): 모든 검사 실행 + 모든 보고서 작성
일반적인 보안 표준에서 다루지 않는 구성 문제가 있습니까?
powershell -ep bypass -c ". .\PrivescCheck.ps1; Invoke-PrivescCheck -Extended -Audit -Report PrivescCheck_$($env:COMPUTERNAME) -Format TXT,HTML,CSV,XML"
📖 상세 사용법
Invoke-PrivescCheck [-Extended] [-Audit] [-Experimental] [-Report <PREFIX>]
[-Format <FORMAT>[,...]] [-Risky] [-Silent] [-Force]
-Extended
스캔에 모든 "확장(extended)" 검사를 포함합니다 (README 참조).
-Audit
스캔에 모든 "감사(audit)" 검사를 포함합니다.
-Experimental
스캔에 모든 "실험적(experimental)" 검사를 포함합니다. 수행 중인 작업을
알고 있는 경우에만 사용하십시오.
-Report <PREFIX>
하나 이상의 보고서 파일을 생성합니다. 출력 파일 이름은 기본적으로
"PREFIX.txt"입니다. 확장자는 보고서 형식에 따라 자동으로 추가됩니다
("-Format <FORMAT>[,...]" 참조).
-Format <FORMAT>[,...]
출력 보고서 파일의 형식을 지정합니다. 설정하지 않으면 기본값은
"TXT"입니다. 지원되는 형식: "TXT", "HTML", "CSV", "XML".
-Risky
"위험(risky)"으로 표시된 검사를 포함합니다. 즉, 엔드포인트 보호 솔루션에
의해 차단 작업이 트리거될 가능성이 있는 검사입니다. 주의해서 사용하십시오.
-Silent
터미널 출력을 억제합니다. 예를 들어 예약된 작업에서 배치 파일의 일부로
스크립트를 실행하려는 경우 유용할 수 있습니다.
-Force
경고를 무시하고 강제로 실행합니다. 일반적으로 스크립트는 관리자 권한으로
실행되면 중지됩니다. 이 옵션을 사용하여 실행하십시오.
보고서 형식 > TXT (-Format TXT)
원시 텍스트 보고서를 생성하려면 -Report <PREFIX> 옵션(-Format TXT 포함)을 사용하십시오. 출력은 터미널에서 볼 수 있는 것과 유사하지만, 모든 텍스트 편집기와의 더 나은 (레트로) 호환성을 위해 ASCII 문자만 포함합니다.

보고서 형식 > HTML (-Format HTML)
HTML 보고서를 생성하려면 -Report <PREFIX> 옵션과 -Format HTML을 사용하십시오. 출력 파일은 웹 브라우저에서 열 수 있습니다. 원시 텍스트 보고서보다 데이터를 시각화하는 데 더 편리합니다. 또한 정렬 및 필터링 기능을 제공합니다!

보고서 형식 > CSV (-Format CSV) 및 XML (-Format XML)
CSV 또는 XML 보고서를 생성하려면 -Report <PREFIX> 옵션과 -Format CSV 또는 -Format XML을 사용하십시오. 출력 파일은 자동화된 보고 도구가 결과를 쉽게 파싱할 수 있도록 설계되었습니다.
[!NOTE] 출력 형식은 아직 문서화되지 않았지만, 이미 생성된 파일의 구조를 분석하면 쉽게 파악할 수 있습니다. 각 검사의
Id값을 사용하여 고유하게 식별할 수 있습니다.
검사 유형 > 기본(Base)
Base 유형의 검사는 스크립트가 관리자로 실행되지 않는 한 항상 실행됩니다. 주로 권한 상승 취약점 또는 기타 중요한 문제를 식별하기 위한 것입니다.
검사 유형 > 확장(Extended) (-Extended)
Extended 유형의 검사는 명령줄에 -Extended 옵션이 지정된 경우에만 실행할 수 있습니다. 주로 익스플로잇 개발 또는 사후 침투에 유용할 수 있는 추가 정보를 제공하기 위한 것입니다.
검사 유형 > 감사(Audit) (-Audit)
Audit 유형의 검사는 명령줄에 -Audit 옵션이 지정된 경우에만 실행할 수 있습니다. 주로 구성 감사 컨텍스트에서 관련된 정보를 제공하기 위한 것입니다.
💡 팁 및 요령
PowerShell 실행 정책
기본적으로 PowerShell 실행 정책은 새 powershell.exe 프로세스가 시작될 때 클라이언트에서는 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 프레임워크 버전 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"
빌드 스크립트는 각 모듈의 변수 이름을 선택하기 위해 무작위로 생성된 시드(seed) 와 함께 의사 난수 생성기를 사용합니다. 빌드 간에 재현 가능한 결과를 생성하려면 -NoNewSeed 옵션을 사용하여 이전에 생성된 시드를 재사용할 수 있습니다.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewSeed"
빌드 스크립트는 각 모듈의 내용을 난독화하기 위해 무작위로 생성된 키(key) 와 함께 AES 암호화를 사용합니다. 빌드 간에 재현 가능한 결과를 생성하려면 -NoNewKey 옵션을 사용하여 이전에 생성된 키를 재사용할 수 있습니다.
powershell -ep bypass ". .\build\Build.ps1; Invoke-Build -Name PrivescCheck -NoNewKey"
📑 크레딧
- 단어 목록 - CBHue/PyFuscation
- 알려진 취약 드라이버 목록 - https://www.loldrivers.io/