Adversaries may abuse the Windows service control manager to execute malicious commands or payloads. The Windows service control manager (services.exe
) is an interface to manage and manipulate services.(Citation: Microsoft Service Control Manager) The service control manager is accessible to users via GUI components as well as system utilities such assc.exe
and [Net](https://attack.mitre.org/software/S0039).PsExec can also be used to execute commands or payloads via a temporary Windows service created through the service control manager API.(Citation: Russinovich Sysinternals)
Adversaries may leverage these mechanisms to execute malicious content. This can be done by either executing a new or modified service. This technique is the execution used in conjunction with Windows Service during service persistence or privilege escalation.
Creates a service specifying an aribrary command and executes it. When executing commands such as PowerShell, the service will report that it did not start correctly even when code executes properly.
Upon successful execution, cmd.exe create a new service using sc.exe create that will start powershell.exe to create a new file art-marker.txt
Supported Platforms: Windows
Name | Description | Type | Default Value |
---|---|---|---|
service_name | Name of service to create | string | ARTService |
executable_command | Command to execute as a service | string | %COMSPEC% /c powershell.exe -nop -w hidden -command New-Item -ItemType File C:\art-marker.txt |
sc.exe create #{service_name} binPath= "#{executable_command}"
sc.exe start #{service_name}
sc.exe delete #{service_name}
del C:\art-marker.txt >nul 2>&1
Requires having Sysinternals installed, path to sysinternals is one of the input input_arguments Will start a process on a remote host.
Upon successful execution, cmd will utilize psexec.exe to spawn calc.exe on a remote endpoint (default:localhost).
Supported Platforms: Windows
Name | Description | Type | Default Value |
---|---|---|---|
remote_host | Remote hostname or IP address | string | localhost |
user_name | Username | String | DOMAIN\Administrator |
password | Password | String | P@ssw0rd1 |
psexec_exe | Path to PsExec | string | C:\PSTools\PsExec.exe |
#{psexec_exe} \\#{remote_host} -u #{user_name} -p #{password} -accepteula "C:\Windows\System32\calc.exe"
if (Test-Path "#{psexec_exe}") { exit 0} else { exit 1}
Invoke-WebRequest "https://download.sysinternals.com/files/PSTools.zip" -OutFile "$env:TEMP\PsTools.zip"
Expand-Archive $env:TEMP\PsTools.zip $env:TEMP\PsTools -Force
New-Item -ItemType Directory (Split-Path "#{psexec_exe}") -Force | Out-Null
Copy-Item $env:TEMP\PsTools\PsExec.exe "#{psexec_exe}" -Force