题目:Lemon
分类:Web / 前端 / 签到
难度:★☆☆☆☆(入门)
考点:查看网页源码、前端 JS 限制的绕过、HTML 注释
〇、写在前面
这道题表面上"右键被禁用、F12 被禁用",看起来没法看源码,但这些限制都只是网页里的 JavaScript 搞的鬼。本文会讲清楚它是怎么禁用的、为什么这种限制不可靠,以及如何一键绕过拿到 flag。
一、题目描述
题目信息如下,提示"尝试看看源码吧":

打开容器地址,页面只有一行字:

那一天的源神 启动起来~
"源神"谐音"原神",结合题目提示,方向很明确:看网页源代码。
二、先看它是怎么"禁用"右键和 F12 的
如果直接在页面上右键,会弹出一个提示框并且右键菜单不出现;按 F12 也会被拦截。我们先抓取页面原始 HTML,看看它做了什么:
bash
curl -s "http://你的靶机地址/"
页面里的关键 JavaScript 如下:
javascript
<script>
// 监听"右键"事件
document.addEventListener('contextmenu', function(e) {
alert('如果右键跟酸与涩,都只是梦一重');
e.preventDefault(); // 阻止默认的右键菜单弹出
});
// 监听"键盘按下"事件
document.addEventListener('keydown', function(e) {
if (e.key === 'F12') {
alert('也许我,仍会选择,某个FLAG,再跟你重逢');
e.preventDefault(); // 阻止 F12 打开开发者工具
}
});
</script>
原理拆解:
| 代码 | 作用 |
|---|---|
addEventListener('contextmenu', ...) |
监听右键点击事件 |
e.preventDefault() |
阻止浏览器默认行为(右键菜单 / F12 开发者工具) |
addEventListener('keydown', ...) |
监听键盘,判断按下的是不是 F12 |
也就是说,它只是在你浏览器执行这段 JS 时,拦截了右键和 F12,并不是真的从系统层面禁止了查看源码。
三、为什么这种限制一戳就破(核心理解)
记住一个原则:前端(浏览器里)的一切限制都可以被绕过,因为代码运行在你自己的电脑上。
- 这段 JS 只有在"浏览器正常加载并执行网页"时才生效;
- 只要换一种不经过这段 JS 的方式看源码,它就完全拦不住;
- 而且服务器返回的原始 HTML 是客观存在的,用工具直接抓,JS 根本不会执行。
四、解题步骤(三种绕过方法)
方法一:Ctrl + U 查看源代码(最简单,推荐)
- 在题目页面直接按
Ctrl + U; - 这是浏览器自带的"查看源代码"功能,由浏览器本身提供,不经过网页的 JavaScript,所以右键/F12 的拦截对它无效;
- 拉到页面最底部,能看到一行 HTML 注释:
html
<!-- 0xGame{Welc0me_t0_0xG@me_2025_Web!!!} -->
方法二:curl 直接抓原始 HTML(绕过所有 JS)
在终端(Windows 用 curl.exe,Linux/Mac 用 curl)输入:
bash
curl -s "http://你的靶机地址/"
命令讲解:
| 部分 | 含义 |
|---|---|
curl |
发送网络请求、获取网页内容的工具 |
-s |
silent,静默模式,不显示进度条 |
"http://.../" |
目标地址 |
因为 curl 只拿原始数据、不会运行任何 JavaScript,所以右键和 F12 的拦截逻辑根本不执行,返回的 HTML 末尾直接带着注释 flag。
也可以一步到位只提取 flag:
bash
curl -s "http://你的靶机地址/" | grep -oE "0xGame\{[^}]*\}"
输出:
0xGame{Welc0me_t0_0xG@me_2025_Web!!!}
方法三:浏览器菜单查看源码
-
不依赖右键:点浏览器右上角菜单 → 找到"更多工具" → "查看源代码";
-
或在地址栏最前面手动输入
view-source:再回车,例如:view-source:http://你的靶机地址/
五、得到 flag
0xGame{Welc0me_t0_0xG@me_2025_Web!!!}
含义:Welcome to 0xGame 2025 Web,其中用
0代替o、@代替a,是常见的字符替换写法。
六、知识点扩展
6.1 查看源码的常用方式(对照记忆)
| 方式 | 操作 | 是否受网页 JS 限制 |
|---|---|---|
| 查看源代码 | Ctrl + U |
否(浏览器原生功能) |
| 地址栏前缀 | view-source:网址 |
否 |
| 抓原始 HTML | curl 网址 |
否(JS 不执行) |
| 开发者工具 | F12 |
可能被网页 JS 拦截 |
| 右键菜单 | 鼠标右键 | 可能被网页 JS 拦截 |
重点:当 F12 和右键被禁用时,第一反应就是改用
Ctrl+U或curl。
6.2 常见的前端"假限制"
除了禁用右键/F12,CTF 里还会遇到:
- 禁止复制文字(
user-select:none或拦截 copy 事件); - 弹窗、跳转干扰;
- 输入框限制长度(可在 HTML 里改 maxlength);
- 内容隐藏(
display:none、颜色和背景相同)。
这些都运行在浏览器里,全部可以通过查看源码、改 HTML、直接抓包绕过。
6.3 HTML 注释
html
<!-- 这里的内容页面不显示,但源码里能看到 -->
本题 flag 就藏在注释里,和之前的签到题套路一致。
6.4 与前面题目的联系
- GXUST 签到:flag 藏在 HTML 注释、用 Base64 编码;
- 本题:flag 藏在 HTML 注释,但额外加了"禁用右键/F12"的干扰;
- 本质不变:绕过前端干扰 → 查看源码 → 找到注释 → 取 flag。
七、常见问题
| 现象 | 原因 / 解决 |
|---|---|
| 右键弹提示、没菜单 | 被 JS 拦截,改用 Ctrl+U |
| F12 没反应 | 被 JS 拦截,用 Ctrl+U 或 curl |
| curl 拿到的是一堆代码 | 正常,flag 在末尾注释里,用 grep 提取 |
| 超时、无法访问 | 动态靶机过期,重新开启容器 |
| 找不到注释 | 拉到源码最底部,<!-- --> 形式 |
八、安全启示
- 前端没有真正的秘密,也没有真正的限制:禁用右键、F12 只能挡住普通用户,对懂技术的人形同虚设;
- 敏感信息绝不能写在 HTML、JS、注释里,即使加编码也等于明文;
- 想保护内容不能靠前端拦截,应在服务端做权限控制、按需返回数据;
- 本题也提醒开发者:JS 校验、JS 限制只能用于提升体验,不能作为安全手段。
九、总结
本题完整链路:
页面用 JS 拦截右键/F12 → 用
Ctrl+U或 curl 绕过 → 在 HTML 末尾注释里找到 flag。
需要记住的 4 点:
- 禁用右键(contextmenu)和 F12(keydown)都是前端 JS,靠
preventDefault实现; - 前端限制运行在用户浏览器,可被绕过,不可作为安全手段;
- 绕过首选
Ctrl+U,或用 curl 直接抓 HTML(JS 不执行); - flag 藏在 HTML 注释
<!-- -->里。
Flag:
0xGame{Welc0me_t0_0xG@me_2025_Web!!!}
版权声明
- 本文为个人 CTF 学习笔记(Writeup),题目版权归其主办方所有。
- 本文的文字分析、整理与总结部分为本人原创,转载请注明出处。
- 本文仅用于网络安全学习与研究,请勿用于任何未授权测试;如涉及侵权,请联系本人删除。