Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00876
- Vendor: {星橋國際影城}
- Title: 星橋國際影城多個頁面存在 資料庫注入漏洞(SQL Injection)
- Introduction: 該伺服器資料庫能以最高權限帳號執行,導致全站資料及同AWS EC2 主機其他客戶資料面臨洩漏風險
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2026/06/30 14:40:41 : 新提交 (由 summer.nudy 更新此狀態)
- 2026/07/01 17:10:54 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/23 16:02:24 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/23 16:02:24 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/23 16:02:24 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/08/30 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2026-00876
- 通報者:summer83583 (summer.nudy)
- 風險:嚴重
- 類型:資料庫注入攻擊 (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.sbc-cinemas.com.tw/search.php?q=test
敘述
星橋國際影城官方網站的新聞頁面(news.php)與電影搜尋頁面(search.php),沒有對使用者輸入的內容做任何過濾,可以直接在網址列塞入 SQL 指令操控資料庫。
更嚴重的是,網站的資料庫帳號用的是 MySQL 最高權限的 root,加上這台伺服器是多個網站共用的主機,一旦被攻擊,不只是星橋影城的資料全部曝光,連同一台伺服器上其他 16 個以上不同公司的資料庫也都跟著中獎。
受影響端點
端點/news.php?id=758 ,參數id , 注入型態Boolean / Error / Time / UNION
端點/search.php?q=test ,參數q , 注入型態Boolean / Error / Time / UNION
因為資料庫帳號是 root,可以看到這台AWS EC2 伺服器上所有資料庫。透過注入枚舉,發現至少 16 個其他資料庫同樣暴露在風險中:
修補建議
改用參數化查詢
把所有 SQL 查詢改成 Prepared Statement,讓使用者輸入的內容永遠不會被當成 SQL 指令執行:
// ❌ 改之前(有漏洞)
$sql = "SELECT * FROM news WHERE id='" . $_GET['id'] . "'";
// ✅ 改之後(安全)
$stmt = $pdo->prepare("SELECT * FROM news WHERE id = ?");
$stmt->execute([$_GET['id']]);
// ✅ search.php 的 LIKE 查詢同樣要改
$stmt = $pdo->prepare(
"SELECT * FROM movies WHERE status>0
AND (cname LIKE ? OR ename LIKE ? OR director LIKE ? OR player LIKE ?)
ORDER BY releaseTime"
);
$keyword = '%' . $_GET['q'] . '%';
$stmt->execute([$keyword, $keyword, $keyword, $keyword]);
立即:關掉錯誤訊息顯示
不要讓 SQL 語句和錯誤內容出現在瀏覽器上:
; php.ini 設定
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
立即:把資料庫帳號從 root 換掉
建立一個只有必要權限的帳號,就算被注入也只能動自己的資料庫:
-- 建立新帳號
CREATE USER 'sbc_web'@'localhost' IDENTIFIED BY '設一個強密碼';
-- 只給 sbc 這個資料庫的基本操作權限
GRANT SELECT, INSERT, UPDATE ON sbc.* TO 'sbc_web'@'localhost';
FLUSH PRIVILEGES;
-- 然後把 PHP 連線設定改掉
// config.php
$pdo = new PDO('mysql:host=localhost;dbname=sbc', 'sbc_web', '你的密碼');