OpenSTAManager API存在SQL注入漏洞:通过display参数实现认证后攻击

本文详细分析了OpenSTAManager中存在的认证SQL注入漏洞(CVE-2025-65103),攻击者可通过操纵API请求中的display参数执行任意SQL查询,导致数据泄露、篡改或删除,造成系统完全被入侵的风险。

OpenSTAManager存在通过display参数的认证SQL注入漏洞

漏洞详情

摘要

OpenSTAManager中存在一个认证SQL注入漏洞,允许任何用户(无论权限级别)执行任意SQL查询。通过操纵API请求中的display参数,攻击者可以泄露、修改或删除数据库中的任何数据,导致系统完全被入侵。

技术细节

该漏洞位于src/API/Manager.php中的retrieve()方法。

用户从display GET参数输入的输入未经适当验证即被处理。代码会去除周围的括号[],按逗号分割字符串,然后将每个结果元素直接传递到查询构建器的selectRaw()函数中。

1
2
3
4
5
6
7
8
9
// 来自'display'的用户输入未经清理即被使用
$select = !empty($request['display']) ? explode(',', substr((string) $request['display'], 1, -1)) : null;

// ...

// 未清理的输入直接传递给`selectRaw()`
foreach ($select as $s) {
    $query->selectRaw($s);
}

由于selectRaw()设计用于执行原始SQL表达式,它会执行display参数中提供的任何恶意SQL代码。

概念验证

  1. 以任何用户身份登录OpenSTAManager实例
  2. 导航到用户个人资料页面以获取其个人API令牌
  3. 使用此API令牌向API端点发送特制的GET请求

基于时间的盲注测试:<your_host><your_token><resource_name>替换为实际值。anagrafiche是一个有效资源。

1
curl "http://<your_host>/openstamanager/api?token=<your_token>&resource=anagrafiche&display=[1,SLEEP(5)]"

服务器将延迟其响应约5秒,确认数据库执行了SLEEP(5)命令。

影响

这是一个严重的SQL注入漏洞。任何经过认证的用户,即使是权限最低的用户,都可以利用此漏洞:

  • 从数据库中泄露所有数据(例如用户凭据、客户信息、发票、内部数据)
  • 修改或删除数据,损害数据完整性
  • 根据数据库用户的权限和系统配置,可能实现进一步的系统入侵

技术信息

受影响版本: <= 2.9.4 修复版本: 2.9.5

严重程度: 高(CVSS评分:8.8)

弱点类型: CWE-89 - SQL命令中使用的特殊元素中和不当(SQL注入)

参考链接:

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计