各位安全圈的小伙伴们,大家好!
说起CTF(Capture The Flag),很多新手第一反应就是:“这东西听起来很牛,我能学会吗?”别慌,CTF其实就像“寻宝游戏”——组织方给你一个场景,你需要通过各种技术手段找到藏起来的flag(一串特定格式的字符串),提交后就算拿下这道题。
而Web方向,是CTF中对新手最友好的分类。原因很简单:它不需要你懂逆向工程、不需要你会写复杂的加密算法,只要你有一个浏览器、会抓包、能看懂HTTP请求,就已经踏入了Web的大门。今天这篇文章,我就带大家从小白的视角出发,把Web方向的写题思路全面梳理一遍。
第一步:信息收集——别急着hack,先“侦察”
很多小白一上来就想找漏洞,其实最能体现水平的反而是“侦察”阶段。信息收集做得越细,后面找漏洞的效率就越高。
查看网页源码

这是最基本也最容易忽视的一步。右键“查看页面源代码”,仔细看HTML中的注释、隐藏字段、暴露的接口地址。很多题目的flag就明目张胆地藏在HTML注释里,甚至有的题目会在源码里留一个提示性的JS函数,等你去发现。
小贴士:养成习惯,看到任何页面,先 Ctrl+U 看一眼源码,这是Web选手的基本功。
抓包分析HTTP请求

