CTF Misc 签到 GXUST·CTF:查看源码 + HTML 注释 + Base64 解码(附 Base64 原理)

比赛:GXUST·CTF

分类:Misc / 签到(Web 入门)

难度:★☆☆☆☆(签到)

考点:查看网页源码、HTML 注释、Base64 编码与解码


一、题目描述

打开题目,页面非常简洁,只有三行字:

页面直接提示:"按个 ctrl + U 看一看吧~"。

Ctrl + U 是浏览器里查看网页源代码的快捷键,这等于把解题方向明牌告诉我们了------flag 大概率藏在源码里。


二、解题步骤

1. 查看源码

按下 Ctrl + U(或右键页面 → "查看网页源代码"),在第 27 行发现了一行 HTML 注释:

html 复制代码
<!--    flag is here: ZmxhZ3tXZWxjb21lIHRvIEdYVVNUwrdDVEZ9    -->

注释里写着 flag is here:,后面跟着一串看起来像 Base64 的字符串:

复制代码
ZmxhZ3tXZWxjb21lIHRvIEdYVVNUwrdDVEZ9

注意:复制时要完整、准确地复制,大小写以及 Y、V 等字符不要看漏或抄错,否则会解码失败或得到错误结果。

2. Base64 解码

这串字符只包含字母和数字,且长度是 4 的倍数,符合 Base64 的特征。对其进行 Base64 解码。

方法一:Linux / Mac 命令行

bash 复制代码
echo "ZmxhZ3tXZWxjb21lIHRvIEdYVVNUwrdDVEZ9" | base64 -d

方法二:在线工具 CyberChef

打开 https://gchq.github.io/CyberChef/ ,拖入 From Base64 模块,粘贴字符串即可解码。

解码结果:

复制代码
flag{Welcome to GXUST·CTF}

3. 校验(可选)

为了确认结果正确,可以把解码后的内容重新 Base64 编码,看是否能还原出源码中的字符串:

bash 复制代码
echo -n "flag{Welcome to GXUST·CTF}" | base64
# 输出:ZmxhZ3tXZWxjb21lIHRvIEdYVVNUwrdDVEZ9

与源码完全一致,flag 正确。


三、得到 flag

复制代码
flag{Welcome to GXUST·CTF}

四、知识点讲解

4.1 查看网页源码

  • 快捷键:Ctrl + U(Windows / Linux)、Cmd + Option + U(Mac);
  • 也可以右键 → "查看网页源代码",或按 F12 打开开发者工具;
  • 前端的 HTML、CSS、JavaScript 代码对用户是完全透明的,任何人都能看到。

4.2 HTML 注释

HTML 注释的格式为:

html 复制代码
<!-- 这是一段注释,页面上不会显示,但源码里能看到 -->

CTF 中经常把提示或 flag 藏在注释里,属于最基础的"信息隐藏"位置。类似的隐藏位置还有:

  • HTML 标签的隐藏属性;
  • CSS / JS 文件中的注释;
  • HTTP 响应头(F12 → Network 查看);
  • 元素的 display:none 等。

4.3 Base64 编码

Base64 是一种编码方式,不是加密算法。 它没有密钥,任何人都能一键解码,因此绝不能用来保护敏感信息。

  • 字符集 :A-Z、a-z、0-9、+、/,共 64 个字符,因此得名 Base64;
  • 填充 :输出长度为 4 的倍数,不足时用 = 在末尾补齐;
  • 作用:把二进制数据用可打印字符表示,常用于在文本协议中传输数据(如邮件、Data URL、JWT 等),目的不是保密;
  • 常见变种 :
    • Base32:字符集 A-Z、2-7;
    • Base16(Hex):字符集 0-9、A-F;
    • Base64URL:用 -、_ 替换 +、/,用于 URL 场景。

各语言解码示例:

python 复制代码
# Python
import base64
base64.b64decode("ZmxhZ3tXZWxjb21lIHRvIEdYVVNUwrdDVEZ9").decode()

4.4 如何快速识别常见编码

编码 识别特征
Base64 字母数字 + + /,可能以 = 结尾,长度为 4 的倍数
Base32 大写字母 + 2-7,可能以 = 结尾
Hex / Base16 仅 0-9、a-f(或 A-F)
URL 编码 % 加两位十六进制,如 %20
Unicode \uXXXX 形式
摩斯密码 . 和 - 组成

五、安全启示(防御视角)

这道签到题虽然简单,但反映了一个非常重要的安全原则:

  1. 前端没有秘密可言:任何下发到浏览器的 HTML、JS、注释,用户都能完整查看。不要把 flag、密钥、后台接口、内部逻辑等敏感信息写在前端。
  2. 编码 ≠ 加密:Base64、Hex、URL 编码都只是"换一种表示方式",可逆且无需密钥,几秒钟就能还原。真正要保密必须使用正规的加密算法并妥善保管密钥。
  3. 敏感信息放在服务端:flag、凭证等应保存在服务器,只在服务端校验和使用,不能通过页面源码、Cookie、JS 变量等方式下发给客户端。

六、总结

本题是标准的签到题,解题链路为:

按提示 Ctrl + U 查看源码 → 在 HTML 注释中找到 Base64 字符串 → Base64 解码 → 得到 flag。

需要记住的核心点:

  • 前端源码对用户完全透明,注释是 CTF 常见藏 flag 的位置;
  • Base64 是编码不是加密,可一键还原;
  • 看到特征明显的字符串,先判断编码类型,再用对应工具解码。

Flag:

复制代码
flag{Welcome to GXUST·CTF}

版权声明

  • 本文为个人 CTF 学习笔记(Writeup),题目版权归 GXUST·CTF 主办方所有。
  • 本文的文字分析、整理与总结部分为本人原创,转载请注明出处。
  • 本文仅用于网络安全学习与研究,请勿用于任何未授权测试;如内容涉及侵权,请联系本人删除。
相关推荐
汤米粥1 小时前
目前流行的前端 CSS 框架
前端·css·bootstrap·ant design·‌tailwind css·bulma
徐小夕1 小时前
扒了JitWord的源码,我终于搞懂了企业级在线Word到底有多难写
前端·vue.js·github
lily5227831 小时前
工具池与分发
前端·chrome
徐小夕@趣谈前端2 小时前
老旧Word格式全支持!JitWord协同AI文档4.1,让Word文档无缝迁移到Web端
前端·人工智能·word
螺丝钉tina2 小时前
[Playwright][01] 从 Puppeteer 到 Playwright:为什么选择 Playwright + TypeScript?
前端·javascript·typescript
Sailing2 小时前
🚀🚀【封闭结束6】Agent 会话服务与鉴权上下文
前端·人工智能·agent
IT_陈寒2 小时前
Java项目实战经验分享:一次由JPA懒加载引发的生产事故
前端·人工智能·后端
环境栈笔记2 小时前
浏览器多开同步怎么做?先分清设置、登录态和窗口操作
前端·人工智能·后端·自动化
是立不是利2 小时前
CSS 的层叠与优先级——为什么我的样式不生效
前端·css