
Exploit de escalada de privilégios no Windows que abusa de SeImpersonate via RPC do DiagTrack, usando o Secondary Logon para obter um token INTERACTIVE e ganhar acesso SYSTEM.
Apenas mais uma forma de abusar do privilégio SeImpersonate.
Este PoC é baseado neste blog por @crisprss.
Neste blog, @crisprss mostrou um método interessante para abusar do privilégio SeImpersonate usando o AzureAttestService, que vem com versões recentes do SQL Server. O PoC para isso pode ser encontrado aqui: https://github.com/crisprss/magicAzureAttestService.
Nesse blog, ele também mostra outra forma possível de abusar do privilégio SeImpersonate usando o serviço DiagTrack, mas o autor não conseguiu transformá-la em uma arma funcional. Isto foi retirado desse blog (traduzido do chinês, então talvez não seja 100% preciso):
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
E sim, se você tentar chamar o método exposto por esse servidor RPC a partir de um usuário de serviço, você recebe um erro de acesso negado.

Mas por que usuários normais, sem privilégios, conseguem chamar esse método?
Minha suposição era que, como usuários de serviço operam na sessão 0, eles não terão NT AUTHORITY\INTERACTIVE SID em seu token, enquanto usuários normais que fazem login via RDP ou interativamente o terão.
Então, como podemos obter NT AUTHORITY\INTERACTIVE SID a partir da sessão 0? Muito fácil, na verdade o serviço Secondary Logon fará isso por nós.
Podemos usar a chamada de API LogonUser para obter um token com NT AUTHORITY\INTERACTIVE SID e não precisamos de credenciais válidas, pois usaremos o tipo de logon NewCredentials(9).
Quando o tipo de logon NewCredentials é usado, o Secondary Logon criará uma nova sessão de logon e copiará o token do chamador, mas também inserirá um NT AUTHORITY\INTERACTIVE SID. Essa é uma situação perfeita para nós, pois não precisamos ter credenciais válidas (as credenciais usadas com o tipo de logon NewCredentials não são verificadas até que o usuário tente acessar um recurso de rede).
Então, agora que temos um token com NT AUTHORITY\INTERACTIVE SID, o exploit funcionará? Sim, vai funcionar :D

Este PoC foi testado no Windows 10 e no Windows 2019.
@crisprss - https://www.crisprx.top/archives/561