Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2025-00178
- Vendor: 感說創意股份有限公司
- Title: 感說創意股份有限公司存在SQL注入型漏洞
- Introduction: 風蕭蕭兮易水寒
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2025/02/17 19:23:37 : 新提交 (由 萬里 更新此狀態)
- 2025/02/19 16:27:29 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/03/13 17:16:58 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/03/13 17:16:58 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/04/19 03:01:12 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2025-00178
- 通報者:jackLI (萬里)
- 風險:中
- 類型:資料庫注入攻擊 (SQL Injection)
參考資料
漏洞說明: OWASP - SQL Injection
https://www.owasp.org/index.php/SQL_Injection
漏洞說明: OWASP - Top 10 - 2017 A1 - Injection
https://www.owasp.org/index.php/Top_10-2017_A1-Injection
漏洞說明: CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
https://cwe.mitre.org/data/definitions/89.html
防護方式: OWASP - SQL Injection Prevention Cheat Sheet
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
相關網址
敘述
可构造https://www.listencontent.com.tw/search?type=media&keywords=test' AND 1=1 -- -这样的 URL(其中test为任意字符)。在 SQL 语句中,test'会破坏原有的 SQL 语法结构,AND 1=1是一个永远为真的条件,-- -是 SQL 注释符,用于注释掉后面的内容。若应用存在漏洞,原本的查询逻辑被改变,可能返回与正常搜索不同的结果(如返回更多数据、页面报错等),由此可初步判断存在 SQL 注入漏洞。
获取数据库信息:进一步构造https://www.listencontent.com.tw/search?type=media&keywords=test' AND (SELECT COUNT(*) FROM users)>0 -- -,通过观察页面响应判断数据库中是否存在名为users的表。若页面有变化,如显示正常、报错或返回异常内容,就可推测表的存在情况,进而逐步探测数据库结构,包括其他表名、字段名等信息。
获取敏感数据:当攻击者获取到数据库表结构信息后,假设已知存在users表且包含username和password字段,可构造https://www.listencontent.com.tw/search?type=media&keywords=test' AND 1=2 UNION SELECT username,password FROM users -- -。若应用存在漏洞且数据库权限足够,攻击者就能获取users表中的用户名和密码等敏感数据。
修補建議
修复建议:
输入验证:在服务器端对keywords参数进行严格的输入验证,只允许合法字符输入,可使用正则表达式等方式。例如在 PHP 中,可使用preg_match('/^[a-zA-Z0 - 9\s]+$/', $_GET['keywords'])来确保输入仅包含字母、数字和空格。
参数化查询:避免将用户输入直接拼接到 SQL 语句中,采用参数化查询方式。以 PHP 和 MySQL 为例,使用PDO或mysqli的预处理语句功能。例如:
// 使用PDO的预处理语句
$keywords = $_GET['keywords'];
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$stmt = $pdo->prepare("SELECT * FROM media_table WHERE keyword LIKE :keywords");
$stmt->bindParam(':keywords', '%'.$keywords.'%', PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
这样可确保用户输入的数据作为数据值处理,而非 SQL 语句的一部分,有效防止 SQL 注入攻击。
數據庫信息一欄全無
存在多個數據庫
PS:沒有去檢查有沒有個資存在,但是看主頁有登錄按鈕,判斷應該有個人信息資料存在。