代码编织梦想

VMware View Planner 远程代码执行漏洞复现分析(CVE-2021-21978)

环境搭建

链接:https://pan.baidu.com/s/1Uw64KHr3hR553hz0a7xvrw 
提取码:k3b0 

双击使用vmware打开
提示输入账号密码,之后等待即可
使用刚才设置的账号密码进行登录

ifconfig|more

查看当前ip
之后使用其他管理软件链接,个人不太习惯默认的操作界面
链接之后
在这里插入图片描述

漏洞分析

通过查看公告发现需要上传恶意脚本文件覆盖特定的 web 程序
所以不能直接上传文件覆盖,需要先拿到一个源码修改之后上传,因为poc上的接口在logupload
通过查看发现在宿主机的

/root/viewplanner/apache_config/httpd.conf

下有配置
在这里插入图片描述
对应目录

/etc/httpd/html/wsgi_log_upload/log_upload_wsgi.py

对应文件

/root/viewplanner/httpd/wsgi_log_upload/log_upload_wsgi.py
#! /usr/bin/env python3
import cgi
import os,sys
import logging
import json

WORKLOAD_LOG_ZIP_ARCHIVE_FILE_NAME = "workload_log_{}.zip"

class LogFileJson:
    """ Defines format to upload log file in harness

    Arguments:
    itrLogPath : log path provided by harness to store log data
    logFileType : Type of log file defined in api.agentlogFileType
    workloadID [OPTIONAL] : workload id, if log file is workload specific

    """
    def __init__(self, itrLogPath, logFileType, workloadID = None):
        self.itrLogPath = itrLogPath
        self.logFileType = logFileType
        self.workloadID = workloadID

    def to_json(self):
        return json.dumps(self.__dict__)

    @classmethod
    def from_json(cls, json_str):
        json_dict = json.loads(json_str)
        return cls(**json_dict)

class agentlogFileType():
    """ Defines various log file types to be uploaded by agent

    """
    WORKLOAD_ZIP_LOG = "workloadLogsZipFile"

try:
    # TO DO: Puth path in some config
    logging.basicConfig(filename="/etc/httpd/html/logs/uploader.log",filemode='a', level=logging.ERROR)
except:
    # In case write permission is not available in log folder.
    pass

logger = logging.getLogger('log_upload_wsgi.py')

def application(environ, start_response):
    logger.debug("application called")

    if environ['REQUEST_METHOD'] == 'POST':
        post = cgi.FieldStorage(
            fp=environ['wsgi.input'],
            environ=environ,
            keep_blank_values=True
        )
        # TO DO: Puth path in some config or read from config is already available
        resultBasePath = "/etc/httpd/html/vpresults"
        try:
            filedata = post["logfile"]
            metaData = post["logMetaData"]

            if metaData.value:
                logFileJson = LogFileJson.from_json(metaData.value)

            if not os.path.exists(os.path.join(resultBasePath, logFileJson.itrLogPath)):
                os.makedirs(os.path.join(resultBasePath, logFileJson.itrLogPath))

            if filedata.file:
                if (logFileJson.logFileType == agentlogFileType.WORKLOAD_ZIP_LOG):
                    filePath = os.path.join(resultBasePath, logFileJson.itrLogPath, WORKLOAD_LOG_ZIP_ARCHIVE_FILE_NAME.format(str(logFileJson.workloadID)))
                else:
                    filePath = os.path.join(resultBasePath, logFileJson.itrLogPath, logFileJson.logFileType)
                with open(filePath, 'wb') as output_file:
                    while True:
                        data = filedata.file.read(1024)
                        # End of file
                        if not data:
                            break
                        output_file.write(data)

                body = u" File uploaded successfully."
                start_response(
                    '200 OK',
                    [
                        ('Content-type', 'text/html; charset=utf8'),
                        ('Content-Length', str(len(body))),
                    ]
                )
                return [body.encode('utf8')]

        except Exception as e:
            logger.error("Exception {}".format(str(e)))
            body = u"Exception {}".format(str(e))
    else:
        logger.error("Invalid request")
        body = u"Invalid request"

    start_response(
        '400 fail',
        [
            ('Content-type', 'text/html; charset=utf8'),
            ('Content-Length', str(len(body))),
        ]
    )
    return [body.encode('utf8')]

通过查看代码57-78行可以发现代码没有对参数进行任何过滤
从post过来的参数中获取logfilelogMetaData,如果metaData.valueitrLogPath/etc/httpd/html/vpresults拼接,不存在则创建目录,如果存在filedata.file,即上传了文件,则将传入的文件写入对应目录,所以只需要传入一个log_upload_wsgi.py文件之后访问即可实现代码执行

漏洞复现

在这里插入图片描述
在这里插入图片描述

查看写入文件

cat /etc/httpd/html/wsgi_log_upload/log_upload_wsgi.py

在这里插入图片描述

参考文章

https://paper.seebug.org/1495/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43645782/article/details/114499178

利用vulnhub复现漏洞 - apache log4j server 反序列化命令执行漏洞(cve-2017-5645)_建瓯最坏的博客-爱代码爱编程

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) Vulnhub官方复现教程漏洞原理 复现过程启动环境漏洞复现payload检测 Vulnhub

log4j CVE-2019-17571 漏洞复现-爱代码爱编程

