
DiagTrack RPC를 통해 SeImpersonate를 악용하는 Windows 권한 상승 익스플로잇으로, Secondary Logon을 사용하여 INTERACTIVE 토큰을 얻고 SYSTEM 권한을 획득합니다.
SeImpersonate 권한을 남용하는 또 다른 방법.
이 PoC는 @crisprss의 이 블로그를 기반으로 합니다.
이 블로그에서 @crisprss는 최신 SQL Server 버전에 포함된 AzureAttestService를 사용하여 SeImpersonate 권한을 남용하는 흥미로운 방법을 보여주었습니다. 이에 대한 PoC는 https://github.com/crisprss/magicAzureAttestService에서 찾을 수 있습니다.
그 블로그에서 그는 DiagTrack 서비스를 사용하여 SeImpersonate 권한을 남용할 수 있는 또 다른 방법도 보여주었지만, 작성자는 이를 무기화하지 못했습니다. 이 내용은 그 블로그에서 가져온 것입니다 (중국어에서 번역되어 100% 정확하지 않을 수 있음) :
But just when I thought it could be triggered normally, I didn't realize that this service is transparent to service users, which also means that it is not feasible to simulate pipeline privilege escalation through service users, because service users such as sqlserver There is no way to call the RPC interface, which also means that you can only escalate rights from the administrator user to SYSTEM in this way, so here is just a process sharing
그리고 네, 서비스 사용자로 해당 RPC 서버가 노출하는 메서드를 호출하려고 하면 access denied 오류가 발생합니다.

그런데 왜 일반적이고 권한이 없는 사용자는 이 메서드를 호출할 수 있을까요?
제 추측은 서비스 사용자가 세션 0에서 작동하기 때문에 해당 토큰에 NT AUTHORITY\INTERACTIVE SID가 없지만, RDP나 대화형으로 로그인하는 일반 사용자는 그 SID를 가질 것이라는 것이었습니다.
그렇다면 세션 0에서 NT AUTHORITY\INTERACTIVE SID를 어떻게 얻을 수 있을까요? 사실 매우 쉽습니다. Secondary Logon 서비스가 이를 대신해 줍니다.
LogonUser API 호출을 사용하여 NT AUTHORITY\INTERACTIVE SID가 있는 토큰을 얻을 수 있으며, NewCredentials(9) 로그온 유형을 사용할 것이므로 유효한 자격 증명이 필요하지 않습니다.
NewCredentials 로그온 유형을 사용하면 Secondary Logon이 새 로그온 세션을 만들고 호출자 토큰을 복사하지만 NT AUTHORITY\INTERACTIVE SID도 삽입합니다. 이는 우리에게 완벽한 상황입니다. 유효한 자격 증명이 필요 없기 때문입니다(NewCredentials 로그온 유형에 사용된 자격 증명은 사용자가 네트워크 리소스에 액세스하려고 할 때까지 검증되지 않습니다).
이제 NT AUTHORITY\INTERACTIVE SID가 있는 토큰을 확보했으니 익스플로잇이 작동할까요? 네, 작동합니다 :D

이 PoC는 Windows 10 및 Windows 2019에서 테스트되었습니다.
@crisprss - https://www.crisprx.top/archives/561