从后门到修复:Webmin CVE-2019-15107漏洞的完整时间线分析

从后门到修复:Webmin CVE-2019-15107漏洞的完整时间线分析

如果你在2019年关注过网络安全事件,一定对Webmin这个名字不陌生。这个看似普通的系统管理工具,因为一个编号为CVE-2019-15107的漏洞,在安全圈掀起了不小的波澜。但这个故事最吸引人的地方,远不止一个远程命令执行漏洞那么简单——它背后隐藏着一次精心策划的供应链攻击、一个被植入长达一年的后门,以及安全研究人员如何像侦探一样,从代码的蛛丝马迹中还原出整个攻击时间线。今天,我们就来深入聊聊这个漏洞背后的完整故事,看看从后门植入到最终修复,中间到底发生了什么。

1. 序幕:Webmin是什么,为什么它如此重要

在深入时间线之前,得先搞清楚Webmin到底是个什么东西。简单来说,Webmin是一个基于Web的Unix/Linux系统管理工具。想象一下,你管理着几十台服务器,每台都要通过SSH命令行去配置用户、设置防火墙、管理服务——这活儿既繁琐又容易出错。Webmin的出现,就是要把这些管理任务都搬到浏览器里,通过直观的图形界面来完成。

我第一次接触Webmin是在2015年,当时接手了一个小公司的服务器运维工作。那家公司没有专职的运维人员,几个开发人员轮流管理服务器,水平参差不齐。有人建议上Webmin,理由是“点几下鼠标就能搞定,不用记那么多命令”。确实,对于非专业运维人员来说,Webmin降低了门槛:配置Apache虚拟主机、管理用户账户、设置Cron任务,这些原本需要一定Linux基础的操作,在Webmin里变成了表单和按钮。

但便利性往往伴随着风险。Webmin默认监听10000端口,通过HTTPS提供服务,需要管理员账号密码登录。听起来挺安全,对吧?问题在于,很多中小企业的管理员为了方便,要么使用弱密码,要么干脆把Webmin暴露在公网上,还不做访问限制。更关键的是,Webmin本身是以root权限运行的——这意味着一旦Webmin被攻破,攻击者就拿到了服务器的最高权限。

根据Shodan等网络空间测绘引擎的数据,在漏洞曝光的2019年,全球有超过13万台Webmin服务器暴露在互联网上。这个数字可能还只是冰山一角,因为很多服务器部署在内网,外部扫描不到。这些服务器中,有企业用于管理内部基础设施的,有云服务商提供给客户的托管面板,甚至还有一些教育机构用来管理实验室机器。

Webmin的架构特点也值得注意。它完全用Perl编写,这在上世纪90年代末期项目启动时是个合理的选择,但到了2019年,Perl的流行度已经大不如前。整个系统由大量CGI脚本组成,每个管理模块对应一个或多个脚本。这种架构的优点是模块化程度高,容易扩展;缺点也很明显:每个CGI脚本都可能成为攻击面,而且Perl代码的安全审计相对PHP、Java等语言来说,专业的安全研究人员更少。

提示:如果你现在还在使用Webmin,强烈建议检查版本号。虽然CVE-2019-15107已经过去多年,但老版本可能还存在其他未公开的漏洞。最好的做法是升级到最新版本,或者考虑替代方案如Cockpit、Webmin的现代化分支Usermin等。

2. 事件起点:异常漏洞报告的浮现

时间来到2019年8月10日,这一天在Pentest博客上出现了一篇关于Webmin漏洞的详细分析。作者声称在Webmin的密码重置功能中发现了一个无需身份验证的远程命令执行漏洞,影响版本为1.920及之前。漏洞位于password_change.cgi文件中,攻击者可以通过向该页面发送特制的POST请求,在old参数中注入系统命令。

初看之下,这像是一个典型的输入验证漏洞。安全研究人员在审计代码时发现,password_change.cgi在处理用户修改密码请求时,会检查旧密码是否正确。如果旧密码错误,程序会调用pass_error函数显示错误信息。问题就出在这个函数调用上:

$enc eq $wuser->{'pass'} || &pass_error($text{'password_eold'}, qx/$in{'old'}/); 

