Piwigo_12.2.0_两枚SQL注入_CVE
字数 1541 2025-08-06 18:07:56

Piwigo 12.2.0 SQL注入漏洞分析与复现技术文档

0x00 概述

本文档详细分析Piwigo 12.2.0版本中存在的两处SQL注入漏洞(CVE-2022-26266和CVE-2022-32297),包括漏洞原理、利用条件和复现方法。第一处漏洞存在于用户管理功能中,第二处是一个需要管理员交互的二次注入漏洞,危害性更大。

0x01 环境准备

测试环境搭建

  • 下载Piwigo 12.2.0版本:
    • GitHub: https://github.com/Piwigo/Piwigo
    • 官网: https://piwigo.org/
  • 安装要求:PHP环境、MySQL数据库

0x02 CVE-2022-26266漏洞分析

漏洞描述

  • 影响版本:Piwigo 12.2.0
  • 漏洞文件:include/ws_functions/pwg.users.php
  • 漏洞类型:SQL注入
  • 利用条件:需要后台管理员权限

漏洞原理

  1. 漏洞位于ws_users_getList函数中,通过ws.phpaddMethod方法暴露为Web服务
  2. 攻击入口:访问ws.php?method=pwg.users.getList
  3. 关键漏洞点:order参数未正确过滤直接拼接到SQL查询中

漏洞利用步骤

  1. 登录后台管理系统
  2. 导航至:用户 -> 管理 -> 用户列表
  3. 拦截请求,添加order参数
  4. 构造SQL注入payload

漏洞验证

请求示例:

GET /ws.php?method=pwg.users.getList&order=SQL_INJECTION_PAYLOAD HTTP/1.1

0x03 CVE-2022-32297漏洞分析

漏洞描述

  • 影响版本:Piwigo 12.2.0
  • 漏洞类型:二次SQL注入
  • 利用条件:需要管理员点击恶意链接
  • 危害:可从前台获取数据库敏感信息

漏洞原理分析

数据插入部分

  1. 搜索功能处理文件:qsearch.php
  2. 搜索参数:q
  3. 数据处理流程:
    • 将搜索内容序列化为数组
    • 使用addslashes处理
    • 插入SEARCH_TABLE

管理员操作部分

  1. 触发文件:admin/history.php
  2. 关键漏洞点:
    • 从数据库取出未转义的序列化数据
    • 反序列化后直接拼接到SQL语句
  3. 二次注入点:user_id参数处理时

前台数据获取

  1. 获取文件:include/functions_search.inc.php
  2. 调用位置:search_rules.php
  3. 数据泄露点:通过search_id获取敏感信息

漏洞利用步骤

1. 构造并插入Payload

  • 构造特殊搜索内容,使序列化数据包含SQL注入代码
  • 通过搜索功能将恶意数据存入数据库

2. 管理员触发漏洞

  • 诱使管理员访问恶意链接
  • 链接中包含精心构造的search_iduser_id参数

3. 前台获取敏感数据

  • 攻击者通过search_rules.php获取泄露的数据

完整利用链

  1. 构造Payload:
test'),((select concat('a:1:{s:1:"q";s:34:"',(SELECT password FROM piwigo_users where id=1),'";}')))#
  1. 使用数组形式绕过转义:
q[0]=test'),((select concat('a:1:{s:1:"q";s:34:"',(SELECT password FROM piwigo_users where id=1),'";}')))#
  1. 管理员触发后,通过search_id获取数据

0x04 漏洞修复建议

  1. 升级到最新版本
  2. 临时修复措施:
    • order参数进行严格过滤
    • 在反序列化数据后增加转义处理
    • 限制数据库查询权限

0x05 技术总结

  1. CVE-2022-26266:

    • 直接SQL注入
    • 需要管理员权限
    • 利用相对简单
  2. CVE-2022-32297:

    • 二次注入漏洞
    • 需要管理员交互
    • 利用链复杂但危害更大
    • 可从前台获取敏感数据
  3. 共同点:

    • 都涉及不安全的SQL拼接
    • 都位于12.2.0版本

