Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00835
- Vendor: 皇比樂活生活館
- Title: 皇比樂活生活館 所屬共用主機伺服器 漏洞與集體資料外洩風險
- Introduction: 商品詳情頁面 detail.php 之 goods_id 參數存在 SQL 注入漏洞。該伺服器架構極度老舊(CentOS 6/PHP 5.6/Apache 2.2),且同時託管超過 36 個資料庫。單點注入即可能導致該伺服器上所有託管企業之機敏數據集體淪陷。
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2026/06/10 19:40:57 : 新提交 (由 小道 更新此狀態)
- 2026/06/12 10:31:18 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/02 17:40:07 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/02 17:40:07 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/02 17:40:07 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/08/10 03:00:13 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2026-00835
- 通報者:104nana (小道)
- 風險:嚴重
- 類型:資料庫注入攻擊 (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://web.ezrun.com.tw/detail.php?goods_id=20250630-1 進行自動化與手動安全掃描,發現 goods_id GET 參數存在高嚴重度之 SQL 注入漏洞。後端運行於已終止支援的 CentOS 6、PHP 5.6 及 Apache 2.2 環境,且共託管高達 36 個資料庫。攻擊者可透過該點位進行資料列舉、聯合查詢甚至時間盲注,潛在影響包含客戶個資外洩、ERP/CRM 系統資料遭竊取,以及跨站點資料連帶風險。建議優先部署 WAF 規則並重構 SQL 查詢語法。
漏洞詳細資訊 (Vulnerability Details):
目標 URL: https://web.ezrun.com.tw/detail.php?goods_id=20250630-1
參數位置: GET goods_id
注入類型: Boolean-based Blind, Error-based (FLOOR), Time-based Blind (SLEEP), UNION Query (25 columns)
後端環境: MySQL >= 4.1 / Linux CentOS 6 / PHP 5.6.38 / Apache 2.2.15
PoC Payloads: (List the key ones from the log)
goods_id=-9604' UNION ALL SELECT 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,CONCAT(0x716b707871,0x416f77696966667a5a66436a7a58714f7041536b4671516f49797671464b48477274564564776a62,0x7162706271),25,25,25,25,25-- -
環境風險分析:
技術債嚴重: CentOS 6 & PHP 5.6 皆已 EOL,缺乏官方安全更新。
集體託管 (Shared Hosting) 連帶效應: 36 個 DB 共存於同一 MySQL 實例。若 huato_erp 或 magento 權限未隔離,攻擊者可透過 UNION 跨庫查詢 (information_schema) 竊取所有資料庫資料。
業務影響: huato_crm/erp, shop/magento 儲存會員個資、訂單與帳務;wordpress/xoops 可能含管理員帳號。外洩將導致 GDPR/PDPA 合規風險與商譽損失。
修補建議
針對此類老舊系統的 SQL 注入,建議採取「層級化」修補策略:
1. 根本修復 (Code Level)
參數化查詢 (Prepared Statements):全面重構所有查詢語句。這是徹底解決 SQL 注入的唯一方式。
PHP
// PHP 5.6 支援的 PDO 寫法範例
$stmt = $pdo->prepare("SELECT * FROM product WHERE goods_id = ?");
$stmt->execute(array($_GET['goods_id']));
$result = $stmt->fetchAll();
2. 強制性緩解 (Input Validation)
若暫時無法全面重構代碼,請至少在接收 goods_id 的地方執行強型別過濾:
PHP
// 如果 goods_id 是純數值或特定格式
if (!preg_match('/^[a-zA-Z0-9-]+$/', $_GET['goods_id'])) {
die("Invalid Input");
}
3. 環境與系統安全 (System Level)
WAF (Web Application Firewall):由於 PHP 5.6 已經無法透過升級獲得安全補丁,請務必在前端部署 WAF(如 Cloudflare, ModSecurity)。設置規則阻斷包含 UNION, SELECT, SLEEP, FLOOR 等 SQL 關鍵字組合的請求。
資料庫權限隔離:這是這台伺服器最嚴重的架構錯誤。請修改 MySQL 設定,讓每個資料庫(如 huato_erp)只能被對應的 db_user 存取,徹底封鎖「跨資料庫竊取」的風險。
儘速遷移:PHP 5.6 與 CentOS 6 已經是資安死區。建議企業儘速遷移至支援 Docker 或虛擬化隔離的現代化雲端環境(如 AWS/GCP/Azure),這才是解決此類「共用主機」架構風險的最終路徑。
針對老舊的 PHP 5.6 環境,PDO (PHP Data Objects) 是最穩定且安全的標準化解決方案。
1. 徹底根治:導入參數化查詢 (Parameterized Queries)
不要在 SQL 語法中直接嵌入變數。使用 ? 佔位符,讓資料庫驅動程式自動進行字元跳脫 (Escaping),徹底斷絕惡意指令注入。
PHP
// 安全開發範本
try {
// 建立連線 (建議將帳密存放於環境變數,而非寫死在程式中)
$pdo = new PDO('mysql:host=localhost;dbname=your_db_name;charset=utf8', 'db_user', 'secure_password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 使用預處理陳述式
$stmt = $pdo->prepare("SELECT * FROM product WHERE goods_id = ?");
// 執行時再傳入參數
$stmt->execute([$_GET['goods_id']]);
$result = $stmt->fetchAll();
} catch (PDOException $e) {
// 於生產環境中,切勿將 SQL 錯誤直接顯示在前端 (洩漏資料庫結構)
error_log("Database Error: " . $e->getMessage());
die("系統發生錯誤,請稍後再試。");
}
2. 強制性輸入白名單 (Input Validation)
若系統架構龐大無法全面重構,請在「進入點」強制實施白名單檢查。
PHP
// 白名單正規表示式:僅允許字母、數字與連字號
$goods_id = $_GET['goods_id'];
if (preg_match('/^[a-zA-Z0-9-]+$/', $goods_id) !== 1) {
// 記錄惡意請求來源
error_log("Security Alert: Malicious input attempt from " . $_SERVER['REMOTE_ADDR']);
die("無效的商品編號。");
}
二、 維運人員:系統與架構防禦 (System Level)
這是針對該案例「共用主機」架構缺陷的專業防禦方案。
1. 資料庫權限細分 (Grant Revocation)
這台伺服器最大的漏洞是「帳號權限過大」。請執行下列 SQL 指令,收回應用程式帳號的危險權限:
執行邏輯:讓每個網站的資料庫使用者,僅擁有存取「該網站專屬資料庫」的權限。
指令範例:
SQL
-- 移除所有權限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'localhost';
-- 僅授予對特定資料庫的最小權限
GRANT SELECT, INSERT, UPDATE, DELETE ON huato_erp.* TO 'huato_user'@'localhost';
FLUSH PRIVILEGES;
2. 強制開啟 PHP 安全防護 (Hardening Configuration)
編輯 php.ini,降低攻擊者在 SQLi 後寫入 WebShell 的成功率:
display_errors = Off:禁止顯示任何資料庫報錯。
allow_url_fopen = Off:防止攻擊者透過遠端 URL 載入惡意程式碼。
disable_functions = exec,shell_exec,system,passthru,proc_open:封鎖系統級指令執行權限。
3. 部署「虛擬補丁」(Virtual Patching)
鑑於 CentOS 6 已 EOL,部署 WAF 是唯一的防護罩。
推薦方案:若使用 Apache,請強制啟用 ModSecurity 並掛載 OWASP Core Rule Set (CRS)。
效果:它能在請求進入 PHP 之前,直接檢測並阻斷 UNION SELECT, SLEEP(), information_schema 等特徵字串,即使您的程式碼有漏洞,攻擊者的 Payload 也會被攔截。
4. 遷徙路徑規劃 (Migration Path)
提供給企業主的專業建議報告應包含此步驟:
第一階段 (隔離):將不同屬性的系統(如 ERP 與電商網站)遷移至不同的雲端 Instance,透過 VPC 進行網路層隔離。
第二階段 (升級):將 OS 升級至支援的系統 (如 AlmaLinux 9),並將 PHP 升級至 8.2+。
第三階段 (自動化):導入 CI/CD Pipeline,將安全性檢查 (如 SAST/DAST) 自動化納入開發流程。