SessionExec permite executar comandos especificados em outras sessões em sistemas Windows, visando um ID de sessão específico ou todas as sessões, com a opção de suprimir a saída do comando.
A ferramenta é inspirada no código de exploração EOP COM Session Moniker, lançado há muito tempo por James Forshaw.
SessionExec utiliza APIs do Windows para consultar informações de sessão e criar processos dentro dessas sessões.
Compile SessionExec.cs executando o seguinte comando do Build Tools for Visual Studio
csc /reference:System.Runtime.InteropServices.dll /reference:System.Runtime.InteropServices.RuntimeInformation.dll SessionExec.cs /out:SessionExec.exe
Ou você pode usar Invoke-SessionExec.ps1
que é o mesmo script, mas é executado na memória usando o método Reflective Load.
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/Leo4j/SessionExec/main/Invoke-SessionExec.ps1')
Você também pode encontrar uma implementação pura em PowerShell desta ferramenta codificada por The-Viper-One aqui
SessionExec.exe[/NoOutput]
Invoke-SessionExec[/NoOutput]
Verifique quais sessões estão disponíveis usando o comando quser
. Em seguida, execute um comando em uma sessão específica ou All
as Sessões.
Se você for um administrador local em uma ou várias máquinas em uma rede e houver sessões de usuário nesses destinos, você poderá usar SessionExec e Find-LocalAdminAccess juntos para verificar se algum desses usuários tem acesso de administrador local em outras máquinas em a rede.
Se o fizerem, você poderá repetir o processo para usuários que tenham uma sessão nessas máquinas. Esta cadeia de ações poderia teoricamente levar a um compromisso total do domínio.
Além disso, você pode recuperar shells usando Amnesiac, capturar hashes NTLMv2 e retransmiti-los, capturar TGTs e muito mais, tudo de forma automatizada.
Implementarei esse conceito no Amnesiac e, junto com o The-Viper-One, estamos trabalhando para implementá-lo também no PsMapExec.
Por enquanto, aqui está uma Prova de Conceito (PoC):