프로세스는 WMI를 사용하여 사용자 이름과 비밀번호 또는 해시가 알려진 호스트에서 열 수 있습니다. Wmiexec를 사용하여 WMI를 통해 명령이 실행되며, 반대화면 셸 경험을 제공합니다.
dcomexec.py: 다양한 DCOM 엔드포인트를 활용하여 이 스크립트는 wmiexec.py와 유사한 반대화면 셸을 제공하며, 특히 ShellBrowserWindow DCOM 객체를 활용합니다. 현재 MMC20, Application, Shell Windows 및 Shell Browser Window 객체를 지원합니다. (출처: Hacking Articles)
WMI Fundamentals
Namespace
디렉토리 스타일의 계층 구조로 구성된 WMI의 최상위 컨테이너는 \root이며, 그 아래에 네임스페이스라고 불리는 추가 디렉토리가 조직되어 있습니다.
네임스페이스를 나열하는 명령:
# Retrieval of Root namespacesgwmi-namespace"root"-Class"__Namespace"|SelectName# Enumeration of all namespaces (administrator privileges may be required)Get-WmiObject-Class"__Namespace"-Namespace"Root"-List-Recurse2> $null |select __Namespace |sort__Namespace# Listing of namespaces within "root\cimv2"Get-WmiObject-Class"__Namespace"-Namespace"root\cimv2"-List-Recurse2> $null |select __Namespace |sort__Namespace
네임스페이스 내의 클래스는 다음을 사용하여 나열할 수 있습니다:
gwmwi-List-Recurse# Defaults to "root\cimv2" if no namespace specifiedgwmi-Namespace"root/microsoft"-List-Recurse
클래스
WMI 클래스 이름, 예를 들어 win32_process, 및 그것이 위치한 네임스페이스를 아는 것은 모든 WMI 작업에 중요합니다.
win32로 시작하는 클래스를 나열하는 명령:
Get-WmiObject-Recurse-List-classwin32*|more# Defaults to "root\cimv2"gwmi-Namespace"root/microsoft"-List-Recurse-Class"MSFT_MpComput*"
클래스 호출:
# Defaults to "root/cimv2" when namespace isn't specifiedGet-WmiObject-Classwin32_shareGet-WmiObject-Namespace"root/microsoft/windows/defender"-ClassMSFT_MpComputerStatus
Methods
메서드는 WMI 클래스의 하나 이상의 실행 가능한 기능으로, 실행될 수 있습니다.
# Class loading, method listing, and execution$c = [wmiclass]"win32_share"$c.methods# To create a share: $c.Create("c:\share\path","name",0,$null,"My Description")
# Method listing and invocationInvoke-WmiMethod-Classwin32_share-NameCreate-ArgumentList@($null, "Description", $null, "Name", $null, "c:\share\path",0)
WMI 열거
WMI 서비스 상태
WMI 서비스가 작동하는지 확인하는 명령:
# WMI service status checkGet-ServiceWinmgmt# Via CMDnetstart|findstr"Instrumentation"