CTF Web 题解:入口参数与文件包含思路

这篇记录一道比较典型的 CTF Web 题思路,核心考点是参数控制与本地文件包含。

题目特征

拿到站点后,首页很简单,只有一个参数:

1
/index.php?page=home

页面切换完全依赖 page 参数,第一反应就是测试是否存在文件包含。

初步测试

先尝试一些常见值:

1
2
/index.php?page=about
/index.php?page=contact

页面都能正常加载,说明后端可能存在类似逻辑:

1
include $_GET['page'] . '.php';

漏洞验证

接下来测试目录穿越:

1
/index.php?page=../../../../etc/passwd

如果没有额外过滤,有机会读取目标文件。

有些题目会拼接后缀,这时可以尝试:

  • 空字节截断思路(旧环境)
  • 日志包含
  • Session 包含
  • PHP 包装器

例如:

1
/index.php?page=php://filter/convert.base64-encode/resource=index

如果成功,就能读取源码。

进一步利用

在这道题里,通过读取源码发现后台还存在一个上传点,但只在管理员登录后可见。继续审计代码后发现:

  • 登录逻辑写死了弱口令
  • 上传点只校验前端后缀
  • 服务端未正确限制脚本执行

最终上传一句话脚本获得权限,读取到 flag。

这类题的核心点

从入口参数判断后端逻辑

看到 ?page=?file=?lang= 这类参数时,要优先想到:

  • 文件包含
  • 目录遍历
  • 本地文件读取

不要只停留在读文件

很多时候文件包含只是第一步,真正的利用链可能是:

  • 读取源码
  • 发现后台路径
  • 拿到凭据
  • 配合上传点 RCE

总结

CTF Web 题很多并不复杂,关键在于把“输入点”与“后端处理逻辑”联系起来。看到可控文件参数时,脑子里要立即联想到包含、读取、审计源码和后续利用链。

后面我还会继续补充 SQL 注入、反序列化和 SSRF 方向的 CTF 题解。