Redis未授权访问是一个常见且高危的漏洞点。为了能快速、直观地检测内网或标网段中是否存在这类风险,我基于一个基础的Python脚本,并在AI的协助下,将其改进成了一个简单的图形化界面(GUI)工具,力求简单易用

一、为什么需要这个工具?

Redis因其高性能而被广泛应用于缓存、消息队列等场景。但如果配置不当,例如:

  • 未设置密码认证 (requirepass)
  • bind 指令配置为 0.0.0.0 且无防火墙保护
  • 保护模式 (protected-mode) 被关闭

就可能导致未授权访问。攻击者一旦能够未授权访问Redis,就可以读取敏感数据、篡改数据、甚至通过写入SSH公钥或执行特定命令来获取服务器权限,危害巨大。

虽然有很多专业的扫描器,但有时我们需要一个轻量级、可定制、并且能直观展示结果的小工具,特别是在对大量内网目标进行快速排查时。

二、工具核心检测原理

本工具的检测原理非常直接:

  1. 尝试连接: 脚本通过Python的 socket 库尝试连接到指定IP地址和端口的Redis服务。
  2. 发送INFO命令: 连接成功后,脚本会向Redis服务器发送一个标准的 INFO 命令。这是一个无害的诊断命令,用于获取服务器的各种信息和统计数据。
  3. 分析响应:
    • 存在未授权访问: 如果Redis服务器在没有要求密码认证的情况下,成功执行了 INFO 命令并返回了包含特定服务器信息(如 redis_version、redis_mode 等)的响应,则判定该Redis实例存在未授权访问漏洞。
    • 需要认证: 如果服务器返回了包含 NOAUTH、WRONGPASS、DENIED 或 -NOPERM (Sentinel认证失败时) 等关键字的错误信息,则表明该Redis实例配置了密码保护,不存在简单的未授权访问。
    • 其他情况: 如连接超时、连接被拒、响应异常等,工具也会给出相应的提示。

特别地,此工具还优化了对Redis Sentinel(哨兵)模式的识别。即使Sentinel的INFO命令响应与普通数据节点不同,只要能在未认证情况下成功获取其版本信息,也会被标记为存在未授权访问风险。

三、工具特点与界面

这个GUI工具使用Python内置的 Tkinter 库构建,力求简单易用

  • 图形化操作: 告别命令行,通过点击按钮和在文本框输入即可完成操作。
  • 目标输入灵活: 支持在文本框中直接粘贴多个目标(每行一个 ip:port 格式)。
  • 实时结果显示: 扫描结果会实时显示在下方的滚动文本框中,并根据结果类型使用不同颜色高亮:
    • 红色/橙红色:存在未授权访问 (区分Redis数据节点和Sentinel)
    • 绿色:需要认证或访问被拒
    • 蓝色:响应异常,建议手动确认
    • 其他颜色:超时、错误等
  • 详细响应预览: 对于需要认证或响应异常的情况,工具会显示服务器返回的原始响应片段,帮助分析具体原因。
  • 结果复制: 提供“复制结果”按钮,一键将所有扫描日志复制到剪贴板,方便整理报告。
  • 可调界面: 主界面分为目标输入区和结果显示区,可以通过拖动分割线调整两者大小。
  • 超时设置: 可以自定义连接超时时间。
  • 结果保存: 存在漏洞的目标会自动保存到本地一个以时间戳命名的文本文件中,输出为TSV格式,可以直接将这个 .txt 文件的内容复制粘贴到Excel
  • 跨平台: 基于Python和Tkinter,理论上可以在Windows, macOS, Linux等主流操作系统上运行。

image

四、如何使用

  1. 环境准备:
    • 确保您的计算机上安装了Python (脚本在Python 3环境下测试通过,原脚本可能兼容Python 2,但GUI版推荐Python 3)。
    • Tkinter通常是Python标准库的一部分,无需额外安装。
  2. 获取脚本: https://github.com/Zero-Yi7/redis_scan_gui
  3. 运行脚本:
    • 将代码保存为 .py 文件,例如 redis_scan_gui.py。
    • 打开命令行/终端,进入脚本所在目录,执行:python redis_scan_gui.py
  4. 操作界面:
    • 在顶部的“扫描目标”文本框中,粘贴您要扫描的IP和端口列表,确保每行一个,格式为 ip:port (例如 192.168.1.100:6379)。
    • 根据需要修改“超时时间”(默认为3秒)。
    • 点击“▶ 开始扫描”按钮。
    • 观察下方的“扫描结果”区域,实时查看扫描进度和结果。
    • 扫描过程中可以点击“■ 停止扫描”来中断。
    • 扫描完成后,可以点击“复制结果”将所有输出复制到剪贴板。
    • “清空目标”和“清空结果”按钮用于清理界面。

五、注意事项与后续

  • 授权扫描: 请务必在获得授权的情况下使用此工具进行扫描。未经授权的扫描行为是违法的。
  • 网络环境: 确保运行脚本的机器能够访问到目标Redis服务器的IP和端口,提前通过ping、telnet测试。
  • 结果判断: 虽然工具会给出判断,但对于标记为“响应异常”或“响应不明确”的情况,仍建议结合目标服务器的实际配置进行手动确认。
  • 安全加固: 一旦发现未授权访问的Redis实例,应立即通知相关负责人进行安全加固,包括但不限于:
    • 设置强密码 (requirepass)
    • 绑定到安全的内网IP (bind)
    • 启用保护模式 (protected-mode yes)
    • 配置防火墙规则限制访问源
  • 持续改进: 这个工具目前功能还比较基础,未来可以考虑增加如并发扫描提高效率(看是否存在需要)、更丰富的报告导出、与资产信息联动等功能。也欢迎大家提出改进建议!

© Rabbit 使用 Stellar 创建

✨ 营业:

共发表 56 篇Blog 🔸 总计 123.6k