前言:

最近配置openvas的时候安装了redis,听说曾经曝出过一个未授权访问漏洞,便找了一下相关资料想自己动手复现一下漏洞的利用过程,当然所有的攻击性操作都是在虚拟机上完成的,本文所有的操作是在Fedora26上进行的,使用的虚拟机为Oracle VM VirtualBox。过程中遇到了不少坑,在此整理一下过程,供像我一样怀有好奇心的小白们学习参考,如有差错还请各位大牛们斧正。 

一、漏洞简介以及危害:

1.什么是redis未授权访问漏洞:

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。

简单说,漏洞的产生条件有以下两点:

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

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

2.漏洞的危害:

(1)攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;

(2)攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件;

(3)最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器

二、漏洞的复现和利用:

1.SSH免密登录原理简介:

在正式开始介绍复现过程前,先说明一下我复现的是最严重的漏洞利用情况即以root身份登录redis服务写入ssh公钥实现使用ssh免密登录受害主机。现在先说明一下SSH免密登录的原理(已经了解的童靴们可以直接跳过hhh):

SSH提供两种登录验证方式,一种是口令验证也就是账号密码登录,另一种是密钥验证也就是我们想要的免密登录了,这里我只简单说一下密钥验证的原理。

所谓密钥验证,其实就是一种基于公钥密码的认证,使用公钥加密、私钥解密,其中公钥是可以公开的,放在服务器端,你可以把同一个公钥放在所有你想SSH远程登录的服务器中,而私钥是保密的只有你自己知道,公钥加密的消息只有私钥才能解密,大体过程如下:

(1)客户端生成私钥和公钥,并把公钥拷贝给服务器端;

(2)客户端发起登录请求,发送自己的相关信息;

(3)服务器端根据客户端发来的信息查找是否存有该客户端的公钥,若没有拒绝登录,若有则生成一段随机数使用该公钥加密后发送给客户端;

(4)客户端收到服务器发来的加密后的消息后使用私钥解密,并把解密后的结果发给服务器用于验证;

(5)服务器收到客户端发来的解密结果,与自己刚才生成的随机数比对,若一样则允许登录,不一样则拒绝登录。

2.漏洞环境搭建:

(一)安装redis服务:

(1)从官网下载源码的压缩包:

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

(2)下载完成后,解压压缩包:

tar xzf redis-3.2.11.tar.gz;

(3)然后进入解压后的目录:cd redis-3.2.11,输入make并执行,再输入make install执行;

(4)make结束后,进入src目录:cd src,将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了):

(5)返回目录redis-3.2.11,将redis.conf拷贝到/etc/目录下:

(6)编辑etc中的redis配置文件redis.conf,如下图所示:

去掉ip绑定,允许除本地外的主机远程登录redis服务:

关闭保护模式,允许远程连接redis服务:

(7)使用/etc/目录下的reids.conf文件中的配置启动redis服务:

redis-server /etc/redis.conf

(二)安装ssh服务:

fedora26安装有ssh服务,但默认没有启动,需使用systemctl start sshd命令启动ssh服务。

(三)复制虚拟机,一个作为靶机,一个作为攻击端

至此漏洞环境便已经搭建完毕,此时的redis服务是可以以root用户身份远程免密码登录的。

3.漏洞利用重现:

(1)我使用的虚拟机是Oracle VM VirtualBox,首先配置网络,都设置为桥接网卡,界面为环回适配器,混杂模式为全部允许,使两台虚拟机之间可以互相通信:

(2)使用ifconfig命令查看两台虚拟机的ip:

如果ip一样,则修改一台虚拟机ip,我修改了右侧虚拟机ip为192.168.0.147:

ifconfig enp0s3 192.168.0.147 up

虚拟机A(192.168.0.146)为靶机,虚拟机B(192.168.0.147)为攻击端;

(3)在A中开启redis服务:redis-server /etc/redis.conf ;

(4)在主机A中执行mkdir /root/.ssh命令,创建ssh公钥存放目录(A是作为ssh服务器使用的)

(5)在B中生成ssh公钥和私钥,密码设置为空:

进入.ssh目录:cd .ssh/,将生成的公钥保存到1.txt:

(6)ping一下目标主机ip确定能通,若不能则再运行一遍ifconfig enp0s3 192.168.0.147 up命令,我的可以ping通:

(7)将1.txt写入redis(使用redis-cli -h ip命令连接主机A,将文件写入):

(8)远程登录主机A的redis服务:redis-cli -h 192.168.0.146  并使用CONFIG GET dir命令得到redis备份的路径:

(9)更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh):

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

(11)检查是否更改成功(查看有没有authorized_keys文件),没有问题就保存然后退出,至此成功写入ssh公钥到靶机:

