Step 260. 윈도우 권한 상승 완전 정복 — 서비스·토큰·설정의 문들
Level 3 — CTF 실전과 공격 스킬 심화 | 난이도 ★★★★☆ | 예상 소요 시간 4시간
전제: Step 125의 리눅스 권한 상승 개념(설정 실수 vs 익스플로잇), Step 259의 리눅스 패턴 체크리스트를 마쳤다. PowerShell 기본 명령에 익숙하다.
- 준비물: 윈도우 PC (지금 쓰는 이 PC면 충분합니다). 오늘의 명령은 전부 읽기 전용이라 실제 PC에서 실측합니다 — 여러분 PC에 진짜 취약 패턴이 발견될 수도 있습니다. winPEAS 본체와 공격 장면은 출력 예시로 제시합니다.
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다.
리눅스의 상승이 SUID·sudo·cron의 세계였다면, 윈도우는 다른 생태계입니다 — 서비스, 토큰 특권, 레지스트리 설정이 무대입니다. 그런데 사고방식의 뼈대는 같습니다. Step 259의 그 질문, "높은 권한이 실행하는 것을 낮은 권한이 바꿀 수 있는가?"가 윈도우에서도 통합니다. 오늘은 윈도우의 대표 패턴 네 가지 — 서비스 실행 파일 권한, Unquoted Service Path, AlwaysInstallElevated, SeImpersonatePrivilege — 를 내 PC에서 직접 진단해 보며 윈도우판 체크리스트를 완성합니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
whoami /priv출력을 읽고SeImpersonatePrivilege의 의미를 안다Get-CimInstance Win32_Service로 서비스의 실행 경로·계정을 열거한다- Unquoted Service Path를 찾아내고 성립 조건을 판정한다
icacls출력에서(F),(RX)등의 권한 표기를 읽는다- AlwaysInstallElevated 레지스트리 두 곳을 확인한다
- winPEAS 출력의 우선순위 읽는 법을 안다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 윈도우 PowerShell (읽기 전용 실측) + winPEAS·공격 장면 출력 예시 |
| 오늘의 명령 | whoami /priv, Get-Service, Get-CimInstance Win32_Service, icacls, 레지스트리 조회 |
| 필요한 개념 | 서비스 계정(LocalSystem), 토큰 특권(privilege), Unquoted Service Path, AlwaysInstallElevated, Potato 계열 |
| 오늘의 산출물 | 윈도우 privesc 체크리스트 v1 + 내 PC 진단 기록 |
2-1. 윈도우의 "root"는 누구인가 — SYSTEM과 서비스
윈도우의 최고 권한 계정은 SYSTEM(정확히는 NT AUTHORITY\SYSTEM)입니다. 그리고 윈도우에서 "관리자가 자동으로 돌리는 일"은 크론이 아니라 서비스(service)가 담당합니다. 서비스는 Get-CimInstance Win32_Service의 StartName 칸에 적힌 계정으로 실행되는데, 여기에 LocalSystem이 적힌 서비스가 많습니다.
그래서 윈도우 상승의 핵심 질문은 이렇게 번역됩니다 — "SYSTEM으로 도는 서비스의 실행 파일이나 경로를 내가 바꿀 수 있는가?" 리눅스의 "root 크론이 도는 스크립트를 내가 고칠 수 있는가"와 정확히 같은 질문입니다.
2-2. 토큰과 특권 — whoami /priv 읽기
윈도우에서 로그인한 모든 주체는 액세스 토큰(access token)이라는 신분증을 받습니다. 이 신분증에는 그룹 소속과 함께 특권(privilege) 목록이 적힙니다 — whoami /priv가 보여 주는 것이 바로 그 목록입니다.
수십 가지 특권 중 공격자가 찾는 이름은 SeImpersonatePrivilege("다른 주체를 가장할 수 있는 권한")입니다. 원래 이 특권은 서비스 계정(IIS의 iis apppool\defaultapppool, NT SERVICE\... 등)이 클라이언트를 대신해 일하도록 설계된 것인데, 이 특권을 가진 쉘을 얻으면 Potato 계열(PrintSpoofer, GodPotato 등) 공격으로 SYSTEM의 신분증을 "가장"해 훔칠 수 있습니다. 웹셸 하나 얻었는데 그 계정이 이 특권을 가지고 있었다 — 그것이 윈도우 상승의 가장 흔한 전개입니다.
2-3. Unquoted Service Path — 공백과 따옴표의 함정
서비스의 실행 경로가 레지스트리에 이렇게 등록돼 있다고 합시다:
C:\Program Files (x86)\Vendor\Product Name\Service.exe
따옴표가 없는 상태로요. 윈도우는 이 문자열을 앞에서부터 공백 단위로 끊어 읽으며, 각 지점에서 실행 파일을 찾습니다:
C:\Program.exe→ 없으면C:\Program Files (x86)\Vendor\Product.exe→ 없으면C:\Program Files (x86)\Vendor\Product Name\Service.exe→ 최종 실행
즉 공격자가 중간 지점 중 쓰기 가능한 폴더에 Product.exe 같은 이름의 파일을 심어 두면, 다음 서비스 재시작 때 SYSTEM 권한으로 그것이 실행됩니다. "경로에 공백이 있는데 따옴표가 없는 서비스"를 찾는 것이 이 패턴의 탐색이고, 3-3에서 여러분 PC를 직접 진단합니다.
2-4. AlwaysInstallElevated — 레지스트리 두 곳의 실수
윈도우 설치 패키지(.msi)는 관리자 권한 설치가 원칙입니다. 그런데 레지스트리 두 곳 — HKLM과 HKCU의 SOFTWARE\Policies\Microsoft\Windows\Installer — 에 AlwaysInstallElevated = 1이 동시에 설정돼 있으면, 일반 사용자가 실행한 .msi도 SYSTEM 권한으로 설치됩니다. 관리 편의를 위해 남긴 이 설정은, 공격자에게는 "악성 msi를 만들어 더블클릭하는 것만으로 SYSTEM"이라는 뜻입니다. 확인은 읽기 한 줄이면 끝납니다 — 3-4에서 실측합니다.
2-5. winPEAS — 윈도우판 자동 열거
Step 126의 linPEAS와 같은 프로젝트(PEASS-ng)의 윈도우판이 winPEAS입니다. 서비스 권한, Unquoted Path, AlwaysInstallElevated, 저장된 자격증명, 최신 패치 누락까지 수백 항목을 한 번에 긁어 강조 표시해 줍니다. 원칙은 linPEAS와 같습니다 — 도구가 모으고, 사람이 확정한다. 한 가지 윈도우 특유의 주의가 있습니다: winPEAS 실행 파일과 Potato 계열 도구는 Defender(백신)가 잡습니다. 랩에서는 끄고 연습하고, "왜 잡히는가"(알려진 공격 도구의 시그니처)까지 생각하는 것이 실전 감각입니다.
3. 따라 하기
오늘의 명령은 전부 읽기 전용입니다 — 여러분의 실제 윈도우 PC에서 안전하게 실행할 수 있습니다. PowerShell을 열고 따라 하세요. 실측은 2026-09-09 Windows PowerShell 5.1에서 수행했습니다 (계정명·PC명은 가공).
3-1. 나의 특권 신분증 — whoami /priv
whoami
whoami /priv
출력 (2026-09-09 실측):
labpc\student
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ==================================== ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
읽는 법: 다섯 개뿐이고, 결정적으로 SeImpersonatePrivilege가 없습니다 — 이것이 일반 사용자의 정상 상태입니다. 랩에서 웹셸·서비스 쉘을 얻었을 때 이 목록에 SeImpersonatePrivilege가 보이면, 그것이 "Potato 계열을 검토하라"는 신호입니다. 함께 볼 것: whoami /groups의 첫 줄은 보통 Mandatory Label\Medium Mandatory Level — "나는 중간 무결성 수준의 일반 사용자"라는 뜻입니다 (2026-09-09 실측).
3-2. 서비스 지도 — 누가 SYSTEM으로 도는가
Get-Service | Where-Object {$_.Status -eq 'Running'} | Select-Object -First 5
Get-CimInstance Win32_Service | Select-Object -First 3 Name, State, StartName, PathName | Format-List
출력 (2026-09-09 실측, 일부):
Status Name DisplayName
------ ---- -----------
Running Appinfo Application Information
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
...
Name : ADPSvc
State : Stopped
StartName : NT AUTHORITY\LocalService
PathName : C:\WINDOWS\system32\svchost.exe -k LocalServiceAndNoImpersonation -p
...
읽는 법: Win32_Service의 네 칸이 서비스 진단의 전부입니다 — Name(이름), State(도는 중?), StartName(어떤 권한으로? — LocalSystem이면 대박 후보), PathName(무엇을 실행?). 리눅스의 cat /etc/crontab에 해당하는, "높은 권한이 자동으로 실행하는 것"의 목록입니다. 참고로 Git Bash가 설치된 환경에서 PowerShell 안의 whoami가 Git의 것으로 잡혀 /usr/bin/whoami: extra operand '/priv' 오류가 날 수 있습니다 (2026-09-09 실측) — 그때는 C:\Windows\System32\whoami.exe로 전체 경로를 적으세요.
3-3. Unquoted Service Path 진단 — 내 PC에서 찾아보기
Get-CimInstance Win32_Service | Where-Object {
$_.PathName -match '^[A-Za-z]:\\[^"].* .*\.exe' -and $_.PathName -notmatch '^"'
} | Select-Object Name, State, StartName, PathName | Format-List
조건은 "따옴표로 시작하지 않는데(-notmatch '^"'), 공백이 있고(.* .*), exe로 끝나는 경로". 출력 (2026-09-09 실측 — 실제로 두 개가 발견됐습니다):
Name : HncUpdateService_2020
State : Running
StartMode: Auto
StartName: LocalSystem
PathName : C:\Program Files (x86)\HNC\Office 2020\HncUtils\Service\HncUpdateService.exe
Name : TCWSCSVC
State : Running
StartMode: Auto
StartName: LocalSystem
PathName : C:\Program Files (x86)\EPS\Lib\SupportTC\TCWSLocalServer.exe
읽는 법: 패턴의 형태는 완벽합니다 — 따옴표 없음, 공백 있음(Office 2020 등), 심지어 LocalSystem + 자동 시작 + 실행 중. 그러면 첫 번째 서비스의 경우 윈도우는 이렇게 찾습니다 — C:\Program Files (x86)\HNC\Office.exe → 없으면 → ...\HncUtils\Service\...로 진행. 그런데 후보는 후보일 뿐입니다 (Step 126의 원칙). 성립 여부는 다음 질문이 결정합니다 — "내가 C:\Program Files (x86)\HNC\ 폴더에 Office.exe를 만들 수 있는가?" 그래서 바로 다음 절의 권한 확인으로 넘어갑니다.
3-4. icacls — 후보의 유효성 판정
icacls "C:\Program Files (x86)\HNC\Office 2020\HncUtils\Service\HncUpdateService.exe"
icacls "C:\Program Files (x86)\EPS\Lib"
출력 (2026-09-09 실측, 핵심 행):
... HncUpdateService.exe NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
...
Successfully processed 1 files; Failed processing 0 files
C:\Program Files (x86)\EPS\Lib NT SERVICE\TrustedInstaller:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
...
읽는 법: icacls의 권한 약자 — (F) Full Control(전체), (RX) Read & Execute(읽기·실행), (W) 쓰기, (I) 상속받음. BUILTIN\Users — 즉 일반 사용자 — 에게는 전부 (RX)뿐입니다. 쓰기가 없으므로 이 두 후보는 "무효" 판정입니다. 실행 파일도, 중간 폴더도 일반 사용자가 못 바꿉니다. 이것이 오늘 실측의 가장 중요한 수확입니다 — 실제 PC에서 패턴 형태를 찾고, 권한으로 무효를 판정하는 것까지가 한 세트의 진단입니다. 랩의 취약 머신에서는 이 자리에 BUILTIN\Users:(F) 또는 (W)가 서 있습니다 — 그 한 글자가 상승 경로입니다.
3-5. AlwaysInstallElevated — 레지스트리 두 곳 확인
Get-ItemProperty "HKCU:\SOFTWARE\Policies\Microsoft\Windows\Installer" -ErrorAction SilentlyContinue
Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer" -ErrorAction SilentlyContinue
출력 (2026-09-09 실측):
(두 곳 모두 키가 없음 — 아무 출력 없이 돌아옴)
읽는 법: 키 자체가 없으면 값이 0인 것과 같습니다 — 취약하지 않은 정상 상태입니다. 이 설정이 위험하려면 HKLM과 HKCU 양쪽 모두 AlwaysInstallElevated = 1이어야 합니다 — 한쪽만이면 성립하지 않습니다. 랩에서는 reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated 형태로도 자주 확인합니다 (같은 값의 다른 조회법).
3-6. winPEAS — 출력 예시
winPEAS는 이 환경에 설치하지 않았으므로(설치하면 Defender가 잡습니다), 랩에서의 흐름을 출력 예시로 봅니다:
# 랩 머신에서 (출력 예시)
.\winPEASx64.exe quiet fastinfo > peas.txt
══════════╣ Services Information ╠══════════
[+] Interesting Services -non Microsoft-
HncUpdateService_2020 (HNC)[C:\Program Files (x86)\...\HncUpdateService.exe]
- Unquoted and Space detected! ← 빨간 강조: Unquoted Service Path 후보
══════════╣ Registry: AlwaysInstallElevated ╠══════════
HKCU: 1, HKLM: 1 ← 빨간 강조: 양쪽 1 = 취약
══════════╣ Token privileges ╠══════════
SeImpersonatePrivilege: Enabled ← 빨간 강조: Potato 계열 후보
읽는 법: 오늘 수동으로 진단한 세 패턴이 winPEAS에서도 정확히 같은 항목으로 강조됩니다. 자동화는 "빠뜨림 방지"일 뿐, 판정 기준(icacls의 쓰기 권한, 레지스트리 양쪽 1, 특권 유무)은 여러분이 수동으로 배운 그대로입니다. 그리고 마지막 관문을 기억하세요 — 서비스 파일을 교체하거나 msi를 심는 행동은 랩 전용이며, 그 파일들은 Defender의 시그니처에 걸리는 것이 정상입니다.
4. 미션과 연습문제
미션 — 윈도우 privesc 체크리스트 v1 + 내 PC 진단서
- 3-1~3-5의 명령을 여러분 PC에서 전부 실행하고 출력을 저장합니다
- Unquoted Service Path 검색에서 발견된 후보 각각에
icacls판정(유효/무효)을 붙입니다 — 없으면 "없음 확인"을 기록합니다 - 네 패턴(서비스 파일 권한, Unquoted Path, AlwaysInstallElevated, SeImpersonatePrivilege)의 ① 탐색 명령 ② 성립 조건 ③ 왜 위험한가를 표로 정리해
win-privesc-체크리스트-v1.md를 만듭니다 - Step 259의 리눅스 체크리스트와 나란히 놓고 "공통 질문 / 다른 명령"을 비교하는 한 단락을 씁니다
- (랩이 있다면) 취약 윈도우 머신에서 실제 상승 경로 하나를 확정하고 전후
whoami를 증거로 남깁니다
연습문제
문제 1. whoami /priv에 SeImpersonatePrivilege가 있으면 어떤 공격 계열을 검토해야 하며, 이 특권의 본래 용도는 무엇인가요?
문제 2. Unquoted Service Path가 "형태는 취약인데 무효"로 판정되는 경우를 3-3/3-4 실측을 근거로 설명해 보세요.
문제 3. AlwaysInstallElevated가 위험해지려면 레지스트리 조건이 어떻게 되어야 하며, 그때 공격의 재료 파일 형식은 무엇인가요?
문제 4. 서비스 진단에서 Win32_Service의 StartName을 반드시 확인하는 이유를 "높은 권한이 실행하는 것"이라는 관점에서 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
체크리스트 v1의 완성 예시:
| 패턴 | 탐색 명령 | 성립 조건 | 왜 위험한가 |
|---|---|---|---|
| 서비스 실행 파일 | Get-CimInstance Win32_Service + icacls |
Users에게 (F) 또는 (W) | SYSTEM 서비스의 실행체 교체 |
| Unquoted Path | 정규식 필터(3-3) | 중간 폴더 쓰기 가능 | 공백 지점에 exe 심으면 SYSTEM 실행 |
| AlwaysInstallElevated | HKLM·HKCU 레지스트리 조회 | 양쪽 모두 1 | msi가 SYSTEM으로 설치됨 |
| 토큰 특권 | whoami /priv |
SeImpersonatePrivilege 보유 | Potato 계열로 SYSTEM 가장 |
내 PC 진단서의 예시 결론 (3절 실측): "Unquoted 후보 2건 발견(HncUpdateService_2020, TCWSCSVC) — 모두 LocalSystem·자동 시작이나 Users 권한이 (RX)뿐이라 무효. AlwaysInstallElevated 키 없음(정상). 본인 계정에 SeImpersonatePrivilege 없음(정상)."
검증하는 법: ① 진단서에 "발견"과 "판정"이 분리돼 있는가 — 후보 발견으로 끝내면 미완성입니다. ② 무효 판정에 icacls 출력 근거가 붙었는가. ③ 리눅스 체크리스트와의 비교 단락에 "높은 권한이 실행하는 것을 낮은 권한이 바꿀 수 있는가"라는 공통 질문이 보이는가.
연습문제 해답
문제 1 해답. Potato 계열(PrintSpoofer, GodPotato 등)을 검토합니다 — SYSTEM 프로세스를 속여 그 토큰을 "가장(impersonate)"하게 만드는 공격입니다. 본래 용도는 서비스 계정이 접속해 온 클라이언트의 신분을 잠시 빌려 그 권한으로 일을 처리하기 위한 정상 기능입니다. 그래서 서비스 계정 쉘에서 이 특권이 흔히 발견되고, 그것이 웹셸→SYSTEM 상승의 표준 경로입니다.
문제 2 해답. 경로에 공백이 있고 따옴표가 없어도(형태), 공격자가 파일을 심을 중간 지점 폴더에 쓰기 권한이 없으면 성립하지 않습니다. 3-3에서 두 서비스가 LocalSystem의 Unquoted Path로 발견됐지만, 3-4의 icacls에서 BUILTIN\Users:(I)(RX) — 읽기·실행뿐이라 Office.exe를 심을 수 없어 무효로 판정했습니다. 형태 발견 → 권한 판정의 두 단계가 항상 붙어야 합니다.
문제 3 해답. HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer와 HKCU\... 두 곳 모두 AlwaysInstallElevated = 1이어야 합니다. 이때 공격 재료는 .msi 설치 패키지입니다 — 랩에서는 msfvenom으로 리버스 쉘 msi를 만들어 실행하면 설치 관리자가 SYSTEM 권한으로 내용물을 실행합니다. 3-5 실측처럼 키가 없으면 값 0과 동일한 정상 상태입니다.
문제 4 해답. 서비스를 교체·조작해서 얻는 권한은 그 서비스의 실행 계정 권한이기 때문입니다. StartName이 LocalSystem이면 성공 시 최고 권한이지만, LocalService나 도메인 사용자면 그 권한에 그칩니다. "높은 권한이 실행하는 것"이라는 전제가 StartName 칸에서 확인되지 않으면, 실행 파일이 쓰기 가능해도 상승의 가치가 없을 수 있습니다 — 판정 순서가 StartName → PathName → icacls인 이유입니다.
완료 기준 체크리스트
- [ ]
whoami /priv에서 SeImpersonatePrivilege 유무를 확인하고 의미를 안다 - [ ]
Get-CimInstance Win32_Service의 네 칸(Name/State/StartName/PathName)을 읽는다 - [ ] Unquoted Service Path 검색 명령을 직접 실행해 봤다
- [ ]
icacls출력에서 (F)·(RX)를 구분해 유효/무효를 판정할 수 있다 - [ ] AlwaysInstallElevated의 "두 곳 모두 1" 조건을 안다
- [ ] winPEAS의 역할과 Defender 탐지를 설명할 수 있다
- [ ] 미션:
win-privesc-체크리스트-v1.md와 내 PC 진단서를 완성했다
6. 흔한 실수와 해결
벽 1. whoami /priv가 "extra operand" 오류를 낸다
증상 (2026-09-09 실측):
/usr/bin/whoami: extra operand '/priv'
Try '/usr/bin/whoami --help' for more information.
원인: Git Bash 등이 설치된 PC에서는 PATH에서 유닉스판 whoami가 먼저 잡힙니다 — 유닉스 whoami에는 /priv 옵션이 없습니다.
해결: 전체 경로로 호출하세요 — C:\Windows\System32\whoami.exe /priv. PowerShell에서는 & C:\Windows\System32\whoami.exe /priv 형태가 확실합니다.
벽 2. Unquoted Path를 찾았는데 다음에 뭘 해야 할지 모른다
증상: 후보를 찾고 손이 멈춥니다.
원인: "발견"과 "성립" 사이의 판정 절차가 빠진 것입니다.
해결: 순서표를 외우세요 — ① PathName에서 공백 지점 목록 만들기(예: ...\HNC\Office.exe) → ② 각 지점의 폴더에 icacls → ③ Users/내 그룹에 (F)·(W)가 있는 지점이 있으면 유효, 없으면 무효 기록. ③까지가 한 사이클입니다.
벽 3. winPEAS를 받자마자 파일이 사라진다
증상: 다운로드한 exe가 실행도 전에 없어집니다.
원인: Defender 실시간 보호가 알려진 공격 도구의 시그니처로 즉시 격리한 것입니다 — 정상 동작입니다.
해결: 랩 VM에서는 "Windows 보안 → 바이러스 및 위협 방지 → 실시간 보호 끄기" 후 진행하세요 (랩 전용). 그리고 한 걸음 더 생각하세요 — 실전에서 도구가 잡힌다는 것은 탐지가 살아 있다는 뜻이고, 그래서 실무 침투 테스트에서는 수동 명령(오늘 배운 읽기 전용 진단)의 비중이 커집니다. 백신을 "방해물"이 아니라 "탐지의 기준선"으로 읽는 것이 성숙한 관점입니다.
벽 4. 레지스트리 조회에서 오류가 빨갛게 뜬다
증상: Get-ItemProperty가 경로를 못 찾는다는 빨간 오류.
원인: 키가 존재하지 않는 것 — 취약하지 않다는 뜻이지 명령 실패가 아닙니다.
해결: -ErrorAction SilentlyContinue를 붙이면 조용히 넘어갑니다 (3-5 명령 참조). "없음"을 오류가 아닌 정상 판정 결과로 기록하세요 — 열거는 무엇이 없는지 확인하는 일이기도 합니다 (Step 126).
벽 5. SYSTEM이 최고인 줄 알았는데 그 위가 있다는 말을 듣는다
증상: TrustedInstaller라는 이름이 icacls에서 SYSTEM보다 먼저 나옵니다 (3-4 출력에도 있습니다).
원인: 윈도우에는 SYSTEM 위의 주체인 TrustedInstaller(윈도우 구성 요소 설치 서비스)가 있어, 일부 시스템 파일의 소유자가 TrustedInstaller입니다.
해결: 지금 단계에서는 존재만 알아 두세요. 실무 판정에 필요한 것은 "내 그룹(Users 등)에 쓰기가 있는가"뿐이고, SYSTEM/TrustedInstaller의 서열은 상승 이후의 이야기입니다. 판정 기준을 복잡하게 만들지 마세요.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| SYSTEM (LocalSystem) | 윈도우의 최고 권한 — 서비스 상승의 목표 지점 |
| 액세스 토큰·특권 | 로그인 신분증에 적힌 권한 목록 — whoami /priv |
| SeImpersonatePrivilege | "가장" 특권 — Potato 계열 상승의 씨앗 |
| Unquoted Service Path | 따옴표 없는 공백 경로 — 중간 지점 exe 심기 |
| AlwaysInstallElevated | HKLM·HKCU 둘 다 1이면 msi가 SYSTEM 설치 |
| winPEAS | 윈도우판 자동 열거 — 후보 수집, 판정은 사람 |
오늘의 명령어
| 명령 | 하는 일 |
|---|---|
whoami /priv |
내 토큰의 특권 목록 |
whoami /groups |
그룹·무결성 수준 확인 |
Get-CimInstance Win32_Service |
서비스의 계정·경로 지도 |
icacls 경로 |
파일·폴더의 권한 판정 ((F)/(RX)) |
Get-ItemProperty HKLM:\...\Installer |
AlwaysInstallElevated 확인 |
.\winPEASx64.exe |
자동 열거 (랩 전용, 출력 예시) |
명령어보다 중요한 감각
리눅스와 윈도우는 명령이 다를 뿐, 질문은 하나입니다 — "높은 권한이 실행하는 것을 낮은 권한이 바꿀 수 있는가?" crontab이 Win32_Service로, ls -l이 icacls로 바뀌었을 뿐입니다. 그리고 오늘 실측이 보여 준 또 하나의 감각 — 실제 PC에서도 Unquoted Path 후보는 흔히 발견되지만, 대부분 권한에서 무효가 됩니다. 취약점은 "형태"가 아니라 "형태 × 권한"의 곱입니다. 발견하고 판정하는 것, 그 두 박자가 상승 정찰의 리듬입니다.
전부 체크되면 Step 260 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.