1.redis简介
redis是一个使用C语言编写,开源高性能非关系型的键值对存储系统,和memcached类似,在企业中一般被当作缓存中间件使用,典型的应用场景如秒杀活动、热点数据缓存和分布式锁等。
redis按操作系统可分为linux和windows两类,其中持续更新的是linux版本(https://github.com/redis/redis,已更新到6.0.9版本),windows版本已有较长时间未更新(https://github.com/microsoftarchive/redis),因此在实战中一般遇到linux版本redis偏多,本篇研究对象也以linux版本的redis为主。
1.1 redis相关基础命令
1.2 保护模式
1.3 持久化机制
由于redis一般将数据保存在内存中,因此redis提供了RDB和AOF两种持久化机制,防止数据丢失。
redis默认开启rdb持久化机制,即在指定的时间间隔内(也可通过save或bgsave命令触发)将内存中数据以快照方式写入到磁盘上的某个文件中。
命令行中可通过config set dir xxx和config set dbfilename xxx来设置该文件位置。配置文件中可通过dir xxx和dbfilename xxx进行配置。
1.4 主从同步
1.5 redis modules
2. redis 多种getshell 姿势
-
写文件
-
主从同步
-
lua rce
2.1写文件
2.1.1写ssh公钥
-
适用范围:redis全版本
-
优点:对于linux机器比较通用
-
缺点:容易覆盖正常用户ssh公钥
(3)连接redis确认key已被写入
2.1.2写crontab
-
适用范围:redis全版本
-
优点:适用于无法直连redis情况
-
缺点:部分linux版本crontab容错性较差
(3)本地nc监听,获取root权限
2.1.3写webshell
-
适用范围:redis全版本
-
缺点:利用有一定条件,需要目标开启web服务,知道写入路径且有写入权限
(4)连接一句话
2.2主从同步
-
适用范围:redis 4.x/5.x
-
优点:现有exp可直接写入无损文件
-
缺点:redis版本有一定限制
2.3lua rce
-
适用范围:redis < 2.8.21 或 3.0 =<redis < 3.0.2
-
缺点:redis版本有较大限制
3. 修复建议
4. 自动化利用实现
4.1甲方视角
作为甲方安全工程师,肯定会将确认存在未授权且可被利用的内网redis作为高优先级进行修复推进,其余的作为低优先级,而扫描器往往会一刀切地将所有未授权redis以同一危险等级报出来,其中绝大部分redis已经以非root权限起,危害有限,可结合实际情况进行忽略处理。
对于redis的启动权限判断,可增加扫描逻辑:
(1)下发分布式扫描任务探测内网redis服务
(2)对开启redis的机器判断是否存在未授权/弱口令
(3)若存在未授权/弱口令,则尝试向/root目录下写(md5(xxx)).txt文件
(4)若写入成功,则目标redis存在较大风险,需立即修复
python版本样例运行结果如下:
4.2非甲方视角
5.总结
作者简介
哔哩哔哩安全现招聘数据安全、基础安全、办公安全、安全产品研发、业务安全、业务风控、SDLC、业务蓝军、移动APP安全工程师/专家,欢迎感兴趣的同学投递简历至:[email protected](邮件标题请注明:岗位+姓名)
本文始发于微信公众号(哔哩哔哩安全应急响应中心):redis getshell姿势总结
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论