6-6

Windows 和 Linux 利用 REDIS 的区别

1. 权限与用户

  • Linux: Redis 服务通常以低权限用户(如 redisnobody)运行。这意味着即使你通过 Redis 成功写入了文件,比如写入一个 SSH 公钥到 ~/.ssh/authorized_keys,你所能控制的也只是该低权限用户。要提升权限,你还需要找到另一个本地提权漏洞,这通常需要更多的步骤
  • Windows: 在 Windows 上,Redis 常常以 SYSTEM 或其他管理员权限运行,尤其是在一些不规范的部署中。如果能通过 Redis 成功写入文件,例如写入一个 WebShell 到网站目录或创建一个启动项,你所获得的权限可能直接就是 SYSTEM 级别。这使得 Windows 上的利用变得更简单粗暴,危害也更大

2. 利用方式

  • Linux:
    • 写 SSH 公钥: 这是最经典的利用方式。通过 config set dir /root/.ssh/config set dbfilename authorized_keys,然后用 set 命令写入公钥,最后用 SSH 连接。这需要知道目标系统的用户家目录,通常是 rootredis 用户
    • 写 Crontab: 利用 Redis 写入定时任务,反弹 Shell。config set dir /var/spool/cron/config set dbfilename root,然后写入反弹 Shell 的命令。这种方式可以获得稳定的 Shell,但需要 Redis 有足够的权限写入该目录
    • 写 WebShell: 写入 PHP、JSP 等 WebShell 到网站目录,通常需要 Web 服务器和 Redis 运行在同一台机器上,并且 Redis 有写入 Web 目录的权限
  • Windows:
    • 写 WebShell: 写入 WebShell 到 wwwroot 或其他网站目录。这是最常见的利用方式,因为 Redis 经常与 Web 服务部署在同一台机器上
    • 写入启动项/服务: 由于权限通常较高,可以直接写入 .bat.exe 文件到启动目录或创建新的服务,实现权限维持和持久化
    • DLL 劫持: 高权限下的一个高级利用方式,将恶意的 DLL 文件写入到某个高权限程序会加载的路径,实现代码执行