尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

CTF Web入门:前端信息泄露与代码审计实战指南

CTF Web入门:前端信息泄露与代码审计实战指南 1. 从一道CTF入门题说起Welcome to Earth的启示最近在带新人入门CTFCapture The Flag网络安全夺旗赛时我总会让他们从一些经典的“签到题”开始。[b01lers2020]Welcome to Earth这道来自BUUCTF平台的题目就是一个绝佳的起点。它名字听起来很宏大像是要迎接你进入一个全新的世界但本质上它考察的是Web安全中最基础、却也最容易被忽视的一个环节前端代码审计与信息泄露。很多新手一看到题目就急着上Burp Suite也就是大家常说的bp抓包、爆破或者尝试各种SQL注入、命令拼接结果往往在门口转了半天连门都没摸到。这道题恰恰提醒我们在发起任何复杂的攻击之前静下心来像侦探一样仔细审视目标给你的每一份“公开资料”往往是打开突破口最快的方式。这道题适合所有对CTF Web方向感兴趣的新手无论你是刚知道什么是HTTP请求还是已经对Burp Suite的界面有所熟悉。通过解这道题你将建立起一个非常重要的思维习惯“所见即所得”的深度挖掘。你不会用到复杂的漏洞利用链也不需要高深的编程知识需要的只是一点耐心、一个浏览器的开发者工具和一双善于发现的眼睛。接下来我就带你完整地复盘这道题的解题过程并深入聊聊其中蕴含的、可以举一反三的思路和技巧。2. 解题第一步放弃复杂猜想回归基础侦查面对任何CTF题目尤其是Web题第一步永远不是盲动而是信息收集。对于Welcome to Earth这类题目题目描述通常很简洁甚至没有描述只有一个访问链接。这时你的浏览器就是你最强的侦察兵。2.1 初探页面发现不寻常的“欢迎”访问题目给出的链接后你可能会看到一个非常简单的页面。也许只有一行文字比如 “Welcome to Earth” 或者 “Hello there!”。新手最容易犯的错误就是看了一眼觉得“就这”然后马上按F12打开开发者工具直奔Network标签页去看网络请求或者去Sources里翻找JS文件。顺序错了。正确的第一步是仔细阅读页面上每一个能看到的字符。包括主标题、副标题等大号文字。段落正文、按钮上的文字。页脚footer里不起眼的小字。图片的替代文本alt text或标题。在Welcome to Earth这道题中关键信息往往就藏在这些显而易见的文字里。可能是一句看似无意义的话一个奇怪的单词或者一个指向不明的地名。请记住出题人不会无缘无故放一句话在页面上每一处文本都可能是线索。2.2 深入审查开发者工具的“三剑客”在仔细阅读完可见页面后我们才进入开发者工具。这里主要关注三个面板我称之为“三剑客”Elements元素面板这是我们的主战场。不要只是展开body标签就了事。你需要逐行展开从html标签开始一点点展开查看每一个div、span、p标签的内容。特别注意那些设置了styledisplay: none;或者hidden属性的元素它们的内容在页面上不可见但在HTML源码里一览无余。很多CTF题的flag就直接藏在隐藏的div里。查看注释HTML注释是出题人藏信息的宝地。在Elements面板里注释以!-- 注释内容 --的形式存在。用CtrlF搜索!--可以快速定位所有注释。检查属性查看标签的各类属性如>div idsecret-message styledisplay: none; !-- The flag is not here, but youre getting closer. Try looking at the /hiddendirectory -- /div看第一条线索出现了一个隐藏的div里面有一条HTML注释提示我们查看/hiddendirectory路径。第三步我们直接在浏览器地址栏访问http://题目地址/hiddendirectory。这时Network面板可能会记录到一个302重定向或者页面跳转到一个新页面。新页面可能又是一句简单的话比如 “You found the hidden place! But the flag is elsewhere. Check the page source carefully.”第四步再次查看这个新页面的Elements面板。这次我们可能发现一段有趣的JavaScript代码或者一个注释script // 无聊的装饰代码... // 真正的线索flag 第一部分 第二部分 // 第一部分flag{this_is_ // 第二部分在Cookie里找找看 /script第五步根据提示我们查看Network面板。找到对当前页面/hiddendirectory的请求查看其响应头Response Headers。我们很可能发现一个这样的头Set-Cookie: flag_partthe_rest_of_the_flag}; Path/第六步拼接线索。从JS注释中得到第一部分flag{this_is_从Cookie中得到第二部分the_rest_of_the_flag}。拼接起来完整的flag就是flag{this_is_the_rest_of_the_flag}。注意以上是模拟的、最典型的解题流程。实际题目中线索的隐藏方式可能略有不同比如flag第二部分可能藏在图片的EXIF信息里需要下载图片并用工具查看或者藏在某个前端加密函数的解密结果中。但核心思路不变仔细、彻底地检查前端所有能获取到的信息。3. 核心技巧解析信息隐藏的常见位置与挖掘方法通过上面的流程我们已经解决了一道题。但更重要的是掌握这类“信息泄露”或“前端藏匿”题目的通用解法。下面我系统性地总结一下出题人喜欢把flag藏在哪些地方以及我们该如何挖掘。3.1 HTML文档内的藏匿点这是最直接、最常用的方式。隐藏元素通过styledisplay: none;、hidden属性或CSS类设置visibility: hidden来隐藏元素。在Elements面板中这些元素通常会被置灰或带有特殊标记一眼就能看出来。HTML注释如前所述!-- --是经典的藏信息位置。除了普通注释有时还会用到条件注释针对旧版IE或奇怪的注释格式。标签属性>步骤检查项工具/方法目的1完整阅读页面所有可见文字肉眼发现明文提示或奇怪语句2查看页面标题、图标浏览器标签页标题可能含提示3右键查看页面源代码旧式浏览器右键菜单快速获取原始HTML有时与Elements面板渲染后的不同4检查图片属性与EXIF开发者工具Elements面板或exiftool发现隐藏链接或图片隐写4.2 开发者工具深度检查清单步骤检查项所在面板关键操作1全面检查DOM树寻找隐藏元素Elements逐层展开关注style、hidden属性及灰色元素2搜索HTML注释与特定关键词Elements (CtrlF)搜索!--、flag、{、}、secret、hide3检查所有HTTP请求与响应头Network刷新页面查看每个请求的Response Headers找自定义头4审查所有JS和CSS文件内容Sources阅读源码搜索关键词尝试在Console执行可疑函数5查看Cookie、本地存储等Application/Storage检查是否有存储了flag片段6尝试常见备份文件路径地址栏或目录扫描器手动访问/robots.txt、/.git/、/www.zip、/admin、/backup等4.3 进阶与联想检查清单步骤检查项思路1信息拼接将找到的多个片段如JS注释、Cookie、响应头尝试拼接2编码识别与解码对找到的疑似密文如ZmxhZ3t...很像Base64尝试常用解码3参数爆破简单如果发现URL中有?filehint.txt可尝试?fileflag.php等4回顾题目名称与描述题目名“Welcome to Earth”是否暗示了/earth、/welcome等路径实操心得这个清单不是死板的而是一个思维导图。对于简单的签到题可能执行到第二步就找到了对于复杂的题可能需要循环多次。最重要的是养成“地毯式搜索”的习惯。我曾经见过一道题flag就明文写在CSS文件里一个不起眼的类名注释中很多人用了各种高级工具扫了半天却忽略了最基础的地方。5. 常见误区与避坑指南新手在解这类题目时容易陷入以下几个误区我结合自己的踩坑经验说一下过度依赖自动化工具一上来就用dirsearch狂扫目录用sqlmap测试注入点。对于纯粹的前端信息题这不仅是浪费时间还可能因为请求频率过高被临时封禁IP。工具应该是手的延伸而不是大脑的替代品。先人工进行基础侦查有方向后再用工具辅助。忽视“简单”的答案人的思维有时会自我复杂化。当你找到一个像是flag的字符串如flag{hello_world}但提交显示错误时不要立刻认为它是个陷阱或需要进一步解密。首先检查是否有多余的空格是否复制了首尾的引号是否看错了字符如数字1和字母l数字0和字母O我见过太多因为一个字符抄错而卡住半小时的情况。不查看响应原始内容Network面板中点击一个请求默认看到的是“Preview”或“Headers”。一定要切换到“Response”标签页查看服务器返回的原始内容。有时前端JS会动态修改DOM使得Elements面板里看到的内容与原始响应不同而flag就在原始响应里。对JavaScript恐惧看到稍微复杂一点的JS代码就跳过。其实CTF中的JS大多逻辑简单关键往往只是一两个函数调用或字符串定义。利用浏览器的Console面板你可以直接与页面JS交互例如如果看到var enc_flag Gur synt vf...;和一个rot13函数可以直接在Console里输入rot13(enc_flag)来获取结果。这是非常实用的技巧。不记录和关联线索找到第一个线索比如“第一部分在源码里”后就只盯着源码找忘了线索可能指向其他地方如Cookie、Headers。好记性不如烂笔头建议随手把找到的线索记在纸上或文本文件里并思考它们之间的关联。6. 举一反三从这道题到其他变体掌握了Welcome to Earth的核心思路你可以轻松解决BUUCTF上许多同类型题目例如搜索词里提到的buuctf rot、buuctf snake等。它们的本质都是“信息在前端需要你去发现和解读”。[ACTF2020]rot这很可能是一道关于ROT13一种字母替换密码编码的题目。线索可能是一个经过ROT13编码的字符串藏在HTML注释或JS变量中。你需要识别出这是ROT13特征是所有字母都被替换但标点符号不变然后使用在线工具或Console里的atob不对ROT13不是Base64或自己写一小段JS解码。[GXYCTF]snake题目名“蛇”可能暗示了经典的贪吃蛇游戏通过玩到一定分数获得flag。一种名为“Snake”的编码其实就是下划线命名法flag_is_here。前端代码像蛇一样蜿蜒曲折代码混淆。你需要耐心地反混淆或寻找解码逻辑。[HCTF]php这显然指向PHP后端。但作为入门题它可能只是考察一个最简单的PHP特性比如代码执行漏洞。页面上可能有一个输入框提交后参数会传到后端eval()或system()函数中。你需要尝试输入phpinfo();或system(‘ls’);来验证。注意在真实CTF中操作严禁对非比赛目标进行测试解决这些题目的通用流程依然是前端信息收集 - 发现编码或线索 - 解码或遵循线索 - 获取flag。随着题目难度上升编码方式会更复杂如Base64、Hex、URL编码嵌套线索会更隐蔽如需要计算哈希、破解简单密码但侦查的基本功是相通的。最后我想说CTF的魅力不在于你用了多么炫酷的漏洞利用技术而在于像解谜游戏一样运用逻辑、知识和细心去发现那些被刻意隐藏的信息。[b01lers2020]Welcome to Earth这道题就像它的名字一样是一声友好的问候也是带你进入CTF世界大门的钥匙。从这道题开始培养起细致入微的观察力和系统性的侦查思维你会发现后续面对更复杂的Web漏洞、逆向工程或密码学题目时这份基本功会让你受益匪浅。下次遇到一道看似简单的Web题不妨先深呼吸然后按照我们今天梳理的清单一步一步来。你会发现很多答案其实就在眼前。
返回列表