第二行代码中,qx/$in{'old'}/是Perl中执行系统命令的语法,相当于反引号。正常情况下,这里应该只是把用户输入的旧密码作为错误信息的一部分显示出来。但代码编写者(或者说,修改者)犯了一个致命错误:他们直接把用户输入的$in{'old'}放进了qx//操作符中。这意味着如果攻击者在old参数中传入| id这样的值,Perl会先执行id命令,然后把输出作为错误信息的一部分。

但事情蹊跷的地方在于,这个漏洞的触发条件相当特殊。研究人员很快发现,要成功利用需要满足几个前提:

  1. Webmin必须开启“密码重置”功能(默认关闭)
  2. 使用的用户不能是系统用户(如root)
  3. 新旧密码需要符

Read more

Java Web 毕业生实习与就业管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

Java Web 毕业生实习与就业管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着高校毕业生数量逐年增加,就业市场竞争日益激烈,传统的就业管理方式已难以满足高效、精准的就业服务需求。高校就业管理部门需要一套智能化、信息化的管理系统,以实现毕业生实习与就业全流程的数字化管理。该系统能够整合毕业生信息、企业招聘需求、实习安排等数据,为学校、企业和学生提供便捷的信息交互平台。通过数据分析与可视化,帮助学校优化就业指导策略,提升毕业生就业质量。关键词:毕业生就业管理、实习管理、信息化系统、数据分析、SpringBoot2。 本系统基于SpringBoot2框架开发,采用前后端分离架构,前端使用Vue3实现动态交互,后端通过MyBatis-Plus高效操作MySQL8.0数据库。系统功能模块包括毕业生信息管理、企业招聘管理、实习过程跟踪、就业数据统计等。管理员可通过后台管理毕业生档案、发布招聘信息;学生端支持简历投递、实习反馈;企业端实现岗位发布、人才筛选。系统还集成权限控制与日志记录,确保数据安全与操作可追溯。关键词:Vue3、MyBatis-Plus、MySQL8.0、权限控制、就业统计。 数据表设计 毕业生信息数据表 毕业生信息数据表存储学生基本资料

视频续播功能实现 - 断点续看从前端到 Spring Boot 后端

视频续播功能实现 - 断点续看从前端到 Spring Boot 后端

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战 🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解 🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用 🍎 《前端技术》专栏以实战为主介绍日常开发中前端应用的一些功能以及技巧,均附有完整的代码示例 ✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧 💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程 🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整 👍《Spring Security》专栏中我们将逐步深入Spring Security的各个

前端水印技术与反爬策略:守护数字内容的新防线

前端水印技术与反爬策略:守护数字内容的新防线 在数字化浪潮席卷的今天,内容创作与分享已成为互联网生态中不可或缺的一环。对于百家号等自媒体平台上的博主而言,原创内容的保护不仅是维护自身权益的关键,也是激励持续创作的重要动力。前端水印技术与反爬策略作为数字内容保护的两把利器,正逐渐受到广泛关注与应用。本文将探讨这两项技术的原理、实施方式及其在内容保护中的作用,旨在为博主们提供一套实用的防护方案。 一、前端水印技术:隐形的版权标识 1.1 水印技术的定义与分类 水印,这一源于纸质文档防伪的技术,在数字时代被赋予了新的生命。前端水印技术,即在网页或应用前端通过JavaScript、CSS等手段,在用户可见或不可见的层面嵌入特定信息,用以标识内容的版权归属或来源。根据其可见性,水印可分为可见水印与不可见水印两大类。 * 可见水印:直接在内容上叠加半透明文字或图案,如博主名称、网站logo等,直观展示版权信息,对普通用户起到警示作用。 * 不可见水印:通过微调像素颜色、亮度等细微特征,嵌入不易察觉的信息,适用于需要保持内容原始美观度的场景,如图片、视频等,可通过专业工具提取验证。

前端如何写出优秀的 AI Agent Skills

前端如何写出优秀的 AI Agent Skills

背景 用 Cursor 写代码的时候,明明团队有自己的组件规范,但 AI 生成出来的代码风格完全对不上号,每次都要手动改半天——这不是 AI 不够聪明,而是你没"教"过它。 从 Cursor、Claude Code 到 GitHub Copilot,AI 编码工具正在从"对话助手"进化成能「自主执行任务」的 Agent。在这个趋势下,「Agent Skills」 悄然成为标配——简单说,它就是你写给 AI 的"操作手册",教会它一项技能,它就能在合适的场景自动调用。 这篇文章,我会讲清楚 Skills 是什么、