Webmin <= 1.920 - 未经身份验证的RCE
2019-08-19 15:53:13 Author: mp.weixin.qq.com(查看原文) 阅读量:69 收藏

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.htmlhttps://www.exploit-db.com/exploits/47230

文章来源: https://mp.weixin.qq.com/s/JRBaGoDyObFriX-T6j2fWQ
如有侵权请联系:admin#unsafe.sh