目录
前言:
一、Redis简介:
二、Redis未授权产生的原因:
三、Redis未授权复现:
1.使用ssh公钥登录目标服务器
2.如何利用redis未授权漏洞
四、防御措施:
漏洞复现的过程磕磕绊绊,但还是坚持了下来,并且收获甚大。中正如学习之路一样,即使再艰难也要坚持学习,解决问题的方法不止一个,此法不行另寻他法 。
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询.
Redis未授权访问是因为一些Redis服务绑定到公共接口,甚至没有密码身份验证保护。部分Redis 绑定在0.0.0.0:6379,并且没有开启认证(这是Redis的默认配置),而又暴露在公网上,这样就会导致任意用户在可以访问此公网的情况下未授权访问Redis以及读取Redis的数据。
在未授权访问Redis的情况下,攻击者利用Redis自身的提供的config命令,可以进行写文件操作,还可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件的authotrized_keys 文件中,从而可以利用这个自己创建的私钥登录目标服务器。
首先,我们使用kali生成ssh密钥
ssh-keygen -t rsa,创建期间直接回车,在/root/.ssh目录下面会自动创建两个文件,分别是本地的公钥和私钥
首先,我们使用kali生成ssh密钥
ssh-keygen -t rsa,创建期间直接回车,在/root/.ssh目录下面会自动创建两个文件,分别是本地的公钥和私钥:
然后我们进入/root/.ssh目录下,并且查看生成的密钥
因为kali安装reids数据库不成功,所以我换一个思路,不一定非要用kali连接目标服务器,我改用使用windows的redis客户端向目标服务器导入密钥,然后用xshell连接目标服务器。反正目的都是往目标服务器导入公钥。
所以我把kali的密钥复制到window系统下
然后在windows下载Redis客户端
但是,如果目标服务器的/root文件夹权限太高的话,就无法使用该方法登录目标服务器
假设config set dir /root/.ssh成功的话,我们往里面写入密钥
之后就可以使用xshell尝试连接目标服务器
因为知道了Redis未授权漏洞默认开放的端口是6379,如果去批量搜索Redis未授权漏洞的话使用zoom eye语法搜索:country:"CN" +port:"6379" +service:"redis"
fofa语法搜索:port="6379" && protocol==redis && country=CN
使用语法搜索的话,注意,遇到“-NOAUTH Authentication required.”的结果,显示这个信息表示需要进行认证,也即需要密码才能访问就不用测试了。
而如果对单个网站进行测试的话,可以用nmap扫描网站的端口:
Nmap-A-p 6379 –scriptredis-info 192.168.43.151
知道了使用redis的网站后,我们使用redis client来进行未授权连接网站的redis数据库
这里因为无需输入密码也能登录,所以这里是没有认证的。
成功连接之后,我们需要利用这个漏洞写shell了。(但是你要想办法找到网站绝对路径还有网站的脚本语言,不然你写完shell了,蚁剑也连不上)
需要的具备条件:
(1)、网站存在web服务;
(2)、运行redis服务的权限较低;
(3)、web目录有写入的权限;
(4)、能够猜解出网站的根目录(可以使用目录扫描或者通过网页判断使用的源码然后根据自己下载这套源码搭建网站查看目录);
执行以下命令,将一句话或者测试代码写入到网站根目录下:
config set dir /var/www/html; 定位到网站根目录下;
#“config get *”这个命令查看参数。
#“config set”这个命令来实时修改参数。dir / #查看/目录
我们可以使用“config set dir /文件名 ” 来试探网站目录
config set dbfilename cmdback.php; 创建一个php文件(具体看网站用什么脚本语言)
set x"<?php echo 'hello word'?>" 将内容(shell)写入到cmdback.php中
然后向控制台发送save(如果save不成功,说明不能getshell了)
然后找到上传路径
之后就可以使用菜刀或者蚁剑连接了。
redis未授权访问漏洞的虽然有很多。但是能够利用的很少。其中要么是因为权限不足,要么是找不到网站目录路径。
(1)、登录账户设置复杂的口令;
(2)、修改原端口;
(3)、禁止公钥登陆系统;
(4)、设置IP白名单策略;