0x00:简介
Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。目前Webmin支持绝大多数的Unix系统,这些系统除了各种版本的linux以外还包括:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等。
0x01:过程
在webmin中,必须允许漏洞利用漏洞的“用户密码更改”。这是唯一的条件。许多webmin管理器都支持此功能。它们允许用户使用旧密码设置新密码。让我们仔细看看这个。
在研究Webmin应用程序时,我注意到了一些有趣的“.cgi”文件。其中一个是“password_change.cgi”
此文件中的参数只有一个要求,即“miniserv.conf”配置文件中的“passwd_mode”值设置为“2”。
$miniserv{'passwd_mode'} == 2 || die "Password changing is not enabled!";
那么管理员如何激活此配置?让我们检查...
在“Webmin> Webmin配置>身份验证”部分中,应检查“使用过期密码提示用户输入新密码”。这意味着“miniserv.conf”中“password_change”的值为“2”。
在此配置之后,用户可以通过验证其旧密码来更改其过期密码。
那么漏洞到底在哪里?让我们回到“password_change.cgi”
“password_change.cgi”将旧密码发送到“acl / acl-lib.pl”中的“encrypt_password”函数
该函数调用另一个函数“unix_crypt”。
在另一部分中,再次为“验证旧密码”调用相同的函数“unix_crypt”。
此时,我们将在验证旧密码期间通过读取影子文件来使用“竖线(|)”。
让我们通过使用burp套件发送请求来查看此内容。
我们发送了一个带有普通“POST”数据的请求,并自然给出了一个错误“无法更改密码:当前密码不正确”。
该漏洞完全包含在“旧”参数中。
用户名,旧密码或其他信息是否正确无关紧要。
文件“password_change.cgi”将检查服务器上“old”参数中的信息。它甚至不会检查用户名是否正确。
我们现在将使用“竖线(|)”并尝试在服务器上运行不同的命令。
如您所见,服务器执行命令“ifconfig”并显示输出。
现在让我们将恶意负载发送到服务器并接收shell会话。
我将使用“netcat”有效载荷进行证明。因为我知道服务器上有netcat。
正如你所看到的那样收到了shell。当我们运行命令“pwd”时,我们可以看到恶意有效负载在“acl”文件夹中执行。因为这里调用了这个函数。
原文作者怀疑此漏洞为后门
请移步查看评论
https://www.reddit.com/r/netsec/comments/crk77z/0day_remote_code_execution_for_webmin/ex6q9v6/
0x02:用户范围
0x03:修复建议
供应商修复了此漏洞。
Webmin必须更新到1.930版本。
0x04:后话
原文来自:
https://pentest.com.tr/exploits/DEFCON-Webmin-1920-Unauthenticated-Remote-Command-Execution.html
https://www.exploit-db.com/exploits/47230