一、漏洞描述 Log4j 1.2版本中包含一个SocketServer类,在未经验证的情况下,该SocketServe类很容易接受序列化的日志事件并对其进行反序列化,在结合反序列化工具使用时,可以利用该类远程执行任意代码。   二、漏洞复现 2.1 启动SocketServer端 import org.apache.log4j.Logger; i

Apache Shiro Padding Oracle Attack (Shiro-721)漏洞复现-爱代码爱编程

Apache Shiro Padding Oracle Attack (Shiro-721)漏洞复现 环境搭建安装git使用dockerfile启动docker获取dockerfile查看是否搭建成功centos7+tomcat8启动docker一系列命令登录测试账户抓取cookie安装maven使用Java反序列化工具 ysoserialshir

Apache Shiro 权限绕过漏洞 (Shiro-682)复现-爱代码爱编程

Apache Shiro 权限绕过漏洞 (Shiro-682)复现 环境搭建下载代码导入idea检查参考文章 环境搭建 下载代码 https://github.com/lenve/javaboy-code-samples/tree/master/shiro/shiro-basic 将上面地址里的tree/master换成trunk,然后用s

Apache Tomcat文件包含漏洞复现(CVE-2020-1938)-爱代码爱编程

Apache Tomcat文件包含漏洞复现(CVE-2020-1938) 前言影响编号环境搭建漏洞复现参考文章 前言 影响 Apache Tomcat = 6 7 <= Apache Tomcat <7.0.100 8 <= Apache Tomcat <8.5.51 9 <=

(有下载链接)F5 BIG-IP 远程代码执行漏洞复现(CVE-2020-5902)-爱代码爱编程

F5 BIG-IP 远程代码执行漏洞复现(CVE-2020-5902) 前言漏洞详情影响版本修复建议环境搭建漏洞复现参考文章 前言 漏洞详情 F5 BIG-IP 是美国F5公司一款集成流量管理、DNS、出入站规则、web应用防火墙、web网关、负载均衡等功能的应用交付平台。 在 F5 BIG-IP 产品的流量管理用户页面 (TMUI)/配

phpunit 远程代码执行漏洞(CVE-2017-9841)-爱代码爱编程

声明 好好学习,天天向上 漏洞描述 composer是php包管理工具,使用composer安装扩展包将会在当前目录创建一个vendor文件夹,并将所有文件放在其中。通常这个目录需要放在web目录外,使用户不能直接访问。 phpunit是php中的单元测试工具,其4.8.19 ~ 4.8.27和5.0.10 ~ 5.6.2版本的vendor/php

CVE-2021-21978 VMware View Planner 远程代码执行漏洞通告 | 附 POC-爱代码爱编程

漏洞简介 VMware 是一家云基础架构和移动商务解决方案厂商,View Planner 是他旗下推出的一款针对view桌面的测试工具。2021年03月02日,VMware 官方披露了 CVE-2021-21978 VMware View Planner 远程代码执行漏洞。 VMware View Planner 的 web 上传接口中itrLogPa

CVE-2021-21978-带回显的漏洞利用方式-爱代码爱编程

CVE-2021-21978漏洞利用 带回显版本的漏洞利用脚本,更简单的方式 0. 漏洞信息 VMware View Planner Web管理界面存在一个上传日志功能文件的入口,没有进行认证且写入的日志文件路径用户可控,通过覆盖上传日志功能文件log_upload_wsgi.py,即可实现RCE 1. 依赖 pip install r

cve-2021-21985漏洞复现-爱代码爱编程

cve-2021-21985漏洞复现 受影响的版本:漏洞复现后续利用参考文章 受影响的版本: VMware vCenter Server 7.0系列 < 7.0.U2b VMware vCenter Server 6.7系列 < 6.7.U3n VMware vCenter Server 6.5系列 < 6.5 U3p VM

CVE-2021-29505 XStream远程代码执行漏洞复现-爱代码爱编程

0x00 简介 XStream是一个常用的Java对象和XML相互转换的工具,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,大大简化了XML序列化工作。 0x01 漏洞概述 XStream官方发布安全更新,修复了多个XStream 反序列化漏洞,其中就包含了CVE-2021-2

CVE-2021-21315 NodeJs命令注入漏洞复现-爱代码爱编程

0x00 简介 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用于方便的搭建响应速度快、易于拓展的网络应用。Node使用Module模块划分不同的功能,每一个模块都包含非常丰富的函数,如http就包含了和http相关的很多函数,帮助开发者对http、tcp/udp等进行操作或创建相关服务器。 0x01 漏洞概述 Nod

CVE-2021-1675: Windows Print Spooler远程代码执行漏洞-爱代码爱编程

** 赶紧点击上方话题进行订阅吧!** 报告编号:B6-2021-062902 报告来源:360CERT 报告作者:360CERT 更新日期:2021-06-29 1 漏洞简述 2021年06月29日,360CERT监测发现安全研究人员在GitHub上公开了Windows Print Spooler远程代码执行漏洞的POC,漏洞编号

(环境搭建+复现)CVE-2021-44228 Apache Log4j 远程代码执行漏洞-爱代码爱编程

 0x00 简介         ApacheLog4j2是一个开源的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中。 0x01 漏洞概述         该漏洞是由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。 0x02 影响范围 Apache L