ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CTF Web入门实战:从源码查看、前端绕过到SQL注入与命令执行

CTF Web入门实战:从源码查看、前端绕过到SQL注入与命令执行 前几天一个初三学生私信我说自己刚接触CTF看了一圈Web题连第一页都过不去。我让他把页面截图发过来发现是个特别典型的入门题flag就写在网页源码的注释里。这让我意识到很多新手不是不会技术而是连CTF Web题最基本的“解题姿势”都还没建立起来。青少年CTF练习平台的Web第一页往往是整个Web方向里最友好、也最讲究“细心”的一页。它不会上来就考你复杂的漏洞利用而是先教你如何用浏览器的眼睛去看页面背后的东西。这篇文章我就拿这类平台的真实出题思路为例从查看源码、绕过前端校验到简单的SQL注入和命令执行把第一页会遇到的几类题型完整拆一遍。无论你是初中生还是刚入门的大学生看完应该都能把这一页稳稳拿下。1. 青少年CTF练习平台Web方向为什么从“看”开始1.1 Web方向是入门CTF的最佳起点CTF比赛大致分几个方向Web、Reverse、Pwn、Crypto、Misc。其中Web方向最贴近我们日常使用互联网的场景浏览器打开一个网页就能开始分析不需要像Pwn一样先搞懂汇编和堆栈也不像Reverse那样要面对IDA Pro的冷启动。对青少年来说Web方向的正反馈来得特别快改一个参数、找到一个注释、拼出一个请求flag就到手了。青少年CTF平台也是这样设计的。Web第一页不会直接扔一个反序列化利用出来而是从最基础的“信息收集”开始教。这个其实非常符合真实的网络安全工作流拿到一个目标第一件事不是攻击而是观察。会看才谈得上会打。1.2 第一页的题目设计其实是按“发现路径”排的我翻了几个主流青少年CTF练习平台Web分类第一页的题目顺序基本遵循一条线页面源码或响应头里直接藏flag教你看页面背后。前端JS或按钮属性限制操作教你不信任前端。登录或查询接口存在简单SQL注入教你理解数据库交互。一个有命令执行或文件包含的页面教你认识输入输出的威力。这个顺序不是随机的。它先让你掌握“看见看不见的东西”这个能力再让你理解“浏览器的显示不等于后端逻辑”最后才接触服务端漏洞。如果你第一页就卡住多半不是技术问题而是还没养成观察的习惯。2. 第一道题实操flag在网页源码里2.1 一道几乎人人都能解但有人找不到的题平台第一页第一题长这样页面上只显示一句“欢迎来到青少年CTF”其他什么都没有。很多新手右键一按发现没有“查看源代码”选项或者弹出的页面是空的就不知道怎么办了。其实这类题的核心考点就一个你会不会用开发者工具。正确的打开方式是按键盘上的 F12或者 CtrlShiftI然后点开 Elements 面板。HTML代码里赫然写着一行注释!-- flag{first_step_web} --把大括号里的内容复制下来提交到平台这道题就过了。就这么简单但每年都有不少人在这里卡半小时。2.2 为什么flag会放在注释里这不是真实漏洞而是刻意制造的“失误”。CTF题目的本质是模拟各种可能泄露信息的场景。网页源码的注释、JS文件里的调试日志、响应头里的自定义字段、robots.txt 里的隐藏目录都属于开发者在真实项目中可能留下的痕迹。所以解这一题时应该顺手把整个页面里所有“看不见的地方”都检查一遍Elements面板里搜索flagNetwork面板里看每个请求和响应的 Header查看页面引用的 JS、CSS 文件内容尝试访问/robots.txt、/.git/等路径有些升级版题目会把flag拆成两半一半在注释里一半在响应头的X-Flag字段里。只找到一半提交是过不了的这种题专门治粗心。2.3 实操心得先学会搜索再学会肉眼我建议所有新手第一件事就是记住一个快捷键在开发者工具里按 CtrlF 可以搜索当前面板内容。但要搜索整个网页的所有资源得在 Sources 面板里逐个文件看或者用 Network 面板把页面加载的全部文件过一遍。还有一个实用技巧提交flag之前先确认平台规定的flag格式。有的平台是flag{}有的是ctf{}还有的要全部小写。第一次提交失败时先检查格式不要急着怀疑题目错了。3. 第二类题前端验证靠“改”就能过3.1 按钮被禁用了别慌过了源码题第二题通常长这样页面上有一个输入框让你输入密码但你发现“确定”按钮是灰色的根本点不了。有的平台做得更绝输入框里直接有默认文字但按钮disabled属性写死在HTML里。这类题考的是前端验证绕过。说白了网页上看到的一切交互限制浏览器里的HTML、JS、CSS都是可以被修改的。按钮被禁用只是前端开发时加了一个disabled它不代表后端不接受你的请求。3.2 实操三步改掉disabled属性以Chrome为例操作方式如下在“确定”按钮上右键选择“检查”自动定位到对应的HTML元素。在代码里找到disabled字样双击删掉它或者右键选择 Edit as HTML把整个button标签里的disabled属性移除。按回车确认再点击按钮如果页面能跳转或者弹出内容说明前端校验就这一层。有时候按钮本身没有disabled而是JS在页面加载后动态加上去的。这种情况直接删HTML不一定好使需要去 Console 面板里找有没有被隐藏的函数或者直接看 Network 面板里提交密码的那个接口用抓包工具自己构造请求。3.3 为什么不能只信前端平台出这题的目的是想让你建立“前端不能作为安全边界”的认知。真实网站里如果把密码校验写在JS里攻击者把JS一改就能绕过那等于没有验证。所以这类题会配一个后端接口聪明的做法是别去纠结页面的按钮直接看Network面板找到提交请求的URL用Burp Suite重发请求。我在练习群里见过有人为了点一个按钮花了半小时研究怎么修改JS逻辑其实直接用curl带参数请求后端接口一秒就出flag。所以这里给大家一个建议做Web题脑子里时刻记着“页面是表象请求才是实质”。4. 第三类题SQL注入先懂原理再动手4.1 从“登录绕过”理解SQL注入Web第一页最常见的第三题是SQL注入绕过登录。页面就是一个登录框让你输入用户名和密码后端大概率执行的是这样一个查询$sql SELECT * FROM users WHERE username $username AND password $password;如果直接输入正常用户名和密码查询会老老实实匹配。问题是我们输入的内容被直接拼接进了SQL语句里那就有了“注入”的空间。比如用户名输入admin or 11 -- -这句拼接进SQL之后变成了SELECT * FROM users WHERE username admin or 11 -- - AND password ...-- -是MySQL里的注释符号它把后面真正的密码判断直接注释掉了。而or 11永远为真所以这条SQL会返回用户表中的第一条记录通常就是管理员。4.2 在平台上实操要注意的细节这类题在青少年CTF平台上是合法教学场景可以放心尝试但我建议大家动手时注意几个点先判断后端是什么数据库。MySQL用--或#SQLite和PostgreSQL也支持--但语法细节不同。如果页面没有回显不要慌。可以先试看看会不会报错报错信息往往会泄露SQL语句的一部分。每次只改一个字符记录页面变化不要一次性尝试超长payload。我第一次带学生做这题时他输入admin or 11--没成功原因是少了一个空格。很多新手都会在这里栽跟头因为注释符号后面需要保证是空字符或换行否则可能被拼接到后面的SQL里产生语法错误。4.3 学完这题我应该懂什么SQL注入的意义不在于“会输入一个万能密码”而在于理解字符串拼接SQL是极其危险的行为。任何用户输入在进入数据库之前都必须经过参数化查询或转义。CTF里让你绕过登录是为了让你看到漏洞成因而不是让你去攻击真实网站。所以做完这题建议顺手搜一下“参数化查询”或者“PreparedStatement”。平台第一页能让你体验到漏洞的威力但真正的高手是从防御角度倒推攻击手法的。5. 第四类题命令执行与控制面逃逸5.1 当Web后端开始“执行你的命令”Web第一页的压轴题往往是一个带输入框的“Ping测试”功能。页面提示你输入一个IP地址后端拿到输入后直接拼进系统命令里?php $ip $_GET[ip]; system(ping -c 3 . $ip); ?看到system或者passthru这类函数就知道输入如果带特殊字符系统就会执行额外的命令。比如输入127.0.0.1; ls那么在Linux系统里分号前面的ping会执行分号后的ls也会被当成新命令执行。输出会直接显示在网页上flag往往就在某个文件里。5.2 常见的绕过姿势只讲靶场场景命令注入的过滤规则五花八门第一页主要考最基础的几种分号;不管前面命令成不成功后面都执行。竖线|把前面命令的输出传给后面命令。换行符%0a有时候分号和竖线被过滤了换行符也能达到类似效果。空格被过滤时可以用${IFS}代替空格比如cat${IFS}/flag。如果页面直接显示命令输出那很轻松读取flag文件就行。如果页面没有任何回显就需要考虑把文件内容“带出来”但在青少年平台第一页基本不会要求外带数据不用太担心。5.3 做完这题最重要的收获命令注入题带给青少年的冲击力非常大因为它特别直观你在网页里敲几个字符服务器竟然就跟着跑了。但这恰恰也是安全教育的好时机。在真实环境里未经授权对任何服务器执行命令都是违法的。CTF平台上的题目是特意模拟出来的“漏洞靶场”你的操作只作用于平台分配给你的容器。练习时多问自己一句如果这个输入框出现在真实企业网站上我能这么试吗答案是不能。带着这种边界感去打CTF技术才会走得正。6. 常见问题与排查技巧实录6.1 解Web题的基本顺序信息收集清单我让学生在Web第一页直接背这个顺序遇到任何题都先跑一遍看网页源代码搜索flag、ctf、key等关键字。看Network面板每个请求和响应都点开看Headers。看Cookie和LocalStorage有些平台会把flag放在浏览器存储里。看robots.txt、sitemap.xml、隐藏目录。看页面是否引用奇怪的JS文件可能有提示。这个清单覆盖了第一页90%的题目。很多新手做题快不是因为脑洞大而是因为检查项全。6.2 工具准备别一上来就追求全家桶青少年平台Web第一页其实不需要装一堆重型工具。我推荐的起步组合是工具用途备注Chrome / Edge 开发者工具查看源码、请求、调试JSF12直接打开Burp Suite Community抓包改包、重放请求配置本地代理后使用Python requests发送构造的请求做脚本题的基础目录扫描工具发现隐藏目录和备份文件比如御剑这类工具但只能在授权靶场使用关于御剑这类目录扫描工具多说一句它本质是字典爆破能扫出敏感路径威力不小所以一定要守住底线只对平台分给你的题目容器使用不要拿去扫任何真实站点。6.3 做不出来时如何自己排查第一页的题不难但人难免钻牛角尖。当你卡住超过20分钟我建议立刻停下来做三件事重新读题看有没有漏掉的提示。平台经常把flag格式、密码是手机号、答案在某个文件这类线索写进题目描述。搜索报错信息。页面报的数据库错、PHP警告往往直接告诉你底层是什么技术栈。用另一位没参与的人视角重新点一遍页面避免自己陷入“已经试过这个”的错觉。如果实在不行再去看平台的Writeup。看题解不是坏事但一定要看懂了以后自己重做一遍。复制答案提交那叫抄作业搞懂思路后关掉题解再做那才叫学习。7. 从“第一页”到正式入门我给新手的建议7.1 建一个自己的解题笔记很多青少年做题全靠脑记做完就忘。我强烈建议从第一题开始就用Markdown记笔记模板可以很简单题目名称和考点提交flag的完整操作过程用到的代码或payload为什么自己能成功为什么有些尝试失败如果这道题是真实漏洞该怎么防御坚持记十题你回头看会发现进步很大。第一页的题目虽然简单但“把过程写下来”这个习惯会直接影响后面接触复杂题目时的复盘效率。7.2 下一步应该学什么如果你在平台Web第一页已经能稳定通关说明你已经掌握了信息收集、前端绕过、SQL注入和命令执行的基本概念。接下来可以按这个路径走系统学一门后端语言的基础PHP或Python都行至少要能读懂题目给的源码。浏览OWASP Top 10了解Web安全漏洞全景不用背混个脸熟。继续刷平台Web分类第二页的题一般会开始涉及文件上传、XSS、反序列化。找几个青少年公益CTF比赛报名实战一次比闷头做一百题都管用。7.3 写在最后的个人体会我带了两年多学生打CTF发现一个规律Web第一页真正筛选的不是智力而是细心和耐心。有的孩子五分钟连过三道题有的孩子卡在源码题上原因是把F12按成了F1。工具的熟练程度、搜索的准确度、检查的完整性才决定你在这个阶段走得稳不稳。第一页的所有题目实际上都是在教一件事永远不要想当然。看到网页想一下它背后是什么拿到请求想一下它能变成什么。这种思维习惯一旦建立起来后面学到中间件漏洞、逻辑漏洞、容器逃逸都会顺很多。希望这篇内容能帮你把Web第一页走顺。
返回列表