170 lines
5.0 KiB
PowerShell
170 lines
5.0 KiB
PowerShell
function New-ElevatedPersistenceOptions
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
|
|
Configure elevated persistence options for the Add-Persistence function.
|
|
|
|
PowerSploit Function: New-ElevatedPersistenceOptions
|
|
Author: Matthew Graeber (@mattifestation)
|
|
License: BSD 3-Clause
|
|
Required Dependencies: None
|
|
Optional Dependencies: None
|
|
|
|
.DESCRIPTION
|
|
|
|
New-ElevatedPersistenceOptions allows for the configuration of elevated persistence options. The output of this function is a required parameter of Add-Persistence. Available persitence options in order of stealth are the following: permanent WMI subscription, scheduled task, and registry.
|
|
|
|
.PARAMETER PermanentWMI
|
|
|
|
Persist via a permanent WMI event subscription. This option will be the most difficult to detect and remove.
|
|
|
|
Detection Difficulty: Difficult
|
|
Removal Difficulty: Difficult
|
|
User Detectable? No
|
|
|
|
.PARAMETER ScheduledTask
|
|
|
|
Persist via a scheduled task.
|
|
|
|
Detection Difficulty: Moderate
|
|
Removal Difficulty: Moderate
|
|
User Detectable? No
|
|
|
|
.PARAMETER Registry
|
|
|
|
Persist via the HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run registry key. Note: This option will briefly pop up a PowerShell console to the user.
|
|
|
|
Detection Difficulty: Easy
|
|
Removal Difficulty: Easy
|
|
User Detectable? Yes
|
|
|
|
.PARAMETER AtLogon
|
|
|
|
Starts the payload upon any user logon.
|
|
|
|
.PARAMETER AtStartup
|
|
|
|
Starts the payload within 240 and 325 seconds of computer startup.
|
|
|
|
.PARAMETER OnIdle
|
|
|
|
Starts the payload after one minute of idling.
|
|
|
|
.PARAMETER Daily
|
|
|
|
Starts the payload daily.
|
|
|
|
.PARAMETER At
|
|
|
|
Starts the payload at the specified time. You may specify times in the following formats: '12:31 AM', '2 AM', '23:00:00', or '4:06:26 PM'.
|
|
|
|
.EXAMPLE
|
|
|
|
C:\PS> $ElevatedOptions = New-ElevatedPersistenceOptions -PermanentWMI -Daily -At '3 PM'
|
|
|
|
.EXAMPLE
|
|
|
|
C:\PS> $ElevatedOptions = New-ElevatedPersistenceOptions -Registry -AtStartup
|
|
|
|
.EXAMPLE
|
|
|
|
C:\PS> $ElevatedOptions = New-ElevatedPersistenceOptions -ScheduledTask -OnIdle
|
|
|
|
.LINK
|
|
|
|
http://www.exploit-monday.com
|
|
#>
|
|
|
|
[CmdletBinding()] Param (
|
|
[Parameter( ParameterSetName = 'PermanentWMIDaily', Mandatory = $True )]
|
|
[Parameter( ParameterSetName = 'PermanentWMIAtStartup', Mandatory = $True )]
|
|
[Switch]
|
|
$PermanentWMI,
|
|
|
|
[Parameter( ParameterSetName = 'ScheduledTaskDaily', Mandatory = $True )]
|
|
[Parameter( ParameterSetName = 'ScheduledTaskAtLogon', Mandatory = $True )]
|
|
[Parameter( ParameterSetName = 'ScheduledTaskOnIdle', Mandatory = $True )]
|
|
[Switch]
|
|
$ScheduledTask,
|
|
|
|
[Parameter( ParameterSetName = 'Registry', Mandatory = $True )]
|
|
[Switch]
|
|
$Registry,
|
|
|
|
[Parameter( ParameterSetName = 'PermanentWMIDaily', Mandatory = $True )]
|
|
[Parameter( ParameterSetName = 'ScheduledTaskDaily', Mandatory = $True )]
|
|
[Switch]
|
|
$Daily,
|
|
|
|
[Parameter( ParameterSetName = 'PermanentWMIDaily', Mandatory = $True )]
|
|
[Parameter( ParameterSetName = 'ScheduledTaskDaily', Mandatory = $True )]
|
|
[DateTime]
|
|
$At,
|
|
|
|
[Parameter( ParameterSetName = 'ScheduledTaskOnIdle', Mandatory = $True )]
|
|
[Switch]
|
|
$OnIdle,
|
|
|
|
[Parameter( ParameterSetName = 'ScheduledTaskAtLogon', Mandatory = $True )]
|
|
[Parameter( ParameterSetName = 'Registry', Mandatory = $True )]
|
|
[Switch]
|
|
$AtLogon,
|
|
|
|
[Parameter( ParameterSetName = 'PermanentWMIAtStartup', Mandatory = $True )]
|
|
[Switch]
|
|
$AtStartup
|
|
)
|
|
|
|
$PersistenceOptionsTable = @{
|
|
Method = ''
|
|
Trigger = ''
|
|
Time = ''
|
|
}
|
|
|
|
switch ($PSCmdlet.ParameterSetName)
|
|
{
|
|
'PermanentWMIAtStartup'
|
|
{
|
|
$PersistenceOptionsTable['Method'] = 'PermanentWMI'
|
|
$PersistenceOptionsTable['Trigger'] = 'AtStartup'
|
|
}
|
|
|
|
'PermanentWMIDaily'
|
|
{
|
|
$PersistenceOptionsTable['Method'] = 'PermanentWMI'
|
|
$PersistenceOptionsTable['Trigger'] = 'Daily'
|
|
$PersistenceOptionsTable['Time'] = $At
|
|
}
|
|
|
|
'ScheduledTaskAtLogon'
|
|
{
|
|
$PersistenceOptionsTable['Method'] = 'ScheduledTask'
|
|
$PersistenceOptionsTable['Trigger'] = 'AtLogon'
|
|
}
|
|
|
|
'ScheduledTaskOnIdle'
|
|
{
|
|
$PersistenceOptionsTable['Method'] = 'ScheduledTask'
|
|
$PersistenceOptionsTable['Trigger'] = 'OnIdle'
|
|
}
|
|
|
|
'ScheduledTaskDaily'
|
|
{
|
|
$PersistenceOptionsTable['Method'] = 'ScheduledTask'
|
|
$PersistenceOptionsTable['Trigger'] = 'Daily'
|
|
$PersistenceOptionsTable['Time'] = $At
|
|
}
|
|
|
|
'Registry'
|
|
{
|
|
$PersistenceOptionsTable['Method'] = 'Registry'
|
|
$PersistenceOptionsTable['Trigger'] = 'AtLogon'
|
|
}
|
|
}
|
|
|
|
$PersistenceOptions = New-Object -TypeName PSObject -Property $PersistenceOptionsTable
|
|
$PersistenceOptions.PSObject.TypeNames[0] = 'PowerSploit.Persistence.ElevatedPersistenceOptions'
|
|
|
|
Write-Output $PersistenceOptions
|
|
} |