CTF-竞赛之web简介(小白手搓版)

CTF-竞赛之web简介(小白手搓版)

 次点击
144 分钟阅读

CTF Web 题目类型全景图:从 🟢 入门 到 🔴 地狱


📌 前置准备(不管哪个阶段都要装好的)

工具

用途

Burp Suite(Community版)

抓包/改包/重放/爆破 — 你的主武器

dirsearch / gobuster

目录扫描,找隐藏端点

curl / Python requests

快速发请求、写脚本自动化

浏览器 DevTools

看源码、查 Cookie、测前端逻辑

SQLMap(辅助)

SQL注入自动化,但要先懂手工再依赖它

核心前提:搞懂 HTTP 协议(方法/状态码/Header/Cookie/Session)——不懂计算机网络的一部分,后边都在靠蒙题。


🟢 Level 1 — 信息收集 & 侦察题(入门送分,⭐)

这些题不需要懂漏洞,考的是"你会不会看"。

题型

典型触发点

学习内容

查看页面源码

<!-- flag{...} -->var secret = ...直接写在前端

右键→查看源码、Ctrl+U

robots.txt

/robots.txt泄漏敏感路径

网站约定俗成的爬虫排除标准

备份文件泄漏

.bak.swp~.git/

常见备份后缀 + GitHack​ 恢复源码

HTTP 头信息泄漏

Server/ X-Powered-By/ 自定义头里藏 flag

curl -I、Burp 看 Response Headers

Cookie / Session 嗅探

flag 直接塞 Cookie 里、弱 Session ID

Cookie 结构、Base64 decode

弱口令爆破

admin/admin、admin/password

Burp Intruder 基础用法

HTTP 方法/跳转绕过

302 跳转藏 flag、改 GET→POST

XFF/Referer 伪造、curl -X POST

敏感文件

/.git/config/phpinfo.php/admin/

字典枚举 + 信息拼图

📚 此阶段实践平台:Bugku(Web区)、攻防世界「新手区」、picoCTF(Web)


🟡 Level 2 — 经典单点漏洞(入门→初级,⭐⭐)

每个漏洞学"原理 → 手工利用 → 绕过基础过滤"这个循环,别只跑工具。

① SQL 注入(SQLi)

细分

内容

联合查询注入

UNION SELECT读库名/表名/列名

布尔盲注

页面真假差异 → 逐字符猜解,写脚本

时间盲注

SLEEP()/ BENCHMARK()逐字符爆破

报错注入

updatexml()extractvalue()让报错吐数据

堆叠注入

;叠多条 SQL(看是否支持)

WAF 初阶绕过

大小写混写、双写(uniunionon)、注释分割、URL编码二次解码

📚 靶场:SQLi-Labs(1~20关)、DVWA(SQLi模块)

② XSS(跨站脚本)

细分

考点

反射型 XSS

输入直接回显到页面 → <script>alert(1)</script>

存储型 XSS

写入数据库再展示 → 常配合"偷管理员 Cookie"拿 flag

DOM型 XSS

前端 JS 不安全地操作 innerHTML/ eval()

基础绕过

过滤 <script>→ 用 <img src=x onerror=...><svg>

XSS 在 CTF 里常见套路:弹 Cookie → 带 document.cookie到你的 VPS → Cookie 里有 flag / 就是 Session

③ 命令注入 / RCE(远程代码执行)

考点

典型场景

