ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis未授权访问

2021-11-06 12:03:14  阅读:159  来源: 互联网

标签:网站 Redis redis 访问 ssh 服务器 授权


目录

前言:

一、Redis简介:

二、Redis未授权产生的原因:

三、Redis未授权复现:

1.使用ssh公钥登录目标服务器

2.如何利用redis未授权漏洞

四、防御措施:


前言:

漏洞复现的过程磕磕绊绊,但还是坚持了下来,并且收获甚大。中正如学习之路一样,即使再艰难也要坚持学习,解决问题的方法不止一个,此法不行另寻他法 。

一、Redis简介:

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询.

二、Redis未授权产生的原因:

Redis未授权访问是因为一些Redis服务绑定到公共接口,甚至没有密码身份验证保护。部分Redis 绑定在0.0.0.0:6379,并且没有开启认证(这是Redis的默认配置),而又暴露在公网上,这样就会导致任意用户在可以访问此公网的情况下未授权访问Redis以及读取Redis的数据。

三、Redis未授权复现:

1.使用ssh公钥登录目标服务器

在未授权访问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尝试连接目标服务器

2.如何利用redis未授权漏洞

因为知道了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白名单策略;

标签:网站,Redis,redis,访问,ssh,服务器,授权
来源: https://blog.csdn.net/m0_49577923/article/details/121176556

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有