Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00837
- Vendor: 努哇克咖啡
- Title: 努哇克咖啡所屬主機伺服器 漏洞外洩風險
- Introduction: 攻擊者只要成功突破當前網站的 SQL (SQLi) 漏洞,(prodetail.php) 就能透過權限橫向移動,直接讀取同伺服器上高達 40 個不同企業或系統的資料庫。
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2026/06/10 20:19:56 : 新提交 (由 小道 更新此狀態)
- 2026/06/12 10:31:46 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/06 17:00:43 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/06 17:00:43 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/06 17:00:43 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/08/10 03:00:14 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2026-00837
- 通報者: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
相關網址
敘述
一、 漏洞技術細節 (Technical Overview)
根據測試結果,pd 參數未對使用者輸入進行嚴格的過濾與參數化處理,導致核心 SQL 查詢語句可被控。該參數同時支援以下四種漏洞利用技術:
UNION Query Injection (32 欄位): 這是最危險的注入類型。攻擊者可以直接透過多個 NULL 欄位對齊,將任意 SELECT 查詢結果(包含其他公司的資料庫)直接回顯在網頁畫面上,資料外洩速度極快。
Error-based (EXTRACTVALUE): 透過製造 XML 函數錯誤,直接將資料庫的敏感資訊帶在錯誤訊息中噴出。
Boolean-based & Time-based blind: 即使網頁關閉錯誤訊息,攻擊者也能透過邏輯判斷或時間延遲(SLEEP 函數)逐字猜解資料庫內容。
危險排行,資料庫名稱,性質與潛在風險分析
1 (極危險),"ambererp, midorapos, phonepos",ERP 與 POS 收銀系統:包含最核心的企業資料、客戶聯絡方式、採購紀錄、分店進銷存、財務帳目、甚至線上支付留存的敏感紀錄。
2 (高危險),"Qstore, chengshingweb, tourweb, dresscode",電子商務/線上商城/旅遊網:存放大量會員帳號密碼、地址、收件人個資、未加密的訂單明細與刷卡狀態。
3 (中高危險),"wordpress, calendar, dayspa_test",CMS 與測試環境:WordPress 的 wp_users 包含後台密碼雜湊,易遭暴力破解;test 結尾的資料庫通常防禦最弱,常存放未加密的真實個資備份。
資安警訊: 由於 ambererp (ERP)、midorapos (POS) 與 Qstore (商城) 存放在同一個籃子裡,一旦此 SQL 漏洞未修補,等同於該伺服器上所有企業的客戶名單、營收數據都處於對外公開狀態。
類型: SQL注入 (SQLi) + XSS (跨站腳本攻擊)
驗證結果: Boolean-based blind, Error-based (EXTRACTVALUE), Time-based blind (SLEEP), UNION query (32 columns)
特徵: 同樣存在未預編譯的SQL拼接問題。sqlmap偵測到XSS潛在風險,可能因輸出未過濾直接回傳至HTML頁面所致。
資料外洩: 可讀寫任意資料庫表單(使用者帳號、密碼、訂單資訊等)。
結構探勘: 透過information_schema掌握完整DB架構。
權限提升/RCE: MySQL若具備FILE權限,可利用INTO OUTFILE寫入Web Shell;或透過LOAD_FILE讀取伺服器敏感檔案。
共享主機風險: 同IP/同MySQL實例下的其他網站(如wordpress, huato_erp等)可能受波及。
XSS影響 (努哇克咖啡): 若參數直接輸出至頁面,可彈出警告視窗、竊取Cookie或進行Phishing。
Parameter: pd (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: pd=329' AND 1176=1176 AND 'pgME'='pgME
Type: error-based
Title: MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)
Payload: pd=329' AND EXTRACTVALUE(9931,CONCAT(0x5c,0x7162707071,(SELECT (ELT(9931=9931,1))),0x716a627071)) AND 'Ftjs'='Ftjs
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: pd=329' AND (SELECT 5863 FROM (SELECT(SLEEP(5)))MUrv) AND 'UAlh'='UAlh
Type: UNION query
Title: Generic UNION query (NULL) - 32 columns
Payload: pd=-7115' UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,CONCAT(0x7162707071,0x6444787176696d444755516a6a5754747a516f72586a4e584c6558784f57685579704b414c78524c,0x716a627071),NULL,NULL,NULL,NULL,NULL,NULL,NULL-- -修補建議
參數預編譯 (Prepared Statements): PHP PDO 或 MySQLi。提供程式碼範例。
輸入驗證與過濾: Whitelist for goods_id and pd. Use intval() or regex.
XSS防護: htmlspecialchars() when outputting data. (2) 資料庫層 (Database Layer)
最小權限原則: 網站DB帳號僅授予必要權限,移除FILE, PROCESS, SUPER。
限制遠端連線/使用localhost。 (3) 伺服器與環境優化 (Server/Env Layer)
升級PHP至8.x+,MySQL至8.0+ (CentOS 6已EOL,建議遷移或升級)。
啟用WAF (ModSecurity) 規則過濾SQLi/XSS。
關閉display_errors,設定自訂錯誤頁面。 (4) 共享主機特別注意事項
檢查同主機其他DB是否共用帳號密碼。
定期備份與異地存放。
1. 程式碼層級:徹底根除漏洞(首要任務)
產生此漏洞的原因是程式將 $pd 變數直接拼接到 SQL 字串中。必須立即改用 參數化查詢 (Prepared Statements)。
錯誤的原始寫法 (示意):
PHP
$pd_id = $_GET['pd'];
$sql = "SELECT * FROM products WHERE pd_id = '" . $pd_id . "'"; // 導致 SQLi
正確修復寫法 (以 PHP PDO 為例):
PHP
$pd_id = $_GET['pd'];
// 1. 強制類型轉換(如果 pd 固定是數字,此行即可阻斷絕大多數攻擊)
$pd_id = intval($pd_id);
// 2. 使用預處理語句綁定參數
$stmt = $pdo->prepare('SELECT * FROM products WHERE pd_id = :pd_id');
$stmt->execute(['pd_id' => $pd_id]);
$product = $stmt->fetch();
2. 資料庫層級:隔離共用主機風險
為了防止「單一網站被破,全部資料庫一起死」的連帶外洩風險,必須進行權限限縮:
撤銷全局權限: 檢查目前網站連接資料庫的帳號,絕對不能給予 GRANT ALL PRIVILEGES 或是對所有資料庫的讀取權(例如不可具備對 *.* 的 SELECT 權限)。
專庫專用: 努哇克咖啡的網站帳號,應該只能讀寫屬於它自己的資料庫(如 Qstore 或相關庫),無權讀取 ambererp 或 midorapos。
3. 網路與架構層級:即時防禦
在程式碼尚未修改完成前,建議採取以下緊急保護措施:
部署雲端 WAF (如 Cloudflare): 開啟 Web Application Firewall 的 SQL Injection 防護規則,Cloudflare 會自動辨識並攔截含有 ' UNION ALL SELECT ... 或 AND EXTRACTVALUE(...) 的惡意請求。
關閉資料庫錯誤回顯: 在 PHP 設定 (php.ini) 中將 display_errors 設為 Off,防止攻擊者利用 Error-based 技術直接讀取資料。
四、 驗證與跟進
程式修改後確認: 請工程師修改完成後,再次執行 sqlmap,確保輸出為 all tested parameters do not appear to be injectable。
個資洩漏清查: 建議清查近期 Nginx 的 Access Log,過濾關鍵字 prodetail.php?pd=,檢查是否有其他來自外部 IP 的自動化掃描痕跡,確認是否有個資已被打包下載。