(12)开启主机A和主机B的ssh服务(Fedor默认ssh服务关闭),命令为systemctl start sshd.serveice:

(13)在主机B使用ssh免密登录主机A:ssh -i id_rsa root@192.168.0.146,成功登录:

至此,我们就成功利用redis未授权访问漏洞实现了ssh免密登录目标服务器,接下来就可以使用ssh服务来进行下一步的渗透工作啦。

转载自:http://www.freebuf.com/vuls/162035.html

Redis未授权访问漏洞的重现与利用相关推荐

  1. Redis未授权访问漏洞记录(端口:6379)

    目录 Redis 扫描 未授权登录以及利用 写入SSH公钥,进行远程登录 定时任务反弹shell 写入一句话木马 其它一句话木马 ​ 写入/etc/passwd文件 利用主从复制RCE ​ 本地Red ...

  2. Redis未授权访问漏洞详细版

    Redis未授权访问漏洞 Redis未授权访问漏洞原理 Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 ...

  3. 漏洞检测与防御:Redis未授权访问漏洞复现

    漏洞检测与防御:Redis未授权访问漏洞复现 1. 未授权访问漏洞 未授权访问漏洞可以理解为安全配置.权限认证.授权页面存在缺陷,导致其他用户可以直接访问,从而引发权限可被操作,数据库.网站目录等敏感 ...

  4. Redis未授权访问漏洞(四)SSH key免密登录

    前言 系列文章 Redis未授权访问漏洞(一)先导篇 Redis未授权访问漏洞(二)Webshell提权篇 Redis未授权访问漏洞(三)Redis写入反弹连接定时任务 SSH key免密登录 实战实 ...

  5. Redis未授权访问漏洞的利用及防护

    什么是Redis未授权访问漏洞? Redis在默认情况下,会绑定在0.0.0.0:6379.如果没有采取相关的安全策略,比如添加防火墙规则.避免其他非信任来源IP访问等,这样会使Redis服务完全暴露 ...

  6. 未授权访问漏洞-Redis未授权访问漏洞

    文章目录 未授权概述 常见未授权访问漏洞 Redis未授权访问 Redis简介 应用场景 Redis 架构 漏洞发现 端口 端口探测 Redis常用命令 Redis历史漏洞 Redis未授权访问 Re ...

  7. 哪种修复redis未授权访问漏洞的方法是相对不安全的_关于Linux挖矿、DDOS等应急事件处置方法...

    前言 从去年六月份到现在做的应急响应.事件分析大大小小的做了数百个,主要遇到的有挖矿.DDoS.短信接口盗刷.用户接口泄漏.越权信息获取.挂黑页.删数据等.本文只针对自己做的应急响应中的挖矿和DDoS ...

  8. Redis 未授权访问漏洞与getshell(附getshell检测工具)

    0x00 Redis简介 Redis 简介. Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,常见用来作为数据库,其在安全配置问题上存在一些问题 ...

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

    Redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...

最新文章

  1. java.lang.OutOfMemoryError: Java heap space错误及...
  2. C/C++中extern关键字
  3. IntelliJ IDEA 建空包合并问题。
  4. python的常量和变量_python变量和常量
  5. JavaScript 图片的上传前预览
  6. 【英语学习】【科学】【Glencoe Science】【A】Life's Structure and Function目录及术语表
  7. linux系统为什么很重要,为什么Linux系统始终取代不了Windows?这4个原因80%的人不知道!...
  8. studio--常见设置
  9. ajax-page局部刷新分页实例
  10. RPM 打包指南系列 一
  11. 【安装教程】 【Visio2019】(附带安装包下载)
  12. 广数980td系列2级密码及相关操作
  13. 计算机桌面桌面设置动态视频教程,电脑怎么设置动态桌面?电脑设置动态视频桌面教程...
  14. [工具]TS 视频合并工具
  15. 如何编译运行opencv的sample
  16. SAP系统里批次双计量单位的实现
  17. APP项目完整工作流程
  18. matlab 分子动力学,两体的分子动力学模型-MATLAB源程序
  19. 在Spring Boot中spring mvc常见注解解析及部分源码
  20. oracle下导出某用户表的方法

热门文章

  1. 精研调速器SF系列控制模式变更
  2. 湖南2020年计算机等级考试报名时间,湖南2020年3月计算机等级考试报名时间
  3. 何为出口IP,以及如何查询
  4. html怎么随机生成字母,JS简单生成由字母数字组合随机字符串示例_气质_前端开发者...
  5. [C++][STL]resize函数问题
  6. 深度|蚂蚁金服“刷脸”支付技术解读:错误率低于百万分之一
  7. 如何下载API开发文档
  8. 1.使用SQL语句创建表
  9. 文件包含漏洞(详解)
  10. python画四角星_如何利用Python|对多角星的绘制