资讯动态

CTF Web 3分题通关指南:常见考点与解题思路

发布时间:2026/10/15 10:57:56 来源:尧图企业网站定制
1. 从“3分题”说起这类题目到底在考什么打过CTF的人都知道Web方向的题目分值往往和难度挂钩。1分题通常是签到级别5分以上就开始上强度而3分题恰好卡在一个微妙的位置——它不会像签到题那样一眼看穿但也不至于让你卡上三天三夜。很多人第一次接触攻防世界Web高手进阶区的时候都是从3分题开始入手的因为这个分段的题目覆盖了Web安全中最核心、最高频的几类漏洞场景。我自己当初刷这批题的时候最大的感受就是3分题像是一道分水岭。1分题考的是“你会不会用浏览器看源码”3分题考的是“你知不知道一个请求从发出到响应之间中间件、框架、数据库各层可能出什么问题”。它涉及的知识面包括但不限于HTTP协议细节、PHP特性、SQL注入的基础变种、文件包含、目录遍历、弱类型比较、命令执行、反序列化入门等。每一道题背后都对应着一个真实场景中可能出现的配置失误或代码缺陷。这篇文章面向的读者是刚打完新手区、准备向进阶区过渡的朋友或者刷了一部分3分题但总觉得“做出来了但没完全懂”的选手。我会把这类题目的通用解题思路、常见考点分类、实操中容易踩的坑以及我个人的一些经验教训都摊开来聊。不是那种“第一步打开页面、第二步输入payload”的流水账而是帮你建立一套面对未知题目时的分析框架。2. 3分题的常见考点分类与识别方法2.1 信息泄露类最容易被忽视的送分点信息泄露在3分题里出现频率极高但很多新手会直接跳过觉得“没什么技术含量”。实际上信息泄露往往是后续利用的起点。常见的泄露点包括源码泄露.git、.svn、.bak、www.zip、备份文件泄露index.php~、index.php.bak、敏感文件泄露robots.txt、phpinfo.php、.DS_Store、报错信息泄露SQL错误、路径泄露。识别方法很简单拿到一个站点先看robots.txt再试常见备份文件后缀然后用目录扫描工具跑一遍。但这里有个经验不要一上来就开大字典猛扫3分题的目录结构通常很简单用常见字典跑一遍就够了扫太久反而浪费时间。我一般会先手动试几个高频路径比如/www.zip、/.git/HEAD、/index.php.bak如果没反应再上工具。注意有些题目会故意在响应头里塞提示比如X-Powered-By暴露PHP版本或者自定义头里藏着下一步的路径。养成看响应头的习惯能省很多事。2.2 PHP特性类弱类型、松散比较与函数特性PHP是CTF Web题中出现最多的语言没有之一。3分题里涉及PHP特性的题目大致分几个方向弱类型比较与的区别、strcmp函数的数组绕过、in_array的松散比较、preg_match的绕过、intval的截断特性、md5碰撞与md5数组绕过等。拿弱类型比较来说0e12345 0e67890在PHP中会返回true因为两个字符串都被解析为科学计数法的0。这个特性在CTF里被玩烂了但新手第一次遇到往往一脸懵。识别这类题目的信号通常是源码里出现了比较、md5()函数、sha1()函数或者参数名暗示了“hash”“key”“password”之类的含义。另一个高频点是strcmp()函数。在PHP 5.x中如果传入数组strcmp()会报错但返回0导致比较被绕过。虽然PHP 8已经修复了这个行为但很多CTF环境仍然跑在PHP 7甚至PHP 5上。所以看到strcmp($input, $flag)这种代码第一反应就是试试传数组。2.3 SQL注入类从联合查询到盲注的过渡3分题的SQL注入通常不会太复杂但也不会让你直接union select 1,2,3就完事。常见的变种包括过滤了空格用/**/或替代、过滤了关键字大小写混合、双写绕过、数字型注入不需要闭合引号、字符型注入需要闭合引号并注释剩余部分、布尔盲注页面只返回true/false、时间盲注页面无变化但可以通过sleep判断。识别SQL注入的入口通常有登录框、搜索框、URL参数如?id1、Cookie中的值。我个人的习惯是先输入一个单引号看是否报错再输入and 11和and 12对比页面差异。如果页面内容有变化基本可以确定存在注入。实操心得很多3分题的注入点藏在Cookie里而不是URL参数里。因为大部分人只关注GET和POST参数出题人偏偏把注入点放在Cookie的某个字段中。所以拿到题目后Burp Suite抓包把所有可控输入点都试一遍别漏了Header和Cookie。2.4 文件包含与目录遍历类路径拼接的艺术文件包含漏洞在3分题中通常以?filexxx或?pagexxx的形式出现。利用方式包括读取敏感文件/etc/passwd、包含上传的恶意文件、利用PHP伪协议php://filter读取源码、php://input执行代码、data://执行代码。目录遍历则更简单通常是?pathxxx用../逐级向上跳。但3分题往往会加一些过滤比如过滤了../这时候可以用....//或..%2f绕过。还有一种情况是只过滤了一次可以用....//....//这种嵌套方式绕过。识别这类题目的信号是URL中出现文件名或路径参数、页面内容随参数变化、报错信息中包含文件路径。一旦确认存在文件包含优先尝试读取源码因为源码里往往藏着flag的位置或下一步的提示。2.5 命令执行类从eval到system的利用链命令执行在3分题中通常不会直接给你一个system($_GET[cmd])而是通过各种函数间接实现。常见的危险函数包括eval()、assert()、system()、exec()、shell_exec()、passthru()、popen()、proc_open()、反引号运算符。利用方式取决于过滤条件。如果没有过滤直接?cmdcat /flag就行。如果过滤了空格可以用$IFS或%09替代。如果过滤了关键字可以用变量拼接、base64编码、通配符等方式绕过。注意命令执行题目中先确认当前用户权限和可用命令。有些环境是精简过的cat可能不存在需要用tac、head、more、less甚至nl来读文件。我遇到过好几次cat被禁用的情况换成tac就成功了。3. 实操流程拿到一道3分题后的标准动作3.1 第一步信息收集与入口分析拿到题目URL后不要急着输payload。先做三件事看页面源码、看响应头、看robots.txt。页面源码里可能藏着注释、隐藏表单字段、JavaScript中的提示。响应头里可能暴露服务器类型、PHP版本、框架信息。robots.txt可能直接告诉你哪些路径不允许访问——而恰恰是这些路径最有价值。接下来是目录扫描。我通常用dirsearch或gobuster字典选中等规模即可。3分题的目录结构不会太深扫出来的结果通常包括/admin/、/backup/、/upload/、/flag.php、/source.php等。每个目录都点进去看看每个文件都打开看看。3.2 第二步参数探测与漏洞点定位确定入口后开始探测参数。常见的参数名包括id、page、file、path、cmd、url、action、type、name、key、password。每个参数都试一遍基础payload单引号、双引号、../、php://filter、;ls、|whoami等。这一步的关键是观察页面变化。页面报错、页面内容变化、响应时间变化、HTTP状态码变化都是漏洞存在的信号。我习惯用Burp Suite的Repeater模块方便对比不同payload的响应差异。3.3 第三步构造利用链与获取flag确认漏洞类型后构造完整的利用链。比如文件包含文件上传组合先上传一个包含恶意代码的图片文件再利用文件包含漏洞包含该图片执行其中的PHP代码。或者SQL注入文件读写通过注入点写入webshell再连接webshell获取flag。获取flag的位置通常在根目录/flag、/flag.txt、环境变量、数据库中的某个表、源码中的注释。如果找不到flag回头看看题目描述和页面提示往往有线索。3.4 第四步复盘与记录做完一道题后花五分钟复盘这道题考了什么知识点我是怎么发现的有没有更快的解法把解题过程记录下来包括payload和截图。这个习惯坚持下来你会发现很多题目的套路是相通的。4. 常见问题与排查技巧实录4.1 页面无变化怎么办这是最常见的问题。输入payload后页面没有任何变化既不报错也不显示内容。排查思路如下现象可能原因排查方法页面完全无变化参数名错误或参数未传递检查URL和表单确认参数名拼写正确页面无变化但响应时间变长时间盲注用sleep(5)测试对比响应时间页面无变化但状态码变化布尔盲注对比and 11和and 12的状态码页面无变化但响应头变化头部注入检查Set-Cookie、Location等头部4.2 过滤绕过技巧汇总3分题的过滤通常不会太变态但也有一些常见的绕过方式需要掌握空格过滤用/**/、、%09、%0a、()替代关键字过滤大小写混合SeLeCt、双写selselectect、编码%53elect引号过滤用十六进制0x61646d696e、char函数char(97,100,109,105,110)逗号过滤用join、offset、limit替代等号过滤用like、regexp、in、between替代实操心得遇到过滤先别急着绕先想想出题人想考什么。如果过滤了select可能考点是堆叠注入或者报错注入。如果过滤了../可能考点是伪协议或者绝对路径。理解出题意图比盲目尝试更高效。4.3 工具使用中的常见坑Burp Suite记得关闭拦截模式否则请求会卡住。Intruder模块跑字典时注意线程数太高会被封IP。dirsearch默认字典太大3分题用-w指定小字典即可。加-t 10控制线程避免触发防护。sqlmap3分题通常不需要sqlmap手动注入更快。如果非要用加--batch和--level 2就够了别开太高等级。蚁剑/冰蝎连接webshell时注意编码器和加密方式3分题一般用默认配置就行。4.4 心态调整与时间管理3分题做不出来很正常不要死磕。我的习惯是一道题卡了超过30分钟就先放一放去做别的题或者看看Writeup。很多时候换个思路或者过几天再看突然就通了。CTF考的是知识面和熟练度不是让你在一道题上证明自己。5. 从3分题到更高分能力进阶的路径5.1 建立自己的知识库每做完一道题把涉及的知识点整理成笔记。比如“PHP弱类型比较”这个知识点把常见的绕过方式、payload、适用场景都记下来。下次遇到类似题目直接翻笔记就行。我用的是Notion按漏洞类型分类每道题记录题目来源、考点、payload、复盘心得。5.2 从“能做出来”到“能讲出来”检验自己是否真正掌握一道题的标准是能不能把解题思路讲给一个新手听并且让他听懂。如果你能清晰地解释“为什么这里要用php://filter而不是直接读文件”“为什么0e123会被解析为0”说明你真的理解了。5.3 关注真实场景中的漏洞CTF题目是真实漏洞的简化版。平时多关注CVE、漏洞复现文章、安全社区讨论把CTF中学到的知识点和真实场景对应起来。比如CTF中的文件包含漏洞在真实场景中可能对应着LFI到RCE的利用链CTF中的SQL注入在真实场景中可能对应着数据泄露或权限提升。5.4 练习平台与资源推荐除了攻防世界还可以在以下平台练习BUUCTF、CTFHub、Hack The Box、TryHackMe。每个平台的题目风格不同多换换口味能拓宽思路。另外GitHub上有大量CTF Writeup仓库遇到不会的题先搜搜看学习别人的解题思路。6. 个人经验总结与避坑建议刷了这么多3分题我最大的体会是基础不牢地动山摇。很多题目卡住不是因为题目太难而是因为对HTTP协议、PHP语法、SQL语句这些基础知识掌握得不够扎实。比如不知道$_GET和$_POST的区别不知道include和require的区别不知道union select的列数必须匹配——这些基础问题不解决做再多题也是原地踏步。另一个体会是不要迷信工具。工具能帮你提高效率但不能帮你理解漏洞原理。我见过太多人用sqlmap跑出flag就觉得自己会SQL注入了结果换个过滤条件就懵了。手动注入虽然慢但每一步都能让你更清楚漏洞的成因和利用方式。最后保持好奇心和耐心。CTF的本质是解谜游戏享受这个过程比拿flag更重要。遇到不会的题查资料、问别人、反复尝试这个过程本身就是最好的学习。我到现在还记得第一次独立解出一道文件包含题时的兴奋感那种“原来如此”的瞬间是刷题最大的乐趣。最后分享一个小技巧做3分题时先看题目名称和描述往往藏着提示。比如题目叫“backup”大概率考备份文件泄露叫“weak”大概率考弱类型比较叫“include”大概率考文件包含。出题人不会无缘无故起这个名字多留意这些细节能帮你快速定位考点。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