计算机教程

php allow_url_include的应用和解释

24 8月 , 2019  

因为这个原因,许多安全研究人员建议在php.ini配置中禁用指向allow_url_fopen。不幸的是,许多推荐这种方法的人,并没有意识到,这样会破坏很多的应用并且并不能保证100%的解决remote
URL includes以及他带来的不安全性。

首先归纳下常见的文件包含函数:include、require、include_once、require_once、highlight_file
、show_source 、readfile 、file_get_contents 、fopen
、file,计划对文件包含漏洞与php封装协议的利用方法进行总结,本篇先总结下一些封装协议,涉及的相关协议:file://、php://filter、php://input、zip://、compress.bzip2://、compress.zlib://、data://,后续再对每个文件包含函数进一步进行探讨。

通常,用户要求在他们使用其他的文件系统函数的时候,php允许禁止URL包含和请求声明支持。

环境概要:

因为这个原因,计划在PHP6中提供allow_url_include。在这些讨论之后,这些特性在php5.2.0
中被backported。现在大多数的安全研究人员已经改变了他们的建议,只建议人们禁止allow_url_include。

PHP.ini:

不幸的是,allow_url_必赢娱乐棋牌,fopen和allow_url_include并不是导致问题的原因。一方面来说在应用中包含本地文件仍然是一件足够危险的事情,因为攻击者经常通过sessiondata,
fileupload, logfiles,…等方法获取php代码………

allow_url_fopen :on  默认开启  该选项为on便是激活了 URL 形式的 fopen
封装协议使得可以访问 URL 对象文件等。

另一方面allow_url_fopen和allow_url_include只是保护了against URL
handles标记为URL.这影响了http(s) and ftp(s)但是并没有影响php或date(new
in php5.2.0) urls.这些url形式,都可以非常简单的进行php代码注入。

allow_url_include:off  默认关闭,该选项为on便是允许 包含URL
对象文件等。

Example 1: Use php://input to read the POST data 

为了能够尽可能的列举所有情况本次测试使用的PHP版本为>=5.2
具体为5.2,5.3,5.5,7.0;PHP版本<=5.2 可以使用%00进行截断。

<?php
// Insecure Include
// The following Include statement will
// include and execute everything POSTed
// to the server

include "php://input";
?>

0x01 是否截断问题:

Example 2: Use data: to Include arbitrary code

本篇由以下这个简单的例子进行探讨,首先看如下两种文件包含情况。

<?php
// Insecure Include
// The following Include statement will
// include and execute the base64 encoded
// payload. Here this is just phpinfo()

include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
?>

情况一:不需要截断:

把这些放到我们的运算里面将会非常明显的发现既不是url_allow_fopen也不是url_allor_include
被保障。这些只是因为过滤器很少对矢量进行过滤。能够100%解决这个URL
include vulnerabilities的方法是我们的Suhosin扩展.

http://127.0.0.1/test.php?file=file:///c:/users/Thinking/desktop/flag.txt

您可能感兴趣的文章:

情况二:需要截断:

在php版本<=5.2中进行测试是可以使用%00截断的。

http://127.0.0.1/test.php?file=file:///c:/users/Thinking/desktop/flag.txt%00

0x02 allow_url_fopen与allow_url_include是否开启的问题:

【file://协议】

PHP.ini:

file:// 协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

file://
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

参考自:http://php.net/manual/zh/wrappers.file.php

使用方法:

file:// [文件的绝对路径和文件名]

http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

【php://协议】

条件:

不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory
和 php://temp 需要开启allow_url_include。

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

参考自:http://php.net/manual/zh/wrappers.php.php\#refsect2-wrappers.php-unknown-unknown-unknown-descriptioq

php://filter
读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

PHP.ini:

php://filter在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

必赢娱乐棋牌 1

测试现象:

http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php

必赢娱乐棋牌 2

php://input  可以访问请求的原始数据的只读流,
将post请求中的数据作为PHP代码执行。

PHP.ini:

allow_url_fopen :off/on

allow_url_include:on

必赢娱乐棋牌 3

测试现象:

http://127.0.0.1/cmd.php?file=php://input

[POST DATA]

也可以POST如下内容生成一句话:’);?> ‘)

必赢娱乐棋牌 4

【zip://, bzip2://, zlib://协议】

PHP.ini:

zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用;


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图