CTF 基础题型实战解析:从零掌握核心漏洞
面对 CTF 题目感到无从下手?很多看似复杂的题目背后都有固定的套路。本文以 CTF 平台上的基础系列题目为例,拆解五种最常见的题型,并分享可直接复用的脚本和命令。
这些题目覆盖了 CTF 中最核心的几种漏洞类型:本地文件包含、暴力破解、SQL 注入、文件上传和 PHP 代码审计。掌握这些,你就有了应对大部分 Web 安全题目的基本能力。
1. 本地文件包含:从路径穿越到 flag 获取
本地文件包含(Local File Inclusion,简称 LFI)是 Web 安全中一个经典漏洞类型。简单来说,就是网站程序在包含文件时,没有对用户输入进行严格过滤,导致攻击者可以读取服务器上的任意文件。
1.1 漏洞原理与发现
当你打开题目页面,看到的可能只是一段简单的 PHP 代码:
<?php highlight_file(__FILE__); if(isset($_GET['file'])) { $str = $_GET['file']; include $_GET['file']; }
这段代码的逻辑很直接:如果存在 file 参数,就把它包含进来。问题在于,开发者假设用户只会传入程序目录下的合法文件名,但实际情况是,攻击者可以通过路径穿越来访问其他目录的文件。
注意:在实际测试中,不要一上来就尝试读取
/etc/passwd这样的敏感文件。虽然 CTF 题目中通常允许这样做,但在真实环境中,这可能会触发警报或违反法律。
1.2 实战解题步骤
第一步:基础测试
首先尝试最简单的 payload:
http://靶机地址/?file=flag
如果返回错误,说明当前目录下没有名为 flag 的文件。这时候不要灰心,LFI 的乐趣才刚刚开始。
第二步:路径穿越尝试
使用 ../ 返回上一级目录:
http://靶机地址/?file=../flag
如果还是不行,可以尝试更多层级的穿越:
http://靶机地址/?file=../../../flag
第三步:直接访问根目录
最直接的方法是尝试根目录:
http://靶机地址/?file=/flag
在典型的 CTF 题目中,第三种方法通常能直接成功。但我要提醒你的是,在实际渗透测试中,情况往往更复杂。你可能需要结合其他技术,比如:
- 日志文件包含:通过包含 Apache 或 Nginx 的访问日志来执行代码
- PHP 伪协议:使用 来读取文件内容

