灵感笔记 100 3211 solves 你是一个自由撰稿人,使用"灵感笔记"云笔记工具。今天登录...

Создано: 9 мая 2026 г.

Отвечено с использованием GPT-5.5 Thinking от Chat01

Вопрос

灵感笔记
100
3211 solves

你是一个自由撰稿人,使用"灵感笔记"云笔记工具。今天登录后,偶然发现这个笔记系统似乎有点问题...找到隐藏的Flag!
题目地址:39.105.213.28:5000

Мысль

undefined

Мысль

undefined

Мысль

undefined

Мысль

Concluding approach and providing suggestions

For the final, I don’t need citations unless I mention using a web search. It’s not necessary unless I reference specific links. I’ll avoid citing for Chat01 unless really relevant. I’ll include "无法直接拿到 flag" and suggest running tests such as regex searches and IDOR with curl when reachable. I'll use this structure:

  • Conclusion: Can't get the flag right now due to port 5000 connection refusal.
  • But based on the prompt ("cloud notes/login/system issue"), potential solution: IDOR on storage or API.

Thought for 1m 24s

Ответ

我这边没法直接取到真实 Flag:目标 39.105.213.28:5000 当前返回的是 connection refused,也就是端口 5000 上服务没有运行或实例已过期,而不是页面逻辑问题。

我实际测到的是:

bash
curl http://39.105.213.28:5000/ # curl: (7) Failed to connect to 39.105.213.28 port 5000 nc -vz -w 5 39.105.213.28 5000 # connect failed: Connection refused

所以我不能凭空编一个 Flag。等实例恢复后,这题建议优先按“笔记系统 + 登录后 + 云笔记”思路查 前端存储 / API 越权 / 笔记 ID 枚举。你可以在能打开页面后直接跑下面这段 Console 脚本:

js
(async () => { const hit = /flag\{.*?\}|ctf\{.*?\}|[A-Z0-9_]+CTF\{.*?\}/i; console.log("[cookie]", document.cookie); console.log("[localStorage]", Object.fromEntries(Object.entries(localStorage))); console.log("[sessionStorage]", Object.fromEntries(Object.entries(sessionStorage))); const allStorage = [ document.cookie, JSON.stringify(Object.fromEntries(Object.entries(localStorage))), JSON.stringify(Object.fromEntries(Object.entries(sessionStorage))) ].join("\n"); console.log("[storage flag match]", allStorage.match(hit)); const paths = [ "/api/me", "/api/user", "/api/profile", "/api/notes", "/api/note", "/api/notes/1", "/api/note/1", "/notes/1", "/note/1", "/flag", "/api/flag" ]; for (const p of paths) { try { const r = await fetch(p, { credentials: "include" }); const t = await r.text(); console.log("\n==", p, r.status, "==\n", t.slice(0, 500)); const m = t.match(hit); if (m) console.log("FOUND FLAG:", m[0]); } catch (e) { console.log("ERR", p, e.message); } } })();

如果 /api/notes/1/api/note/1 能返回笔记内容,继续枚举:

js
(async () => { const hit = /flag\{.*?\}|ctf\{.*?\}|[A-Z0-9_]+CTF\{.*?\}/i; for (let i = 1; i <= 200; i++) { for (const p of [`/api/notes/${i}`, `/api/note/${i}`, `/notes/${i}`, `/note/${i}`]) { try { const r = await fetch(p, { credentials: "include" }); const t = await r.text(); const m = t.match(hit); if (m) { console.log("FOUND:", p, m[0]); return; } } catch {} } } console.log("not found in first 200 ids"); })();

这类 100 分入门 Web 题,最可能的点是:Flag 藏在浏览器 Storage 里,或者笔记接口存在 IDOR,改 /notes/自己的id/notes/1/notes/2 就能看到别人的隐藏笔记。当前服务不可达,所以还不能确认最终 Flag。

Поделиться этим Q&A