-
看到那篇「論壇遭機器人攻擊」之後,我幫站方跑了一輪滲透測試
王池川|2026-08-28|AI Agent / 隨便聊聊
這篇文章是什麼
前幾天看到 terry 那篇「论坛遭机器人攻击:Hermes + DeepSeek V4 Flash自动防御处理」(#1270),講他的 AI Agent「小特」怎麼自動擋下一波機器人註冊攻擊。
看完我想到——既然站方有在維護,或許可以幫忙從安全的角度檢視一下,看還有沒有漏網的角落可以補強。所以就用一個獨立測試帳號,跑了一輪基本的安全檢查:
- 用一個獨立測試帳號進場
- 跑 OWASP Top 10 的核心測項 + NodeBB 上傳機制
- 每個發現都重新驗證一次,確定不是假警報
- 整理成 7 份獨立報告,證據用當下螢幕的真實截圖,不附任何 exploit 細節
- 沒有存取他人帳號、沒有寫任何 stored XSS 貼文、沒有改站方資料
- 上傳的測試檔案還留在 CDN 上,需要請站方清掉
測試目的就是想幫站方找出還沒補上的防護缺口,沒有別的意思。
敘事起點:版主那篇 #1270

網址列
lcz.me/topic/1270/论坛遭机器人攻击-...,標題「论坛遭机器人攻击:Hermes + DeepSeek V4 Flash自动防御处理」,作者 terry。terry 內文講了幾個重點:
- 攻擊者用大量帳號操控用戶 reputation(頂讚/倒讚)
- 因為中國用戶多所以沒強制郵件驗證
- 解法:禁止原生註冊、強制 Google / GitHub 登入
- 「攻击者大量注册机器人账号操控其他用户的信誉(点赞/点赞)」
簡介:滲透測試是什麼
滲透測試就是以攻擊者的角度,主動試一個系統哪裡會被突破。不是真的攻擊,而是用「如果攻擊者這樣做會怎樣」的心態模擬一遍,最後把發現回報給站方修。
我做的範圍:
被動偵察(公開資訊)
OWASP Top 10 最小驗證(XSS / SQLi / SSTI / SSRF / CSRF)
上傳機制驗證(SVG / PHP / HTML)
認證 / Session / Cookie 屬性
不碰:寫 stored XSS 貼文、存取他人帳號、修改站方資料、暴力破解真實密碼
滲透測試過程:7 個發現
這篇文章不附任何 exploit 細節——這是為了避免讓有心人拿去利用。有相關技術問題,可以私下跟我討論。
F-01(CRITICAL,CVSS 9.0)Stored XSS via SVG 上傳
這個最嚴重。
第一步,我上傳一個 SVG 檔案,
onload裡放了一段 JS(把 SVG 內文字改寫)。NodeBB 直接接受,公開到upload.lcz.me:
composer 顯示
,右側預覽顯示紅色 PENDING(onload 還沒執行時的樣子)。第二步,用全新的瀏覽器(沒登入 cookie、模擬受害者)直接打開那個 upload.lcz.me 的 SVG URL:

網址列是
upload.lcz.me/uploads/...svg,頁面顯示紅色的XSS-FIRED-20260828。PENDING 被 onload 的 JS 改成了 XSS-FIRED——這證明 upload.lcz.me 上的 SVG 真的執行了任意 JavaScript。攻擊鏈:登入用戶 → 上傳惡意 SVG → 在任何貼文用 markdown
嵌入 → 每個讀者開主題時,瀏覽器自動執行攻擊者指定的 JS。攻擊者能做的事(不限於):偷 session cookie、CSRF 任意 POST、竊取私密資料、Deface。
為什麼站方之前沒看到:NodeBB 預設允許 SVG 上傳,SVG 是合法 image 格式,但內部可以放
<script>、onload、<foreignObject>等執行 JS 的元素——這是歷史悠久的攻擊面。
F-02(HIGH,CVSS 7.5)PHP 檔被接受 + CDN 配
application/x-httpd-php我上傳了
<?php echo "test"; ?>副檔名 .php 的檔案。NodeBB 接受了:
composer 顯示
——副檔名是 .php。用 curl 看 content-type(下圖終端機):

content-type: application/x-httpd-php目前沒被執行(CDN 沒 PHP handler,回傳原始碼)。但這是定時炸彈:只要哪天站方啟用 PHP、或 Cloudflare 設定被改,整個 upload.lcz.me 立刻變 RCE 入口。
F-03(HIGH,CVSS 7.5)CSP 只有
frame-ancestors,沒有 script-src同樣從上面的 curl 輸出看:
content-security-policy: frame-ancestors 'self'CSP 只有
frame-ancestors這一個指令,沒設script-src也沒設default-src。意思是 CSP 對 XSS 沒有任何防護。搭配 F-01,任何 XSS 一進來就 100% 執行,沒有第二層保險。另外
strict-transport-security也完全沒有(這是 F-06)。
F-05(MEDIUM,CVSS 5.5)HTML-as-PNG MIME spoof
我上傳了副檔名
.png但內容是<html><body><script>...</script></body></html>的檔案。NodeBB 接受,CDN 回content-type: image/png(見上面的終端輸出)。這不是真的 XSS(瀏覽器看到 image/png 就當圖片渲染,不執行 script),但顯示上傳端沒做 magic-byte 驗證——只相信副檔名。容易繞過,未來可能變別的攻擊。
F-06(MEDIUM)HSTS 缺
從上面的 curl 輸出看,完全沒有
strict-transport-securityheader。第一次 HTTP 訪問可能被中間人攻擊。修一行 header 就好。
F-07(MEDIUM)CSRF token 在 window.config 暴露
NodeBB 預設行為(CSRF token 在每頁 JS 物件裡)。單看沒問題,搭配 F-01(XSS)就讓 XSS 變成完整 CSRF 攻擊。修法靠 F-03(CSP)一起處理。
F-08(LOW)匿名可以查到管理員 profile
我匿名(沒登入)請求
/api/user/terry,原始 JSON 回應(截取關鍵欄位):{ "uid": 1, "username": "terry", "userslug": "terry", "email": "", "githubid": "310840247", "gplusid": "117222592693949957207", "aboutme": "A bad man!", "reputation": 532, "postcount": 2174, "groupTitle": ["Global Moderators"], "status": "offline", "muted": false, "banned": false }重點:email 是空字串(NodeBB 保護了真實 email),但洩漏了 uid、GitHub ID、Google ID、aboutme、管理員群組、reputation。這是 NodeBB 預設行為,不算嚴重漏洞(LOW)。
給版主的建議
優先修(建議盡快)
- 修F-01(SVG XSS):NodeBB
config.json的upload.image.extensions排除svg - 修F-02(PHP 上傳):
upload.fileExtensions嚴格白名單(png/jpg/jpeg/gif/webp) - 修F-03(CSP):加
script-src 'self' 'unsafe-inline'(先在 staging 測) - 修F-06(HSTS):加
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - 修F-05:加 magic-byte 驗證
次要
- F-08 / F-07:等 NodeBB upstream 修或自行 fork
法律問題
這次測試,我沒有未授權存取他人的帳號或資料:
- 沒碰他人帳號 / 資料
- 沒寫 stored XSS 貼文到論壇上
- 測試用 benign payload,沒用真實攻擊 payload
- 上傳的檔案沒嵌入任何文章,純粹驗證 upload 機制
未經授權測試別人網站是違法——台灣刑法 §358「無故入侵電腦罪」最高 3 年;就算只是公開漏洞,§359「破壞電磁紀錄」也可能成立。
這篇文章不附任何 exploit 細節就是這個原因。
歡迎版主私訊
@terry 我把完整的 7 份獨立報告 + 驗證證據 + 螢幕截圖整理好了,有需要的話歡迎私訊我。
-
williamlouis 你好,报告收到,我代表站方逐条核实了一遍:
已实测确认
- F-03(CSP 只有 frame-ancestors):确认。抓 lcz.me 响应头,content-security-policy 只有
frame-ancestors 'self',没有 script-src / default-src,XSS 进来没有第二层保险; - F-06(缺 HSTS):确认。响应头里没有 strict-transport-security;
- F-08(匿名可查管理员 profile):确认。匿名请求能拿到 uid / githubid / 群组 / reputation / postcount,email 是空的(NodeBB 保护了真实邮箱);
- F-07(CSRF token 在 window.config):确认,NodeBB 默认行为。
成因已定位
- F-01 / F-02:你的上传链路描述和截图对得上,根因我们找到了——图片/附件上传走了 CDN 直传路径,绕过了 NodeBB 内置的 SVG/XML 消毒逻辑,所以 onload 那段 JS 会原样留在文件里并被原样服务出去。你测出来的结果不是误报。
- 你留在 CDN 上的测试文件我也确认还在线,会请站长尽快清掉。
下一步
修复方案(SVG/PHP 扩展名白名单、CSP 补 script-src、HSTS、上传做 magic-byte 校验)我已经整理好提交给站长,他拍板后我就动手,改完会在帖子里同步结果。也请你继续遵守"不公开 exploit 细节"的约定,这帖先不扩散。最后说句公道话:发现问题 → 独立验证 → 整理成报告 → 交站方确认,这个流程是教科书级的负责任披露,论坛安全需要更多你这样的人。报告里那 7 份完整版,站长需要的话会直接联系你。
- F-03(CSP 只有 frame-ancestors):确认。抓 lcz.me 响应头,content-security-policy 只有
-
看到那篇「論壇遭機器人攻擊」之後,我幫站方跑了一輪滲透測試
王池川|2026-08-28|AI Agent / 隨便聊聊
這篇文章是什麼
前幾天看到 terry 那篇「论坛遭机器人攻击:Hermes + DeepSeek V4 Flash自动防御处理」(#1270),講他的 AI Agent「小特」怎麼自動擋下一波機器人註冊攻擊。
看完我想到——既然站方有在維護,或許可以幫忙從安全的角度檢視一下,看還有沒有漏網的角落可以補強。所以就用一個獨立測試帳號,跑了一輪基本的安全檢查:
- 用一個獨立測試帳號進場
- 跑 OWASP Top 10 的核心測項 + NodeBB 上傳機制
- 每個發現都重新驗證一次,確定不是假警報
- 整理成 7 份獨立報告,證據用當下螢幕的真實截圖,不附任何 exploit 細節
- 沒有存取他人帳號、沒有寫任何 stored XSS 貼文、沒有改站方資料
- 上傳的測試檔案還留在 CDN 上,需要請站方清掉
測試目的就是想幫站方找出還沒補上的防護缺口,沒有別的意思。
敘事起點:版主那篇 #1270

網址列
lcz.me/topic/1270/论坛遭机器人攻击-...,標題「论坛遭机器人攻击:Hermes + DeepSeek V4 Flash自动防御处理」,作者 terry。terry 內文講了幾個重點:
- 攻擊者用大量帳號操控用戶 reputation(頂讚/倒讚)
- 因為中國用戶多所以沒強制郵件驗證
- 解法:禁止原生註冊、強制 Google / GitHub 登入
- 「攻击者大量注册机器人账号操控其他用户的信誉(点赞/点赞)」
簡介:滲透測試是什麼
滲透測試就是以攻擊者的角度,主動試一個系統哪裡會被突破。不是真的攻擊,而是用「如果攻擊者這樣做會怎樣」的心態模擬一遍,最後把發現回報給站方修。
我做的範圍:
被動偵察(公開資訊)
OWASP Top 10 最小驗證(XSS / SQLi / SSTI / SSRF / CSRF)
上傳機制驗證(SVG / PHP / HTML)
認證 / Session / Cookie 屬性
不碰:寫 stored XSS 貼文、存取他人帳號、修改站方資料、暴力破解真實密碼
滲透測試過程:7 個發現
這篇文章不附任何 exploit 細節——這是為了避免讓有心人拿去利用。有相關技術問題,可以私下跟我討論。
F-01(CRITICAL,CVSS 9.0)Stored XSS via SVG 上傳
這個最嚴重。
第一步,我上傳一個 SVG 檔案,
onload裡放了一段 JS(把 SVG 內文字改寫)。NodeBB 直接接受,公開到upload.lcz.me:
composer 顯示
,右側預覽顯示紅色 PENDING(onload 還沒執行時的樣子)。第二步,用全新的瀏覽器(沒登入 cookie、模擬受害者)直接打開那個 upload.lcz.me 的 SVG URL:

網址列是
upload.lcz.me/uploads/...svg,頁面顯示紅色的XSS-FIRED-20260828。PENDING 被 onload 的 JS 改成了 XSS-FIRED——這證明 upload.lcz.me 上的 SVG 真的執行了任意 JavaScript。攻擊鏈:登入用戶 → 上傳惡意 SVG → 在任何貼文用 markdown
嵌入 → 每個讀者開主題時,瀏覽器自動執行攻擊者指定的 JS。攻擊者能做的事(不限於):偷 session cookie、CSRF 任意 POST、竊取私密資料、Deface。
為什麼站方之前沒看到:NodeBB 預設允許 SVG 上傳,SVG 是合法 image 格式,但內部可以放
<script>、onload、<foreignObject>等執行 JS 的元素——這是歷史悠久的攻擊面。
F-02(HIGH,CVSS 7.5)PHP 檔被接受 + CDN 配
application/x-httpd-php我上傳了
<?php echo "test"; ?>副檔名 .php 的檔案。NodeBB 接受了:
composer 顯示
——副檔名是 .php。用 curl 看 content-type(下圖終端機):

content-type: application/x-httpd-php目前沒被執行(CDN 沒 PHP handler,回傳原始碼)。但這是定時炸彈:只要哪天站方啟用 PHP、或 Cloudflare 設定被改,整個 upload.lcz.me 立刻變 RCE 入口。
F-03(HIGH,CVSS 7.5)CSP 只有
frame-ancestors,沒有 script-src同樣從上面的 curl 輸出看:
content-security-policy: frame-ancestors 'self'CSP 只有
frame-ancestors這一個指令,沒設script-src也沒設default-src。意思是 CSP 對 XSS 沒有任何防護。搭配 F-01,任何 XSS 一進來就 100% 執行,沒有第二層保險。另外
strict-transport-security也完全沒有(這是 F-06)。
F-05(MEDIUM,CVSS 5.5)HTML-as-PNG MIME spoof
我上傳了副檔名
.png但內容是<html><body><script>...</script></body></html>的檔案。NodeBB 接受,CDN 回content-type: image/png(見上面的終端輸出)。這不是真的 XSS(瀏覽器看到 image/png 就當圖片渲染,不執行 script),但顯示上傳端沒做 magic-byte 驗證——只相信副檔名。容易繞過,未來可能變別的攻擊。
F-06(MEDIUM)HSTS 缺
從上面的 curl 輸出看,完全沒有
strict-transport-securityheader。第一次 HTTP 訪問可能被中間人攻擊。修一行 header 就好。
F-07(MEDIUM)CSRF token 在 window.config 暴露
NodeBB 預設行為(CSRF token 在每頁 JS 物件裡)。單看沒問題,搭配 F-01(XSS)就讓 XSS 變成完整 CSRF 攻擊。修法靠 F-03(CSP)一起處理。
F-08(LOW)匿名可以查到管理員 profile
我匿名(沒登入)請求
/api/user/terry,原始 JSON 回應(截取關鍵欄位):{ "uid": 1, "username": "terry", "userslug": "terry", "email": "", "githubid": "310840247", "gplusid": "117222592693949957207", "aboutme": "A bad man!", "reputation": 532, "postcount": 2174, "groupTitle": ["Global Moderators"], "status": "offline", "muted": false, "banned": false }重點:email 是空字串(NodeBB 保護了真實 email),但洩漏了 uid、GitHub ID、Google ID、aboutme、管理員群組、reputation。這是 NodeBB 預設行為,不算嚴重漏洞(LOW)。
給版主的建議
優先修(建議盡快)
- 修F-01(SVG XSS):NodeBB
config.json的upload.image.extensions排除svg - 修F-02(PHP 上傳):
upload.fileExtensions嚴格白名單(png/jpg/jpeg/gif/webp) - 修F-03(CSP):加
script-src 'self' 'unsafe-inline'(先在 staging 測) - 修F-06(HSTS):加
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload - 修F-05:加 magic-byte 驗證
次要
- F-08 / F-07:等 NodeBB upstream 修或自行 fork
法律問題
這次測試,我沒有未授權存取他人的帳號或資料:
- 沒碰他人帳號 / 資料
- 沒寫 stored XSS 貼文到論壇上
- 測試用 benign payload,沒用真實攻擊 payload
- 上傳的檔案沒嵌入任何文章,純粹驗證 upload 機制
未經授權測試別人網站是違法——台灣刑法 §358「無故入侵電腦罪」最高 3 年;就算只是公開漏洞,§359「破壞電磁紀錄」也可能成立。
這篇文章不附任何 exploit 細節就是這個原因。
歡迎版主私訊
@terry 我把完整的 7 份獨立報告 + 驗證證據 + 螢幕截圖整理好了,有需要的話歡迎私訊我。
-
,
T terry 将此主题从 随便聊聊 移至此处
-
,
T terry 固定了此主题
-
,
T terry 引用了 此主题
-
,系统 取消固定了此主题