Redis未授权访问
Redis简介
Redis(Remote Dictionary Service远程字典服务)是开源非关系型数据库,数据都是以键值对(KV)的方式存储的
- Redis的优点:
数据类型丰富,应用场景广泛
纯内存的数据结构,读写速度快
功能特性丰富(持久化、事务、pipeline、多语言支持、集群分布式)
Redis值(V)的数据类型
- String:字符和整形
缓存、分布式session、分布式锁、分布式、全局ID、计数器、限流 - Hash:哈希表
存储一个对象、存储一张表的数据、购物车 - List:有序数组
消息列表、文章列表、评论列表、公告列表、活动列表 - Set:无序集合
抽奖、点赞、签到打卡、商品标签 - ZSet:有序集合
排行榜
Redis持久化机制
将内存中的Redis数据存储到磁盘的过程
- RDB(Redis DataBase)默认
配置文件redis.conf设置自动保存:
save 3600 1#一个小时内至少一个key的修改就保存
dbfilename dump.rdb #保存文件名dump.rdb
dir ./ #存储路径为当前目录
手动保存命令:
客户端执行save(阻塞状态)或bgsave(短暂的阻塞) - AOF(Append Only File)
Redis动态修改配置
客户端内config set动态修改配置,重启后生效
- config set dir /var/www/
指定数据文件保存位置/var/www/ - config set dbfilename redis.php
指定存储的数据文件名redis.php - set key “<?php…>”
存储键名为key,键值为php代码的数据 - save
保存数据到/var/www/redis.php
Redis服务器被挖矿案例
- 云服务器Redis配置:
protected-mode no
# bind 127.0.0.1
开放端口6379 - 恶意代码的操作:
拿到服务器root权限
替换一些命令,删除一些文件
扫描端口,干掉其他挖矿程序
下载恶意脚本执行
生成SSH文件,实现免密登录
Redis漏洞环境准备
- 攻击机 IP:192.168.37.129
安装Redis - Redis服务端主机 IP:192.168.37.132
root用户安装Redis
关闭保护模式 protected-mode no
取消IP绑定#bind 127.0.0.1 -::1
开放6379端口或关闭防火墙
Redis写入webshell(服务端有web环境)
攻击机连接服务端主机:redis-cli -h 192.168.37.132 -p 6379,修改Redis配置写入木马
蚁剑连接redis.php,进入服务端主机终端
定时任务+反弹连接
定时任务介绍
定时任务常用命令:
命令 | 操作 |
---|---|
crontab -u root -r | 删除某个用户的任务 |
crontab -u root time.cron | 把文件添加到某个用户的任务 |
crontab -u root -l | 列举某个用户的任务 |
crontab -u root -e | 编辑某个用户的任务 |
定时任务存储路径:
路径 | 内容 |
---|---|
/var/spool/cron | 存放用户的定时任务 |
/etc/crontab | 放的是对应周期的任务、dalily、hourly、monthly、weekly |
Redis写入反弹连接定时任务
攻击机开启监听7777端口
攻击机连接Redis服务端rcli,写入定时任务bash反弹连接
Redis服务端查看目录下的定时任务,发现成功写入
攻击机连接到Redis服务端的shell
SSH key免密登录
免密登录流程:
- 客户端生成密钥对(公钥、私钥)
- 客户端把公钥发给服务端保存(认证过一次后不需要密码)
- 客户端用私钥加密消息,发给服务端
- 服务端用公钥解密,解密成功说明密钥匹配
- 客户端免密登录成功
生成无密码的ssh密钥对(私钥加密,公钥解密)
将攻击机的公钥头和尾加两个换行符,写入服务端的.ssh文件夹下
攻击机成功登录服务端
Redis加固方案
1.限制访问IP
2.修改默认端口
3.使用密码访问
4.不要用root运行Redis