CTF Web方向学习笔记
CTF Web方向学习笔记
一、CTF Web方向概述
CTF(Capture The Flag)竞赛中,Web方向是最常见且多样化的赛道之一,主要考察选手对Web漏洞的挖掘与利用能力。常见的考点包括SQL注入、XSS、文件上传漏洞、SSRF、反序列化漏洞等。学习Web方向需掌握以下核心技能:
- HTTP协议基础:理解请求头/响应头、Cookie、Session、状态码等机制。
- 漏洞原理与利用:熟悉各类Web漏洞的触发条件和绕过方法。
- 工具链使用:如Burp Suite、SQLMap、Postman、Wireshark等。
- 代码审计能力:能快速分析PHP、Python、Java等语言的代码逻辑。
二、常见漏洞类型与解题思路
1. SQL注入(SQLi)
- 原理:攻击者通过构造恶意输入,使后端数据库执行非预期的SQL语句。
- 常见题型:
- Union注入:利用
UNION SELECT拼接查询结果。 - 布尔盲注:通过页面返回的真假状态逐位猜解数据。
- 时间盲注:通过
SLEEP()或条件延迟判断数据。
- Union注入:利用
- 例题:
通过修改?id=1' AND (SELECT SUBSTR(database(),1,1))='a'--+SUBSTR参数和字符值爆破数据库名。 - 防御:使用预编译语句(Prepared Statement)或ORM框架。
2. XSS(跨站脚本攻击)
- 原理:向页面注入恶意脚本,窃取Cookie或执行任意操作。
- 分类:
- 反射型XSS:Payload通过URL参数传递并即时触发。
- 存储型XSS:恶意脚本存储于数据库,持久化攻击。
- DOM型XSS:通过修改DOM树触发,无需服务器交互。
- 利用技巧:
- 使用
<script>alert(1)</script>测试基础漏洞。 - 通过
document.cookie窃取用户凭证。
- 使用
- 绕过过滤:
- 编码绕过:如
< img src=x onerror=alert(1)>。 - 事件触发:利用
onmouseover、onerror等属性。
- 编码绕过:如
- 防御:输入过滤与输出编码(如HTML实体化)。
3. 文件上传漏洞
- 原理:未对上传文件类型、内容进行严格校验,导致上传恶意文件。
- 绕过方法:
- 修改文件扩展名(
.php→.php5)。 - 添加文件头欺骗(GIF89a)。
- 利用解析漏洞(Apache的
test.php.jpg解析为PHP)。
- 修改文件扩展名(
- 例题:
上传.htaccess文件设置解析规则:
随后上传含PHP代码的JPG文件实现RCE。AddType application/x-httpd-php .jpg - 防御:白名单校验、文件内容检测、禁用危险函数。
4. SSRF(服务端请求伪造)
- 原理:利用服务端发起内部网络请求,探测或攻击内网服务。
- 常见利用场景:
- 访问
file://协议读取本地文件。 - 攻击Redis未授权访问实现RCE。
- 扫描内网端口(如
http://127.0.0.1:3306)。
- 访问
- 绕过技巧:
- 使用进制IP(如
2130706433→127.0.0.1)。 - 域名重定向(利用短链服务或可控DNS)。
- 使用进制IP(如
- 防御:禁用非常用协议、设置请求白名单。
5. 反序列化漏洞
- 原理:未对反序列化数据做安全校验,导致执行恶意代码。
- 常见语言:PHP(
unserialize())、Python(pickle)、Java(readObject())。 - 利用链构造:
- PHP中通过
__destruct()或__wakeup()方法触发漏洞。 - Java利用Apache Commons Collections等Gadget链。
- PHP中通过
- 例题(PHP):
生成Payload后提交触发反序列化。class Exploit { public $cmd = "system('whoami');"; function __destruct() { eval($this->cmd); } } echo serialize(new Exploit); - 防御:避免反序列化用户输入,使用签名校验数据完整性。
6. SSTI(服务端模板注入)
- 原理:将用户输入拼接到模板中,导致执行任意代码。
- 常见框架:Flask(Jinja2)、Django、Twig。
- 检测与利用:
- 输入
{{7*7}}测试是否返回49。 - 通过内置类获取上下文(如Python的
__subclasses__())。
- 输入
- 例题(Jinja2):
替换{{ ''.__class__.__mro__[1].__subclasses__()[X].__init__.__globals__['os'].popen('id').read() }}X查找包含os模块的类。 - 防御:禁止动态模板渲染,沙箱隔离。
三、工具与实战技巧
- Burp Suite:
- 拦截修改请求(Repeater/Intruder模块)。
- 爆破密码或验证码(Cluster Bomb模式)。
- SQLMap:
- 自动化SQL注入:
sqlmap -u "http://target.com?id=1" --dbs。 - 绕过WAF:使用
--tamper=space2comment等脚本。
- 自动化SQL注入:
- 编码转换:
- Base64、URL编码、Hex编码互转。
- WAF绕过:
- 混淆SQL语句:
SEL/*!ECT*/。 - 分割关键词:
<scr<script>ipt>。
- 混淆SQL语句:
四、学习建议与资源
- 靶场练习:
- DVWA、WebGoat、PortSwigger Labs。
- CTF平台:
- CTFHub、攻防世界、HackTheBox。
- 知识扩展:
- 阅读PHP/Java安全特性(如
disable_functions)。 - 学习HTTP走私、JWT伪造等进阶漏洞。
- 阅读PHP/Java安全特性(如
- Writeup分析:
- 复现历年CTF赛题(如强网杯、DEFCON)。
五、总结
CTF Web方向需理论与实践结合,从基础漏洞入手,逐步掌握复杂场景的利用与绕过技巧。建议通过靶场实战加深理解,并关注新兴漏洞技术(如云原生安全、API滥用等),持续提升攻防能力。

浙公网安备 33010602011771号