SessionExec을 사용하면 명령 출력을 억제하는 옵션을 사용하여 특정 세션 ID 또는 모든 세션을 대상으로 Windows 시스템의 다른 세션에서 지정된 명령을 실행할 수 있습니다.
이 도구는 오래 전에 James Forshaw가 발표한 EOP COM Session Moniker 익스플로잇 코드에서 영감을 받았습니다.
SessionExec은 Windows API를 활용하여 세션 정보를 쿼리하고 해당 세션 내에서 프로세스를 생성합니다.
Visual Studio용 Build Tools에서 다음 명령을 실행하여 SessionExec.cs를 컴파일합니다.
csc /reference:System.Runtime.InteropServices.dll /reference:System.Runtime.InteropServices.RuntimeInformation.dll SessionExec.cs /out:SessionExec.exe
또는 동일한 스크립트이지만 Reflective Load 방법을 사용하여 메모리에서 실행되는 Invoke-SessionExec.ps1
사용할 수 있습니다.
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/Leo4j/SessionExec/main/Invoke-SessionExec.ps1')
여기에서 The-Viper-One이 코딩한 이 도구의 순수 Powershell 구현을 찾을 수도 있습니다.
SessionExec.exe[/NoOutput]
Invoke-SessionExec[/NoOutput]
quser
명령을 사용하여 사용 가능한 세션을 확인하십시오. 그런 다음 특정 세션 또는 All
세션에서 명령을 실행합니다.
자신이 네트워크 내의 하나 이상의 컴퓨터에서 로컬 관리자이고 해당 대상에 사용자 세션이 있는 경우 SessionExec 및 Find-LocalAdminAccess를 함께 사용하여 해당 사용자 중 다른 컴퓨터에 대한 로컬 관리자 액세스 권한이 있는지 확인할 수 있습니다. 네트워크.
그렇다면 해당 컴퓨터에서 세션을 갖고 있는 사용자에 대해 프로세스를 반복할 수 있습니다. 이러한 일련의 작업은 이론적으로 전체 도메인 손상으로 이어질 수 있습니다.
또한 Amnesiac을 사용하여 쉘을 다시 얻고, NTLMv2 해시를 캡처하여 전달하고, TGT를 가져오는 등 훨씬 더 많은 작업을 자동화된 방식으로 수행할 수 있습니다.
저는 이 개념을 Amnesiac에 구현할 예정이며, The-Viper-One과 함께 PsMapExec에도 구현하는 작업을 진행 중입니다.
현재 PoC(개념 증명)는 다음과 같습니다.