Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00955
- Vendor: 悟空科技股份有限公司
- Title: 悟空科技股份有限公司-誠和證件快照*水啦!* 照片上傳流程存在反射型 XSS
- Introduction: 照片上傳流程中的參數存在反射型 XSS,攻擊者可構造惡意網址,在使用者瀏覽器中執行 JavaScript。
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2026/07/28 10:23:31 : 新提交 (由 更新此狀態)
- 2026/08/03 12:19:51 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/08/05 18:56:19 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/08/05 18:56:19 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/08/05 18:56:19 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/09/27 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
參考資料
漏洞說明: OWASP - Cross-site Scripting (XSS)
https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
防護原則: OWASP - XSS (Cross Site Scripting) Prevention Cheat Sheet
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
防禦繞過方式: OWASP - XSS Filter Evasion Cheat Sheet
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
相關網址
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile6.php?ano=...
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile7.php?ano=...
敘述
0. 摘要(Summary)
網站照片上傳流程存在反射型 XSS,受影響頁面包含:
/QKPhoto/Chi/UploadFile6.php?ano=.../QKPhoto/Chi/UploadFile7.php?ano=...
在 ano 參數後加入:
"><script>alert(1)</script>
頁面載入後會連續顯示三次內容為 1 的彈窗,表示相同 Payload 在頁面中被執行三次。
經 Burp Suite 檢視回應內容,可確認同一個 ano 會被輸出至兩個 AlbumNo 隱藏欄位與一個上一頁連結,因此注入的 <script> 被反射三次。
使用:
"><script>alert(document.cookie)</script>
也會連續顯示三次目前 JavaScript 可存取的 Cookie,且可存取的值包含 PHPSESSID,表示其未設定 HttpOnly。
1. 受影響功能(Affected Feature)
- 功能:照片上傳頁面
- 受影響參數:
ano -
受影響頁面:
UploadFile6.phpUploadFile7.php
- 存取條件:無需登入
-
反射位置:
- 兩個
AlbumNo隱藏欄位 - 上一頁連結
- 兩個
2. 漏洞驗證之前置條件(Preconditions for Verification)
- 修改網址列中的
ano參數即可驗證 - 無需登入帳號與特殊權限
3. 重現步驟(Steps to Reproduce)與概念驗證(Proof of Concept)
以下操作主要使用瀏覽器驗證,並使用 Burp Suite 確認參數在 HTML 回應中的反射位置。
步驟 1:進入照片上傳頁面
- 使用瀏覽器進入【誠和證件快照*水啦!*】網站首頁:
https://diy.goqoo.com.tw/QKPhoto/Chi/MainMenu.php
-
點選【沖印生活照】或【加印證件照】,並任意選擇一種照片版型或規格後進入下一步。
-
頁面跳轉後,可觀察到網址類似:
/QKPhoto/Chi/UploadFile6.php?ano=...
或:
/QKPhoto/Chi/UploadFile7.php?ano=...
步驟 2:於 UploadFile6.php 執行 JavaScript
在網址列中的 ano 數值後加入:
"><script>alert(1)</script>
例如:
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile6.php?ano=38097"><script>alert(1)</script>
送出後,頁面會顯示內容為 1 的對話框。
URL Encoding 版本:
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile6.php?ano=38097%22%3E%3Cscript%3Ealert%281%29%3C%2Fscript%3E
步驟 3:於 UploadFile6.php 讀取 Cookie
將 Payload 改為:
"><script>alert(document.cookie)</script>
例如:
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile6.php?ano=38097"><script>alert(document.cookie)</script>
頁面載入後,對話框會顯示目前 JavaScript 可存取的 Cookie,且包含 PHPSESSID 及其值,表示其未設定 HttpOnly。
步驟 4:於 UploadFile7.php 執行 JavaScript
在網址列中的 ano 數值後加入:
"><script>alert(1)</script>
例如:
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile7.php?ano=38100"><script>alert(1)</script>
送出後,頁面同樣會顯示內容為 1 的對話框。
URL Encoding 版本:
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile7.php?ano=38100%22%3E%3Cscript%3Ealert%281%29%3C%2Fscript%3E
步驟 5:於 UploadFile7.php 讀取 Cookie
將 Payload 改為:
"><script>alert(document.cookie)</script>
例如:
https://diy.goqoo.com.tw/QKPhoto/Chi/UploadFile7.php?ano=38100"><script>alert(document.cookie)</script>
頁面載入後,同樣可顯示包含 PHPSESSID 在內的 Cookie。
步驟 6:確認同一 Payload 會被反射至三個位置
使用 Burp Suite 檢視 HTTP Response,可看到 ano 中的 Payload 被伺服器直接輸出至 HTML。
在 UploadFile6.php 中,已確認三個反射位置:
frmEdit表單中的AlbumNo:
<input type="hidden" name="AlbumNo" value="...">
frmUpload表單中的AlbumNo:
<input type="hidden" name="AlbumNo" value="...">
- 上一頁連結:
<a href="SelectLayout.php?ano=...">
在 UploadFile7.php 中,亦確認三個反射位置:
frmEdit表單中的AlbumNofrmUpload表單中的AlbumNo- 上一頁連結:
<a href="SelectPhotoKind.php?ano=...">
這表示修補時應處理所有 ano 的輸出位置,而非只修補其中一處。
4. 預期行為(Expected Behavior)
ano 預期為數字,伺服器應拒絕包含其它字元的輸入。
即使參數被輸出至 HTML,也應經過適當編碼,不得改變原本的 HTML 結構或執行 JavaScript。
5. 實際行為(Actual Behavior)
伺服器會將 ano 未經適當編碼地輸出至 HTML。
攻擊者可使用 "> 結束原本的 HTML 屬性,並插入 <script> 執行 JavaScript。
6. 影響(Impact)
攻擊者可構造惡意網址並誘導使用者開啟,使 JavaScript 在 diy.goqoo.com.tw 網域下執行。
可能造成:
- 讀取頁面內容
- 讀取未設定
HttpOnly的 Cookie - 修改頁面內容或顯示釣魚介面
- 代替使用者送出同源請求
實測已確認 PHPSESSID 可由 document.cookie 讀取,但未進一步測試是否可用於 Session 冒用。
7. 可能的根本原因(Likely Root Cause)
後端將 ano 直接輸出至 HTML 屬性及連結,未進行格式驗證與適當的輸出編碼。
8. 嚴重性評估(Severity Assessment)
中風險(Medium)
理由:
- 無需登入即可建立惡意網址
- 可執行任意 JavaScript
- 可讀取包含
PHPSESSID在內的非HttpOnlyCookie - 實際攻擊通常需要誘導使用者開啟網址
- 尚未確認可直接接管 Session 或執行敏感操作
9. 補充說明(Researcher Note)
- 測試僅使用:
alert(1)
與:
alert(document.cookie)
且未將 Cookie 傳送至外部伺服器,亦未嘗試冒用 Session。
- 由於此系統與技術牽涉到兩家公司-誠和國際股份有限公司(
https://www.seiwainc.com.tw/)與悟空科技股份有限公司(https://www.goqoo.com/)。就可見資料顯示(https://twincn.com/84108618與https://www.twincn.com/80682392),兩間公司經營者高度相關。但目前無法確定哪間公司統籌系統、技術與網站走向,因此建議同時聯絡兩間公司。
以下是兩間公司之相關信箱:
誠和國際:[email protected]
悟空科技:[email protected]
DIY證件照-台灣站(悟空科技):[email protected]修補建議
## 修補建議(Remediation Suggestions)
1. 若 `ano` 只允許數字,應於伺服器端限制格式:
```regex
^[0-9]+$
```
2. 對所有輸出至 HTML 的 `ano` 進行適當編碼。
3. 全面修補兩個 `AlbumNo` 隱藏欄位及上一頁連結,不應只處理其中一處。
4. 檢查其它使用 `ano` 的頁面是否存在相同問題。
5. 為 `PHPSESSID` 設定:
```text
HttpOnly
Secure
SameSite
```
6. 修補後新增 XSS 回歸測試,確認特殊字元不會改變 HTML 結構或執行 JavaScript。