Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00509
- Vendor: 悟空科技股份有限公司
- Title: 悟空科技股份有限公司-誠和證件快照*水啦!* 訂單流程參數存在 IDOR,可未授權存取其他使用者訂單相關個資與照片
- Introduction: 訂單流程中的參數存在 IDOR,無需登入即可未授權存取其他使用者的照片、手機號碼、Email 與訂單資訊。
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2026/04/06 00:37:10 : 新提交 (由 更新此狀態)
- 2026/04/07 22:50:18 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/04/09 18:44:09 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/04/09 18:44:09 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/04/09 18:44:09 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/06/06 03:00:06 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
參考資料
OWASP Top 10 - 2013 A4 - Insecure Direct Object References
https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References
Insecure Direct Object Reference Prevention Cheat Sheet
https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.md
OWASP Top 10 - 2017 A5 - Broken Access Control
https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control
相關網址
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile6.php?ano=...
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile7.php?ano=...
https://diy.goqoo.com.tw/QKPhoto/Chi/SelectPayment.php?ano=...
https://diy.goqoo.com.tw/QKPhoto/Chi/ViewOrder.php?ano=...
https://diy.goqoo.com.tw/QKPhoto/Chi/SelectPaymentSave.php
敘述
0. 摘要(Summary)
【誠和證件快照*水啦!*】網站的訂單流程存在 IDOR 問題,影響包含【沖印生活照】與【加印證件照】相關流程。
無需登入,只要修改網址中的 ano 參數數值,即可存取其他使用者的照片、手機號碼、Email 與訂單資訊。
受影響頁面包含:
/QKPhoto/Chi/UploadFile6.php?ano=.../QKPhoto/Chi/UploadFile7.php?ano=.../QKPhoto/Chi/SelectPayment.php?ano=.../QKPhoto/Chi/ViewOrder.php?ano=...
1. 受影響功能(Affected Feature)
- 功能:訂單流程(檔案上傳頁面、付款方式選擇頁面、訂單完成頁面)
- 存取條件:無需登入
- 漏洞類型:IDOR / Broken Access Control
2. 前置條件(Preconditions)
- 無需登入帳號
- 無需具備任何特殊權限
- 僅需能直接存取受影響頁面並修改網址中的
ano參數數值
3. 重現步驟(Steps to Reproduce)
-
使用瀏覽器進入【誠和證件快照*水啦!*】網站首頁:
https://diy.goqoo.com.tw/QKPhoto/Chi/MainMenu.php -
點選【沖印生活照】或【加印證件照】功能,並任意選擇一種照片版型或規格後進入下一步。
-
頁面跳轉後,可觀察到網址類似下列其中之一:
/QKPhoto/Chi/UploadFile6.php?ano=.../QKPhoto/Chi/UploadFile7.php?ano=...
-
嘗試修改網址中的
ano參數為其他有效數值後重新存取頁面。
在部分情況下,頁面將直接顯示其他使用者的照片資料。 -
若修改
ano後未顯示照片,或頁面上方出現錯誤訊息,例如:Notice: Undefined index: MachineNo in /opt/lampp/htdocs/QKPhoto/Chi/UploadFile6.php on line 91
可將端點於UploadFile6.php與UploadFile7.php之間交叉替換後再次測試,例如:/QKPhoto/Chi/UploadFile6.php?ano=13268改為/QKPhoto/Chi/UploadFile7.php?ano=13268/QKPhoto/Chi/UploadFile7.php?ano=13215改為/QKPhoto/Chi/UploadFile6.php?ano=13215
經測試,對於部分ano數值,雖然原始端點不會顯示照片或會回傳錯誤訊息,但在保留相同ano的情況下切換為另一端點後,仍可顯示其他使用者的照片資料。
-
將網址中的
ano參數改回原本由系統產生的值,以便繼續完成自己的流程測試。 -
上傳一張符合規格的照片,並進入結帳流程;如畫面出現付款提示,點擊付款按鈕繼續。
-
進入付款方式頁面後,可觀察到網址類似:
/QKPhoto/Chi/SelectPayment.php?ano=... -
嘗試修改
SelectPayment.php中的ano參數為其他有效數值後重新存取頁面。
可觀察到頁面顯示其他使用者的手機號碼與 Email,表示該步驟同樣存在未授權存取問題。 -
將
ano參數改回原本值後,繼續流程。為利測試,可選擇任一可用付款方式(例如 Line Pay)、任一發票開立方式,並填入符合格式要求的手機號碼與 Email 後送出。 -
當流程進入付款頁面後,可於攔截代理工具(如 Burp Suite)中觀察到一筆:
POST /QKPhoto/Chi/SelectPaymentSave.php
其回應為HTTP/2 200 OK,且 JSON 內容中會回傳下一步網址,例如:{"err":0,"url":"ViewOrder.php?ano=..."} -
將上述 JSON 回應中的
ViewOrder.php?ano=...拼接為完整網址後直接於瀏覽器開啟,例如:https://diy.goqoo.com.tw/QKPhoto/Chi/ViewOrder.php?ano=... -
開啟訂單完成頁面後,可確認頁面顯示先前於測試流程中填入的手機號碼與 Email。
若此時再將ano參數改為其他有效數值,則可查看其他使用者的訂單資訊,包含手機號碼、Email、訂單編號、消費日期等資料。
補充觀察
依測試結果,ViewOrder.php 的回應邏輯相對單純:
- 當請求不存在的
ano數值時,伺服器會回應302並導向ShowMsg.php錯誤頁面。 - 當
ano對應有效資料時,頁面則正常顯示訂單資訊。
此外,照片資源的命名規則具有可預測性,且可由前述相關頁面內容與前端程式碼(例如 UploadFile6.js、UploadFile7.js)觀察其命名模式。若進一步結合訂單完成頁面可取得的資訊,理論上可能被用於重組照片路徑並進行自動化擷取。但這部分已超出本次確認漏洞存在所需之最低測試範圍,因此未進一步實作或驗證,僅建議一併檢查相關資源的存取控制與命名設計。
4. 概念驗證(Proof of Concept)
以下端點以瀏覽器直接修改 ano 參數數值驗證,並另以 Burp Suite 確認可重現相同結果,因此不重複附上 Burp Suite 截圖。
1. UploadFile6.php 頁面
修改 /QKPhoto/Chi/UploadFile6.php?ano=... 中的 ano 參數數值後,可顯示其他使用者的照片資料。
對應截圖:
2. UploadFile7.php 頁面
相同問題亦可於 /QKPhoto/Chi/UploadFile7.php?ano=... 頁面重現,修改 ano 參數數值後,可顯示其他使用者的照片資料。
對應截圖:
3. 同一 ano 於相關端點間切換後,可存取他人照片
測試中發現,修改參數 ano 數值後,部分數值在該端點可能不顯示照片或出現錯誤(例如:Notice: Undefined index: MachineNo in /opt/lampp/htdocs/QKPhoto/Chi/UploadFile6.php on line 91),但保留相同 ano 數值切換到另一端點後,可查看其他使用者照片。
例如:
/QKPhoto/Chi/UploadFile6.php?ano=13268改為/QKPhoto/Chi/UploadFile7.php?ano=13268/QKPhoto/Chi/UploadFile7.php?ano=13215改為/QKPhoto/Chi/UploadFile6.php?ano=13215
對應截圖:
4. SelectPayment.php 頁面可未授權查看個人資料
於付款方式選擇頁面 SelectPayment.php 中,修改 ano 參數數值後,可查看其他使用者填寫的手機號碼與 Email。
對應截圖:
5. SelectPaymentSave.php 後端回應揭露後續訂單頁面位置
於付款流程送出後,可於 POST /QKPhoto/Chi/SelectPaymentSave.php 的回應中觀察到 JSON 資料,內容包含後續訂單頁面(訂單完成頁)之相對路徑,如:
{"err":0,"url":"ViewOrder.php?ano=..."}
對應截圖:
6. ViewOrder.php 頁面可未授權存取其他使用者訂單資訊
修改 /QKPhoto/Chi/ViewOrder.php?ano=... 中的 ano 數值後,可查看其他使用者的訂單完成頁面內容。
依測試結果,頁面揭露資訊包含但不限於:
- 手機號碼
- 訂單編號
- 消費日期
對應截圖:
5. 影響(Impact)
依本次測試結果,可被未授權存取的資訊包括:
- 照片資料
- 手機號碼
- 訂單編號
- 消費日期
- 其他訂單相關資訊
此問題可能造成:
- 照片與訂單相關個資外洩
- 使用者隱私受影響
- 外洩資訊可被用於社交工程或釣魚
由於問題出現在同一流程的多個頁面,建議一併檢查其他使用相同識別參數的端點。
6. 可能的根本原因(Likely Root Cause)
後端沒有正確檢查 ano 對應資料是否屬於目前使用者,因此修改參數數值後仍會回傳其他使用者資料。
7. 嚴重性評估(Severity Assessment)
高風險(High)
理由:
- 無需登入即可利用
- 可存取其他使用者照片與個資
- 影響不只單一頁面,而是同一流程中的多個端點
8. 補充說明(Researcher Note)
測試僅限確認漏洞存在,未進行批次列舉、未大量擷取資料或破壞性操作。
測試流程中如需填寫手機號碼、Email 或上傳照片,均使用非真實個資與測試素材進行驗證,例如十分鐘手機號碼、十分鐘信箱及網路圖片,非為真實聯絡資訊或個人照片。
修補建議
1. 於所有相關端點實作伺服器端物件層級授權檢查,避免僅依賴 `ano` 參數決定可存取之資源。
2. 在回傳任何訂單、照片或個人資料前,應驗證該資源是否屬於當前使用者,或確認請求者是否具備合法存取權限。
3. 不應依賴前端流程控制、網址參數或隱藏欄位作為授權依據。
4. 建議全面檢查其他使用相同識別參數或相似訂單流程邏輯之端點,以確認是否存在相同問題。
5. 為相關功能新增授權控制之自動化測試或回歸測試,避免修補後於其他流程再次出現相同缺陷。
6. 如照片資源或訂單頁面存在可預測命名規則或可直接存取之靜態路徑,亦建議一併檢查其存取控制設計,避免透過其他方式繞過頁面層授權機制。