标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2025-2531] 作者: future 发表于: [2019-12-27]
本文共 [932] 位读者顶过
文件包含函数:include、require、include_once、require_once、highlight_file 、show_source 、readfile 、file_get_contents 、fopen 、file 。
环境概要:
PHP.ini:
allow_url_fopen :on 默认开启 该选项为on便是激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象文件等。
allow_url_include:off 默认关闭,该选项为on便是允许 包含URL 对象文件等。
为了能够尽可能的列举所有情况本次测试使用的PHP版本为>=5.2 具体为5.2,5.3,5.5,7.0;PHP版本<=5.2 可以使用%00进行截断。
allow_url_fopen与allow_url_include是否开启的问题:
[出自:jiwo.org]
【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
测试现象: http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php
php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。 PHP.ini: allow_url_fopen :off/on allow_url_include:on 测试现象:
|