安装一个Burp Suite,把浏览器流量代理过去,你就能看到所有的HTTP请求和响应。重点关注以下几个方面:
- 请求方法:除了常见的GET和POST,有时会出现PUT、DELETE、OPTIONS等不常见的方法,这些往往是出题人的“暗号”。
- HTTP头:特别注意 User-Agent、Referer、Cookie、X-Forwarded-For 等头部,很多题目会检查这些头来做权限控制,你需要学会伪造它们来绕过检查。
- 伪造Cookie:很多题目的权限检查只在Cookie中,比如修改 sessionid 或 isadmin 字段,可能就能以管理员身份登录。
别忘了robots.txt
在目标网址后面加上 /robots.txt,这个文件本来是告诉搜索引擎“什么不能爬”的,但在CTF中,它经常是出题人给你的“路标”——里面往往藏着敏感路径。
其他信息收集手段
- 扫描子域名:有时flag不在主站点,而在某个隐藏的子域名上。
- 查看备份文件:注意 .bak、.swp、.git、.svn 等后缀,这些可能是源码泄露的突破口。
- DNS查询:简单的 nslookup 或 dig 命令,可能能发现隐藏的域名信息。
第二步:漏洞识别——找到那扇“没锁的门”
信息收集完了,接下来就是找漏洞。Web方向的漏洞类型其实不多,把握下面这几个“常客”,能解决大部分题目。
SQL注入
这是CTF Web中出现频率最高的漏洞,没有之一。它的本质是:用户输入的数据没有经过转义就直接拼接到了SQL语句中。
小白怎么判断?在输入框里输入一个单引号 ',如果页面报错或者返回异常,十有八九就是SQL注入。然后你可以:
- 手动构造payload:从简单的 ' or 1=1 — 开始,逐步尝试 union 联合查询,把flag从数据库里“送”出来。
- 使用SQLmap:手动构造太难?直接上SQLmap,一条命令跑穿,不过建议先学会手动构造,理解原理才是核心。
记住:SQL注入的常见类型有回显注入、盲注、联合查询,不同类型的测试方法不一样,建议先从回显注入入手。
XSS(跨站脚本漏洞)
XSS的核心是:你输入的内容被当作代码执行了。在CTF中,XSS题通常需要你偷取Cookie或者弹出flag。
- 反射型XSS:输入的payload直接在URL参数里,页面会把它反射出来。测试方法很简单,在URL参数后面加 <script>alert(1)</script> 就能看出来。
- 存储型XSS:输入的payload会被存入数据库,别人访问时触发。常见于留言板、评论区等功能。
文件上传
如果页面有文件上传功能,一定要重点测试。小白可以尝试以下绕过手段:
- 修改文件后缀:把 shell.php 改成 shell.php5、shell.phtml、shell.php.jpg 等,看能不能骗过后端检查。
- 修改Content-Type:抓包后把请求头中的 Content-Type 改成 image/jpeg,伪装成图片。
- 使用蚁剑连接:上传成功后,用蚁剑连接WebShell,就能在服务器上执行命令了。
CSRF(跨站请求伪造)
CSRF的意思是:诱导用户点击一个恶意链接,在用户不知情的情况下代其发起请求。在CTF中,常见的考法是让你构造一个恶意页面或者请求,让管理员“中招”来完成某个操作。
第三步:深度利用——从漏洞到flag
找到漏洞只是开始,如何利用漏洞拿到flag才是关键。这一步需要你对漏洞有更深入的理解。
文件包含与路径遍历
如果页面有类似 ?file=xxx 的参数,很可能存在文件包含漏洞。你可以尝试:
- 读取系统文件:?file=/etc/passwd 或 ?file=../../../../etc/passwd,看能不能读到系统文件。
- 读取源码:?file=php://filter/convert.base64-encode/resource=index.php,这是PHP中经典的读源码手段。
- 读取flag:如果知道flag的位置,直接包含它就能读出来。
代码审计
很多CTF题目会给你源码,或者你可以通过 .git、.svn 泄露获取源码。拿到源码后,重点关注:
- 反序列化:如果代码里有 unserialize(),仔细看能不能构造恶意的序列化数据。
- 命令执行:找 eval()、system()、exec()、shell_exec() 等危险函数,看参数是否可控。
- PHP弱类型:像 == 和 === 的区别、强制类型转换的坑,这些在CTF中经常出现。
WebShell上传与连接
一旦成功上传了WebShell,就可以用蚁剑连接,获取服务器的命令执行权限。这时候就可以翻找flag了——通常用 find / -name "flag*" 或者直接 cat /flag 来查找。
第四步:绕过技巧——当WAF拦住了你
高阶一点的题目会有WAF(Web应用防火墙)或者各种过滤机制。当你的payload被拦了,别急着放弃,试试这些绕过方法:
- 编码绕过:把payload进行URL编码、Base64编码、Hex编码,让WAF识别不出来。
- 双写绕过:把关键字双写,比如 ununionion 绕过对 union 的过滤。
- 等价替代:用其他函数/符号替代被封的,比如用 updatexml() 替代 union 做报错注入。
- 大小写混绕:UnIoN、SeLeCt 等,骗过大小写敏感的WAF。
- 注释绕过:用 /**/ 或 — 注释打断关键字,干扰WAF的正则匹配。
第五步:敏感信息泄露——flag可能藏在你想不到的地方
有时候不需要打洞,只需要找到泄露的信息就能拿到flag。重点检查:
- 环境变量泄露:很多框架会有 .env 文件,里面可能藏着数据库密码或者直接就是flag。
- 备份文件:index.php.bak、config.php.swp 等,可能是开发者“忘记删除”的备份。
- 版本控制泄露:.git目录泄露,可以用 GitHack 等工具恢复整个源码。
- 配置文件:db_config.php、config.php 等,里面可能有数据库连接信息。
写给小白的实战心得
最后,给初入坑的小伙伴们几条实战建议:
- 先学主流漏洞,别贪多:SQL注入、XSS、文件上传、文件包含,这四个吃透了,能解决大部分入门题。
- 多做笔记,多总结:每解出一道题,写下解题思路,累积自己的“套路”。
- 别怕看不懂:刚开始接触新知识点很正常,先照着抠,跑通了再回头理解原理。
- 善用工具:Burp Suite、SQLmap、蚁剑、Dirsearch、GitHack,这些是Web选手的“六件套”,熟练掌握能事半功倍。
- 多打比赛:理论再好,不实践也是纸上谈兵。从简单题开始,慢慢加难度,持之以恒就能看到进步。
写在最后
CTF Web方向的学习是一个“量变引起质变”的过程。最开始你可能连题目都看不懂,但只要堆量足够,某一天你会突然发现“原来是这么回事”。每一道题都是一次成长,每一个flag都是一枚勋章。
希望这篇文章能帮各位小白理清Web方向的写题思路。别忘了,CTF的乐趣不在于拿了多少flag,而在于解题过程中那种“想明白了”的快感。坚持下去,你也能成为下一个Web大神。
加油,我们比赛见!