0x06 参考链接

  1. 官方漏洞公告
  2. Piwigo GitHub仓库
  3. CVE详细描述页面

附录:关键代码片段

  1. ws_users_getList函数中的漏洞代码:
$query = '
SELECT *
  FROM '.USERS_TABLE.'
  ORDER BY '.$params['order'].'
  LIMIT '.$params['per_page'].'
  OFFSET '.($params['per_page']*$params['page']).'
';
  1. 二次注入关键代码:
// admin/history.php
$page['search'] = unserialize($search['rules']);
// ...
$insert = array(
  'user_id' => $_GET['user_id'],
  'rules' => serialize($page['search']),
);

注意:本文仅用于安全研究和防御技术学习,请勿用于非法用途。

Piwigo 12.2.0 SQL注入漏洞分析与复现技术文档 0x00 概述 本文档详细分析Piwigo 12.2.0版本中存在的两处SQL注入漏洞(CVE-2022-26266和CVE-2022-32297),包括漏洞原理、利用条件和复现方法。第一处漏洞存在于用户管理功能中,第二处是一个需要管理员交互的二次注入漏洞,危害性更大。 0x01 环境准备 测试环境搭建 下载Piwigo 12.2.0版本: GitHub: https://github.com/Piwigo/Piwigo 官网: https://piwigo.org/ 安装要求:PHP环境、MySQL数据库 0x02 CVE-2022-26266漏洞分析 漏洞描述 影响版本:Piwigo 12.2.0 漏洞文件: include/ws_functions/pwg.users.php 漏洞类型:SQL注入 利用条件:需要后台管理员权限 漏洞原理 漏洞位于 ws_users_getList 函数中,通过 ws.php 的 addMethod 方法暴露为Web服务 攻击入口:访问 ws.php?method=pwg.users.getList 关键漏洞点: order 参数未正确过滤直接拼接到SQL查询中 漏洞利用步骤 登录后台管理系统 导航至:用户 -> 管理 -> 用户列表 拦截请求,添加 order 参数 构造SQL注入payload 漏洞验证 请求示例: 0x03 CVE-2022-32297漏洞分析 漏洞描述 影响版本:Piwigo 12.2.0 漏洞类型:二次SQL注入 利用条件:需要管理员点击恶意链接 危害:可从前台获取数据库敏感信息 漏洞原理分析 数据插入部分 搜索功能处理文件: qsearch.php 搜索参数: q 数据处理流程: 将搜索内容序列化为数组 使用 addslashes 处理 插入 SEARCH_TABLE 表 管理员操作部分 触发文件: admin/history.php 关键漏洞点: 从数据库取出未转义的序列化数据 反序列化后直接拼接到SQL语句 二次注入点: user_id 参数处理时 前台数据获取 获取文件: include/functions_search.inc.php 调用位置: search_rules.php 数据泄露点:通过 search_id 获取敏感信息 漏洞利用步骤 1. 构造并插入Payload 构造特殊搜索内容,使序列化数据包含SQL注入代码 通过搜索功能将恶意数据存入数据库 2. 管理员触发漏洞 诱使管理员访问恶意链接 链接中包含精心构造的 search_id 和 user_id 参数 3. 前台获取敏感数据 攻击者通过 search_rules.php 获取泄露的数据 完整利用链 构造Payload: 使用数组形式绕过转义: 管理员触发后,通过 search_id 获取数据 0x04 漏洞修复建议 升级到最新版本 临时修复措施: 对 order 参数进行严格过滤 在反序列化数据后增加转义处理 限制数据库查询权限 0x05 技术总结 CVE-2022-26266: 直接SQL注入 需要管理员权限 利用相对简单 CVE-2022-32297: 二次注入漏洞 需要管理员交互 利用链复杂但危害更大 可从前台获取敏感数据 共同点: 都涉及不安全的SQL拼接 都位于12.2.0版本 0x06 参考链接 官方漏洞公告 Piwigo GitHub仓库 CVE详细描述页面 附录:关键代码片段 ws_users_getList 函数中的漏洞代码: 二次注入关键代码: 注意:本文仅用于安全研究和防御技术学习,请勿用于非法用途。