保姆级 | CTF Lemon:禁用右键/F12 怎么破?查看源码 + HTML 注释拿 flag

题目: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 提取
超时、无法访问 动态靶机过期,重新开启容器
找不到注释 拉到源码最底部,<!-- --> 形式

八、安全启示

  1. 前端没有真正的秘密,也没有真正的限制:禁用右键、F12 只能挡住普通用户,对懂技术的人形同虚设;
  2. 敏感信息绝不能写在 HTML、JS、注释里,即使加编码也等于明文;
  3. 想保护内容不能靠前端拦截,应在服务端做权限控制、按需返回数据;
  4. 本题也提醒开发者:JS 校验、JS 限制只能用于提升体验,不能作为安全手段。

九、总结

本题完整链路:

页面用 JS 拦截右键/F12 → 用 Ctrl+U 或 curl 绕过 → 在 HTML 末尾注释里找到 flag。

需要记住的 4 点:

  1. 禁用右键(contextmenu)和 F12(keydown)都是前端 JS,靠 preventDefault 实现;
  2. 前端限制运行在用户浏览器,可被绕过,不可作为安全手段;
  3. 绕过首选 Ctrl+U,或用 curl 直接抓 HTML(JS 不执行);
  4. flag 藏在 HTML 注释 <!-- --> 里。

Flag:

复制代码
0xGame{Welc0me_t0_0xG@me_2025_Web!!!}

版权声明

  • 本文为个人 CTF 学习笔记(Writeup),题目版权归其主办方所有。
  • 本文的文字分析、整理与总结部分为本人原创,转载请注明出处。
  • 本文仅用于网络安全学习与研究,请勿用于任何未授权测试;如涉及侵权,请联系本人删除。
相关推荐
IT_陈寒1 小时前
Vite开发实战:从入门到精通
前端·人工智能·后端
普通人61 小时前
Web端3D模型加载实战指南_Vue3_uni-app_HTML
前端·javascript·uni-app·html
志尊宝1 小时前
AI原生前端开发(043):AI辅助的样式生成(Tailwind CSS)
前端·css·ai-native
king王一帅1 小时前
QuireKit 编辑器的 AI-Native 是如何设计的?谈谈我对真正 AI-Native 的理解
前端·开源·agent
风骏时光牛马2 小时前
生成一个AI开源工具体验标题,只需要一个标题,不需要其他的任何文本。
前端
软件派3 小时前
生产动态数据智能风控:阈值判别、趋势预测、异常识别算法工程落地实战
前端·数据库·算法
花开盛夏^.^11 小时前
电脑打开多个浏览器Web窗口占用较大的运行内存的原因
前端·浏览器
馒头不想说话12 小时前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥14 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github