分隔符 ;、`

&&

过滤绕过

变量替换 a=c;b=at;$a$b,通配符 cat /fl*

eval()/ assert()/ preg_replace /e(老PHP)

直接代码执行


🟠 Level 3 — 中级:文件操操 + 代码审计 + 协议类(初级→中级,⭐⭐⭐)

④ 文件上传

关卡

绕过手法

前端 JS 校验

关 JS / Burp 改包

MIME 类型校验

Content-Type: image/png

后缀黑名单

.php5.phtml.php;.jpg(IIS)、大小写

白名单 + 路径可控

%00截断(旧版PHP)、路径穿越

二次渲染

图片马(exiftool -Comment='<?php ...>' 1.jpg

配合文件包含​ → 上传合法图片 + 里面藏 PHP 代码,再用 LFI 触发

⑤ 文件包含(LFI / RFI)

考点

内容

include($_GET['file'])

?file=../../../etc/passwd

PHP 伪协议

php://filter/convert.base64-encode/resource=flag.php读源码

php://input

+ allow_url_include=On→ 直接 POST PHP 代码执行

data://text/plain;base64,...

数据协议执行

Session 文件包含

往 Session 里写 PHP 代码 → 再包含 session 文件

⑥ PHP 代码审计(单文件为主)

知识点

典型考法

弱比较 ==vs ===

'0e123' == '0e456'→ Hash 碰撞绕过

md5()绕过

数组绕过 md5($_GET[a])a[]=1

变量覆盖 extract()/ parse_str()

覆盖关键变量

ereg()/ 正则绕过

00 截断、strlen 限制绕过

__wakeup()绕过(CVE-2016-7124)

序列化对象成员数 > 实际 → 跳过 wakeup

⑦ 反序列化(PHP — 最核心的中级考点)

序列化字符串可控 → 构造恶意对象 → __destruct()/__toString() 触发危险方法

要学

内容

PHP 序列化格式

O:4:"User":1:{s:4:"name";s:5:"admin";}

魔术方法触发链

__wakeup → __destruct → __toString

POP 链构造思路

找 sink(file_put_contents / system / eval)→ 往上找 source

Phar 反序列化

通过上传 Phar 文件 + file_get_contents(phar://...)触发

⑧ SSRF(服务器端请求伪造)

考点

内容

基础 SSRF

?url=http://127.0.0.1/flag.phphttp://169.254.169.254/(云元数据)

绕过 URL 过滤

@#dict://gopher://、进制 IP(2130706433=127.0.0.1)

结合 Redis / FastCGI

Gopher 打内网服务

⑨ XXE(XML 外部实体)

<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///flag">]>
<user><name>&xxe;</name></user>

simplexml_load_string()未禁用外部实体 → 读 /etc/passwd/flag

📚 此阶段实践:CTFHub 技能树、攻防世界 2~3星题、BUUCTF(搜索 unserialize/SSRF/XXE标签)


🔴 Level 4 — 进阶:框架漏洞 + SSTI + 复杂审计 + WAF Bypass(中级→进阶,⭐⭐⭐⭐)

⑩ SSTI(服务端模板注入)

模板引擎

检测 Payload

Jinja2 / Twig (Python/Flask)

{{7 * 7}}→ 49 → {{''.__class__.__mro__[1].__subclasses__()...}}→ RCE

Twig (PHP)

{{_self.env.registerUndefinedFilterCallback("exec")}}

Smarty (PHP)

{php}system("cat /flag");{/php}

→ 重点是顺着 MRO/继承链向上找到能执行命令的类

⑪ 框架 N-Day / 特性漏洞

框架

经典洞

ThinkPHP 5.x

s=captchaRCE、__construct任意文件包含

Struts2

OGNL 注入(S2-xxx 系列)

Spring

Spring Cloud Fn SpEL、Spring4Shell

Flask / Django

DEBUG 页面泄露、Session 伪造(flask-unsign)、Django settings 泄露

Laravel

APP_KEY 已知 → Laravel RCE via __invoke

⑫ WAF Bypass(高级过滤对抗)

  • SQLi:/**/注释分隔、内联注释、%0a换行、宽字节(GBK)、分块传输

  • RCE 关键字过滤:c\atc${IFS}atc''at$(tr '!@#' 'c-a')

  • 长度限制:倒序追加、环境变量拼接

  • ModSecurity 规则特征库绕过

⑬ 认证/逻辑漏洞(IDOR、JWT、OTP 绕过)

题型

内容

IDOR

/api/user?id=1→ 改 id=2看别人数据

JWT 攻击

alg:none、弱密钥爆破(hashcat -m 16500)、RS256→HS256 混淆

密码重置逻辑缺陷

Token 可预测 / 不绑定用户 / 重放

条件竞争 Race Condition

余额扣除前并发请求(Flask/Django 无事务保护时)


⚫ Level 5 — 高阶组合拳 & AWD / 现实向(⭐⭐⭐⭐⭐)

类型

说明

多漏洞链

信息泄露 → 拿源码 → 审计出反序列化链 → 找上传点 → Phar触发 → RCE

Node.js 特有

child_process.exec注入、prototype pollution(原型链污染)、vm2沙盒逃逸

Python 特有

pickle反序列化 RCE、format string在 Flask、yaml.load()不安全解析

AWD 攻防模式

拿到 WebShell 后:不死马(.so后门 / find / -perm -4000)、流量混淆、批量打别人 + 补自己洞

内网渗透(线下赛延伸)

Webshell → 收集信息 → 横移 → 拿域控/数据库 → 拖 flag

云原生/CTF 特殊

Docker 逃逸线索、K8s Service Account Token、169.254.169.254SSRF


🗺️ 推荐刷题路线(照着走不迷路)

阶段

平台

目标

第1~2周

Bugku Web / 攻防世界「新手区」

搞定 Level 1(信息收集+HTTP基础),能独立解完所有新手题

第3~6周

PortSwigger Web Security Academy + SQLi-Labs + DVWA

Level 2 核心漏洞逐个击破,每个漏洞亲手打10道题以上

第2~3月

CTFHub 技能树 + BUUCTF(搜 tag)

Level 3:文件包含/反序列化/SSRF/XXE,跟 WP 对照但不照抄

第3~6月

BUUCTF 高星 + 真实赛真题 + 打线上赛

Level 4:框架洞+SSTI+JWT+Bypass,赛后复盘每个没做出来的题

之后

AWD 练习平台 / 组队打高质量杯赛

Level 5:组合利用 + 攻防


🧠 最后一句经验之谈

CTF Web 的本质不是"背 Payload",而是训练一个循环:**看见输入点 → 判断数据流向 → 猜后端怎么处理 → 找处理方式的漏洞 → 构造让后端哭的输入**。前期多手工写,别依赖 SQLMap 跑一切,不然一到不出回显的盲注/不出网的 RCE 就原地蒸发。

当然你想要辅助AI的话,请直接跟豆包对话。

© 本文著作权归作者所有,未经许可不得转载使用。